Экспорт листа в формате csv

#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