Я полный болван в отношении vb и excel, пытался объединить 2 макроса, которые я нашел здесь, в 1, но, очевидно, сделал что-то ужасно неправильно, и теперь я застрял. Сначала я просто использовал этот макрос (сохранил его в качестве личного.xlsb, чтобы иметь возможность использовать его в любой книге)
Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = ";"
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & """" & GetUTF8String(CurrCell.Value) & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub
Это плюс код функции GetUTF8String. Теперь это работало нормально. Затем я хорошо подумал, почему бы просто не поэкспериментировать с моим ограниченным (это серьезное преуменьшение) пониманием vb, добавил следующий код и изменил подпрограмму CSVFile на функцию, которую я затем вызвал из подпрограммы ниже, с именем выходного файла как параметр (вместо него следует использовать FName = Application.GetSaveAsFilename). Я подумал, что да, этот код автоматически сохраняет все листы, теперь давайте просто удостоверимся, что функция настройки кодирования и разделителя/вложения запускается перед сохранением каждого листа. Это кажется неправильным, но я подумал, почему бы и не попробовать..
Public Sub SaveAllSheetsAsCSV()
On Error GoTo Heaven
' each sheet reference
Dim Sheet As Worksheet
' path to output to
Dim OutputPath As String
' name of each csv
Dim OutputFile As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
' Save the file in current director
OutputPath = ThisWorkbook.Path
If OutputPath <> "" Then
Application.Calculation = xlCalculationManual
' save for each sheet
For Each Sheet In Sheets
OutputFile = OutputPath & Application.PathSeparator & Sheet.Name & ".csv"
' make a copy to create a new book with this sheet
' otherwise you will always only get the first sheet
Sheet.Copy
' this copy will now become active
CSVFile(OutputFile)
ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
Next
Application.Calculation = xlCalculationAutomatic
End If
Finally:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub
Heaven:
MsgBox "Couldn't save all sheets to CSV." & vbCrLf & _
"Source: " & Err.Source & " " & vbCrLf & _
"Number: " & Err.Number & " " & vbCrLf & _
"Description: " & Err.Description & " " & vbCrLf
GoTo Finally
End Sub
Сохранил это, и с этим мне удалось добиться чего-то совсем другого. При открытии любых книг этот макрос запускается и открывает мои листы из этой конкретной книги в виде CSV-файлов (без их сохранения). Теперь я как Алиса в стране чудес. Почему он работает при открытии файла? Это нежелательно, поэтому я вернулся к коду макроса и изменил его обратно только на подпрограмму csvfile. Ну, это не помогло, понятия не имею, что я там делал, определенно редактировал тот же макрос... Итак, я удалил макрос, модуль, я не могу представить, где он сейчас находится, но он все еще работает + я получаю это предупреждение, что макросы были отключены. Не могу избавиться от этого! Теперь, ребята, извините за полное отсутствие профессионализма с моей стороны, это должно было быть небольшой услугой для клиента, не тратя кучу времени на изучение vb, потому что моему боссу это не нравится... меня конечно интересует как добиться цели сохранения листов автоматически после установки в них деимитера и вложения. И в данный момент меня очень интересует как избавиться от этого макроса и где он прячется.. Что я сделал?! Спасибо за ваше терпение!