# скопировать из Excel и вставить в блокнот с помощью VBA - PullRequest
0 голосов
/ 15 февраля 2019

Я могу напечатать значения из 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

Пробелов больше, чем требуется, пожалуйста, помогите получить желаемый результат, потому что инструментпринимает только желаемый формат Sample Image

1 Ответ

0 голосов
/ 15 февраля 2019

Ваш первый вывод использует стандартные «зоны печати» в каждом 14-м столбце (позиции 1, 15, 29, ...), которые вы получаете, печатая с добавлением comma

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

Ваш желаемый вывод начинается со следующего кратного 8 символов (1, 9, 17, ...)

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

Вы можете установить следующую позицию печати в вашем файле с помощью 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

Дополнительные советы:

Используйте Freefile, чтобы получить следующий бесплатный номер файла(это может быть 1).

Используйте CStr(), чтобы запретить автоматически добавленные пробельные символы до и после числовых значений.

...