Когда я экспортирую лист в виде txt, в конце появляется пустая строка.
Я использую этот код для определения используемого диапазона и экспортирую только его. Необходимо, чтобы рабочая книга с копируемыми данными была открыта.
Sub export_range_txt()
Workbooks.Add
y = ActiveWorkbook.Name
'insert the name of the workbook were data is been copied and create this sub there
Windows("original.xlsm").Activate
ActiveSheet.Activate
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:Y" & LastRow).Copy
Windows(y).Activate
ActiveSheet.Activate
Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.DisplayAlerts = False
'change path to desired location of the txt file
ActiveWorkbook.SaveAs Filename:= _
"path\test.txt", FileFormat:=xlText, _
CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub
@ VBasic2008 конечно, приношу свои извинения
Следующая функция экспортирует диапазон в текстовый файл без пустой строки в конце.
Function exportRgToTxt(rg As Range, filename As String)
' use a semicolon as a column separator, adjust accordingly or use a parameter
Const SEPARATOR = ";"
Dim i As Long, j As Long
Dim vdat As Variant, vRow As Variant
' Placing the values of the range into an array
vdat = rg.Value
Dim txtFile As Long
txtFile = FreeFile
Open filename For Output As txtFile
' Write each row of the range to the text file but the last one
For i = LBound(vdat, 1) To UBound(vdat, 1) - 1
vRow = Application.WorksheetFunction.Index(vdat, i, 0) ' Get the i-th row of the array
vRow = Join(vRow, SEPARATOR)
Print #txtFile, vRow ' This will add a CRLF at the end of the line
Next i
' Write Last row without an CRLF
vRow = Application.WorksheetFunction.Index(vdat, UBound(vdat, 1), 0)
vRow = Join(vRow, SEPARATOR)
Print #txtFile, vRow; ' the semicolon will avoid the CRLF at the end of the file
Close txtFile
End Function
Имейте в виду, что функция не будет работать, если диапазон содержит только одну ячейку. Его можно было бы подкорректировать, но я оставляю это читателю.
Вот как вы можете проверить это
Sub testit()
exportRgToTxt Range("A1").CurrentRegion, "D:\tmp\abc.txt"
End Sub
Дальнейшее чтение на Распечатать заявление. В частности, здесь нам нужен параметр чарпос.
чарпос
Определяет точку вставки для следующего символа. Используйте точку с запятой, чтобы поместить точку вставки сразу после последнего отображаемого символа. Используйте Tab(n), чтобы поместить точку вставки на абсолютный номер столбца. Используйте Tab без аргумента, чтобы поместить точку вставки в начало следующей зоны печати. Если charpos опущен, следующий символ печатается на следующей строке..
См. ниже, как можно использовать функцию в коде OP.
Sub export_range_txt()
Workbooks.Add
y = ActiveWorkbook.Name
'insert the name of the workbook were data is been copied and create this sub there
Windows("original.xlsm").Activate
ActiveSheet.Activate
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
'Range("A1:Y" & LastRow).Copy ' this line is not needed any longer
' Here you could use the exportRgToTxt instead
exportRgToTxt Range("A1:Y" & LastRow), "<your file name>"
' the remaining code is not neccessary
' Windows(y).Activate
' ActiveSheet.Activate
' Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
'
'
'
' Application.DisplayAlerts = False
' ActiveWorkbook.SaveAs Filename:= _
' 'change path to desired location of the txt file
' "path\test.txt", FileFormat:=xlText, _
' CreateBackup:=False
' ActiveWindow.Close
' Application.DisplayAlerts = True
End Sub
Большое тебе спасибо!! работает как шарм, я пробовал только с одной строкой и одним столбцом, и он также работал отлично, только один последний вопрос, должен ли я отредактировать свой вопрос, чтобы включить ответ? Я новичок в stackoverflow и хочу делать все правильно, чтобы помогать другим, спасибо!
Все хорошо, вы все сделали правильно, отметив ответ
У меня другой вопрос по поводу более сложной интеграции этого кода, в таком виде он работает правильно, но при интеграции с другим выдает следующую ошибку: тип 13 типы не совпадают, следует задать другой вопрос? или просто обновить этот?
он появляется в строке vRow = Join(vRow, SEPARATOR). похоже, что у меня есть столбцы с общим форматом, датой, часом и текстом, так что это влияет на данные массива?
Извините, но я ничего не знаю о вашей "интеграции соответствия". Я предлагаю создать новый пост с соответствующей информацией.
Спасибо, я уже создал сообщение stackoverflow.com/questions/71806957/…, если вы можете его проверить, это было бы здорово.
Не могли бы вы поделиться кодом, который вы использовали для экспорта листа? Вы можете отредактируй свой пост в любое время.