Указание разделителя при сохранении файла CSV в макросе (Microsoft Excel)
При использовании инструментов, доступных на ленте, для экспорта листа в виде файла CSV, Аркадиуш отметил, что он может указать, что он хочет использовать точку с запятой (;) в качестве разделителя полей. Однако, если он сохраняет файл CSV с помощью макроса (FileFormat: = xlCSV или xlCSVWindows), то он не может указать точку с запятой в качестве разделителя.
В VBA это работает именно так. Реализация в Excel подпрограмм экспорта для VBA всегда использует любые региональные настройки Windows, чтобы определить, как следует разделять элементы в CSV.
В частности, подпрограмма просматривает поле Разделителя списка для разделителя. Это означает, что при желании вы можете изменить разделитель на точку с запятой, изменив параметр «Разделитель списка» в конфигурации региональных параметров.
Если вы не хотите изменять региональные настройки, вместо этого вы можете написать свой собственный макрос, который будет выводить файл любым удобным для вас способом.
Рассмотрим на мгновение следующий макрос, который выведет файл:
Sub CreateFile() Dim sFName As String Dim Rows As Long Dim Cols As Long Dim J As Long Dim K As Long Dim sTemp As String Dim sSep As String sSep = ";" 'Specify the separator to be used sFName = ActiveWorkbook.FullName If Right(sFName, 5) = ".xlsx" Then sFName = Mid(sFName, 1, Len(sFName) - 5) sFName = sFName & ".txt" Open sFName For Output As 1 With ActiveSheet 'Number of rows to export is based on the contents 'of column B. If it should be based on a different 'column, change the following line to reflect the 'column desired. Rows = .Cells(.Rows.Count, "B").End(xlUp).Row For J = 1 To Rows sTemp = "" Cols = .Cells(J, .Columns.Count).End(xlToLeft).Column For K = 2 To Cols sTemp = sTemp & .Cells(J, K).Value If K < Cols Then sTemp = sTemp & sSep Next Print #1, sTemp Next J End With Close 1 sTemp = "There were " & Rows & " rows of data written " sTemp = sTemp & "to this file:" & vbCrLf & sFName Else sTemp = "This macro needs to be run on a workbook " sTemp = sTemp & "stored in the XLSX format." End If MsgBox sTemp End Sub
Этот макрос открывает текстовый файл с тем же именем, что и ваша книга. Затем он проходит через каждую строку и начинает складывать строку содержимого ячейки. (Это помещается в переменную sTemp.) Между каждой ячейкой ставится точка с запятой, как определено переменной sSep. Объединенные значения каждой строки сохраняются в текстовом файле, и после этого текстовый файл закрывается. Процедура выполняется очень быстро, и по завершении она отображает сообщение, показывающее, сколько строк было экспортировано в файл.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (9243) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Specifying_a_Delimiter_when_Saving_a_CSV_File_in_a_Macro [Указание разделителя при сохранении файла CSV в макросе]
.