简体   繁体   English

#使用VBA从excel复制并粘贴到记事本

[英]#copy from excel and paste to notepad using VBA

I am able to print the values from excel to notepad, but the format is bit different,我可以将值从 excel 打印到记事本,但格式有点不同,

Dim txtFile As String, rng As Range, cellValue As Variant, r As Integer, c As Integer
    txtFile = slocation & "\" & "Cont_name_" & Filename & ".txt"
    lrow = Range("I" & Rows.Count).End(xlUp).Row
        Range("A2:G" & lrow).Select
        Set rng = Selection
        Open txtFile For Output As #1
        For r = 1 To rng.Rows.Count
            For c = 1 To rng.Columns.Count
                cellValue = rng.Cells(r, c).Value
                If InStr(cellValue, "/") Then
                    cellValue = Format(cellValue, "yyyyMMDD")
                End If
                If c = rng.Columns.Count Then
                    Print #1, cellValue
                Else
                    Print #1, cellValue,
                End If
            Next c
        Next r
                Close #1

Spaces are more than the requirement, please help to achieve the desired output,because the tool is accepting only the desired format空格超过要求,请帮助实现所需的输出,因为该工具只接受所需的格式示例图像

Your first output uses the standard "print zones" in every 14th column (positions 1, 15, 29, ...), which you get by printing with appended comma您的第一个输出在每 14 列(位置 1、15、29、...)中使用标准的“打印区域”,您可以通过附加comma进行打印

.............|.............|.............|.............|.............|.............|
XXX-XX-XXXX 20190111 AA 123 NAME NAME XXXXX

Your desired output starts at the next multiple of 8 characters (1, 9, 17, ...)您所需的输出从 8 个字符的下一个倍数开始(1、9、17、...)

.......|.......|.......|.......|.......|.......|.......|.......|.......|
XXX-XX-XXXX.....20190111........AA......123.....NAME....NAME....XXXXX

You can set the next print position in your file by Seek您可以通过Seek设置文件中的下一个打印位置

Private Sub SaveAsText()
    Dim rng As Range
    Dim r As Long, c As Long

    Set rng = ActiveSheet.Range("A1:G1")

    Dim file1 As Integer
    file1 = FreeFile
    Open ThisWorkbook.Path & "\test.txt" For Output As file1

    For r = 1 To rng.Rows.Count
        For c = 1 To rng.Columns.Count
            If c = 1 Then
                Print #file1, CStr(rng.Cells(r, c).Value);
            Else
                Seek #file1, (Seek(file1) \ 8 + 1) * 8 + 1
                Print #file1, CStr(rng.Cells(r, c).Value);
            End If
        Next c
    Next r
    Close #file1

End Sub

Additional Hints:附加提示:

Use Freefile to get the next free file number (which might be 1).使用Freefile获取下一个空闲文件编号(可能是 1)。

Use CStr() to prevent the automatically added space characters before and after numeric values.使用CStr()防止在数值前后自动添加空格字符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM