#excel #vba
#excel #vba
Вопрос:
я пытаюсь экспортировать лист из моего файла Excel в формате csv.
Я получаю сообщение об ошибке
Сбой метода сохранения книги объектов `
в моей SaveAs
строке.
Я заметил, что этот код создает новую книгу, в ней есть несколько пустых вкладок листа по умолчанию, может ли это вызвать проблему?
Public Sub ExportWorksheetAndSaveAsCSV()
Dim wbkExport As Workbook
Dim shtToExport As Worksheet
Set shtToExport = ThisWorkbook.Worksheets("Load check data") 'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False 'Possibly overwrite without asking
Path = ThisWorkbook.Sheets("Input").Range("B15") amp; "estload_" amp; ThisWorkbook.Sheets("Input").Range("F1") amp; ".csv"
Debug.Print Path
wbkExport.SaveAs Filename:=Path, FileFormat:=xlCSV, CreateBackup:=True
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False
End Sub
Отредактируйте, чтобы исключить переменную WbkExport, замените на ThisWorkbook и ActiveWorkbook .
Public Sub ExportWorksheetAndSaveAsCSV()
Dim wbkExport As Workbook
Dim shtToExport As Worksheet
Dim Path As String
Set shtToExport = ThisWorkbook.Worksheets("Load check data") 'Sheet to export as CSV
'Set wbkExport = Application.Workbooks.Add
shtToExport.Copy Before:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Application.DisplayAlerts = False 'Possibly overwrite without asking
Path = ThisWorkbook.Sheets("Input").Range("B15") amp; "estload_" amp; ThisWorkbook.Sheets("Input").Range("F1") amp; ".csv"
Debug.Print Path
ActiveSheet.SaveAs Filename:=Path, FileFormat:=xlCSV, CreateBackup:=True
Application.DisplayAlerts = True
'wbkExport.Close SaveChanges:=False
Комментарии:
1. Примечание: на самом деле вам не нужно создавать рабочую книгу.
shtToExport.Copy
без параметров будет создана новая рабочая книга, которая затем будетActiveWorkbook
.2. Итак, вы говорите, что я могу исключить эту строку и получить тот же результат?
3. Да, вы можете исключить
Set wbkExport = Application.Workbooks.Add
и просто сделатьshtToExport.Copy
, а затем работатьActiveWorkbook
.4. Попробовал это, теперь я, кажется, получаю
application-defined or object defined error
. Я обновил приведенный выше код, если вы хотите взглянуть.5. Должно быть просто
shtToExport.Copy
. НетBefore
. ЗатемActiveWorkbook.SaveAs
.
Ответ №1:
Предыдущие комментарии верны. Простая процедура будет:
Public Sub ExportWorksheetAndSaveAsCSV()
'Simple copy of sheet content as csv file
Dim NameSheet As String
Dim PathNameCsv As Variant
'Change names amp; Output Path
NameSheet = "MySheet"
PathNameCsv = "D:DocumentsMyCsv"
Set shtToExport = ThisWorkbook.Worksheets(NameSheet) 'Sheet to export as CSV
Application.DisplayAlerts = False 'Possibly overwrite without asking
shtToExport.SaveAs Filename:=PathNameCsv, FileFormat:=xlCSV, CreateBackup:=True
Application.DisplayAlerts = True
'When saving the sheet as csv, _
'by default its name is changed to the name of the csv.
'Here you restore your name
With shtToExport
.Name = NameSheet '
End With
End Sub