Сохранить как CSV с разделителем с запятой

В настоящее время я использую эту функцию для сохранения, но у меня есть проблема с ней:

Private Sub spara()
    ActiveWorkbook.SaveAs Filename:="T:filepath+ ActiveWorkbook.Name", _
    FileFormat:=xlCSV, CreateBackup:=False
End Sub

он автоматически сохраняет с , но мне нужно его сохранить с ; в свой файл. Можно ли как-то изменить то, как он экономит?

Я пробовал googling вокруг этой проблемы, но все макросы относительно .сохранение csv-файлов-это просто способ сохранения .CSV и как разделить несколько листов .csv .

6 ответов


какой язык использует Excel? Если ваш родной язык использует "; "по умолчанию, вы можете передать параметр "local:=True"

ActiveWorkbook.SaveAs Filename:="C:\Temp\Fredi.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True

если нет, ваш единственный выбор-поиск и замена после этого...


измените параметры Excel (Дополнительно, Параметры редактирования), чтобы установить десятичный разделитель на , (очевидно (!))


вполне возможно, что эта проблема не разрешима только с помощью Excel VBA. Проблема в том, что Excel Save As... использует локаль машины определяет значение разделителя списка, Excel VBA всегда использует локаль en-US, таким образом, он всегда использует , как разделитель списка.

Я бы рекомендовал сохранить CSV, а затем использовать пользовательское консольное приложение/скрипт для постобработки. Существует множество парсеров CSV, которые могут читать ,-csv и сохраните его как ;-csv.


Я искал это, чтобы помочь решить аналогичную проблему, которую я имел, У меня был лист excel, который я экспортирую в файл csv, это затем загружается в другом месте, но требует использования точек с запятой, а не запятых для разделения символов, это отлично работало, когда я вручную экспортировал файл, поскольку я уже изменил следующее Панель управления > > регион и язык > > дополнительные настройки > > разделитель списков от запятой до запятой. Но когда я попытался автоматизировать через VBA, он по умолчанию назад к запятой, чтобы исправить, я добавил местный папраметр, как предложил Кристиан Зауэр, выше которого затем поднимает тот факт, что я изменил свои региональные настройки.

ActiveWorkbook.SaveAs Filename:="Filename.txt", FileFormat:=xlCSV, CreateBackup:=False, Local:=True

спасибо Кристиану за указатель.


Я решил его, добавив "SaveChanges:=False" при закрытии книги

With ActiveWorkbook
     .SaveAs Filename:="T:\filepath+ ActiveWorkbook.Name", FileFormat:=xlCSV, Local:=True
     .Close SaveChanges:=False
End With

для людей, имеющих проблемы с этим кодом

dim wa as Workbook

Workbooks.OpenText FileName:=path2file, _
DataType:=xlDelimited, Semicolon:=True, Local:=True
set wa = ActiveWorkbook

    wa.SaveAs FileName:=path2file, FileFormat:=xlCSV, _ ConflictResolution:=xlLocalSessionChanges, Local:=True

    wa.Close False

вторая строка действительно важна, если wa.Close False нет, он попросит разрешения на сохранение, или если wa.Close True Он заменит"; "для",".

после перехода в локальные настройки и создания"; " разделитель списка, VBA все еще разделялся с ",". Изменил код выше, и это было сделано.

надеюсь, это прольет свет на некоторые