При использовании инструментов, доступных на ленте, для экспорта листа в виде файла 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 в макросе].