Sub SaveAsCSVinQuotes()
Dim r As Range, c As Range, s As String
s = Application.GetSaveAsFilename(, "CSV Files (*.csv),*.csv,All Files (*.*),*.*", , "Сохранение в формате CSV в кавычках")
If s = "False" Then Exit Sub
Open s For Output As #1
For Each r In ActiveSheet.UsedRange.Rows
s = ""
For Each c In r.Cells
s = s & "," & """" & c & """"
Next
Print #1, Mid$(s, 2)
Next
Close #1
End Sub
- включите запись макроса, сохраните в нужном виде, выключите запись - получите автоматический макрос, только в нём вместо пути-имени подставьте свою переменную s. Только не вторую, а первую. А вторую нужно поменять. Ну или первую... Поняли? Но данные тогда нужно не складывать в текстовый файл, а на чистый лист экселя (или в новый файл), а его уже сохранять тем записанным макросом.
Модификация #1: создает файл csv в той же папке и с тем же именем, что и активная книга.
Код
Sub SaveAsCSVinQuotes2()
Dim r As Range, c As Range, s As String, i As Long
s = ActiveWorkbook.FullName
i = InStrRev(s, ".")
Open Left(s, i) & "csv" For Output As #1
For Each r In ActiveSheet.UsedRange.Rows
s = ""
For Each c In r.Cells
s = s & "," & """" & c & """"
Next
Print #1, Mid$(s, 2)
Next
Close #1
End Sub
Nabos, Вы ничего не путаете? Спросили: "как можно сохранить в определенной папке с определенным именем?" - в #5 показан вариант сохранения в папку DownLoads с именем Пример (6).csv
Юрий М, Я извиняюсь, что возможно мог поставить пользователей форума в заблуждение, давайте переформулирую вопрос из первого поста.
Цитата
Nabos написал: Нужна ваша помощь, макросом нужно сохранить csv, но чтобы данные были в кавычках с разделителем ","
Я имел ввиду, что я бы хотел понять, как сохранить файл csv, чтобы данные внутри файла были в кавычках. При этом путь сохранения нужно прописать уже готовый в макросе.
В примере #5 показано как сохранить в определенную папку, но сохраняется csv без кавычек. В моем примере #1 показано как сохранить csv с кавычками, но сохранение ручное. Я бы хотел уточнить, как обьединить эти 2 варианта.
Добрый день, столкнулся с такой же проблемой, нужно чтобы в csv файле с разделителем точка с запятой ( данные были в кавычках, например "1, 2, 3";"1, 2, 3";"итд" пробовал соединять строки с Chr(34), в результате получаю по 3 двойных кавычки с каждой стороны """1, 2, 3""";"""1, 2, 3"""; Также пробовал приведенный здесь скрипт, но данные с листа после него заменяются на две кавычки
Код
Sub save(bn As String) 'bn имя и путь моего csv файла
Dim r As Range, c As Range, s As String
Open bn For Output As #1
For Each r In ActiveSheet.UsedRange.Rows
s = ""
For Each c In r.Cells
s = s & ";" & """" & c & """"
Next
Print #1, Mid$(s, 2)
Next
Close #1
End Sub
В #16 каждое поле строки окружается двойными кавычками (один раз). Если есть вероятность, что значение какой-либо ячейки содержит символ двойной кавычки, то в соответствии со стандартом csv строку 7 следует изменить так:
Код
s = s & ";" & """" & Replace(c, """", """""") & """"