«Метод» Сохранения «объекта» _Workbook «не удался» после запуска filepicker

#excel #vba

Вопрос:

Для моей книги Excel мне сначала нужно импортировать данные с другого листа, а затем экспортировать листы из этой книги в виде файлов .CSV во вложенной папке на диске C:/. раньше он работал отлично, но внезапно он выдал ошибку во время выполнения «1004». Если я импортирую данные, сохраняю, закрываю и повторно открываю файл excel, макрос экспорта работает, только после запуска макроса импорта я получу ошибку.

я пробовал как Application.GetOpenFilename методы, так и методы Application.FileDialog(msoFileDialogFilePicker) импорта, оба приведут к ошибке.

Пример одного из макросов экспорта:

 Sub export_csv()
'
' csv2 Macro
'
  Dim ws As Worksheet

'

    Sheets(Array("5_CSV_Intermedian_Peptide", "5_CSV_Intermedian_MQ") _
        ).Select
    Sheets(Array("5_CSV_Intermedian_Peptide", "5_CSV_Intermedian_MQ") _
        ).Copy
   
    
    path = ActiveWorkbook.path amp; "Export"
    For Each ws In Worksheets
    ws.Copy
    ActiveWorkbook.SaveAs filename:=path amp; "_" amp; ws.Name amp; ".csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
    ActiveWorkbook.Close False

Next
ActiveWorkbook.Close False
End Sub
 

краткое изложение того, что я пытался:

  1. объявить путь в виде строки — не сработало
  2. формат файла:=xlCSV > формат файла:=6 — не работает
  3. изменение path = ActiveWorkbook.path amp; "Export" на path = "C:Export" — действительно сработало, но некоторые компьютеры могут иметь другое имя для диска C:, поэтому это не предпочтительно.
  4. сохраните, закройте и повторно откройте книгу Excel после запуска макроса импорта — действительно сработало, но по понятным причинам не рекомендуется.
  5. копирование, вставка значений в, для экспорта, рабочий лист в качестве значений — не сработало
  6. объявить имя ActiveWorkbook перед экспортом — не сработало
  7. установите значение для пути перед копированием листов — работает, но экспорт не заканчивается в C:

мне кажется, что файловый редактор каким-то образом изменяет местоположение недавно открытой книги, worksheets.copy и поэтому activeworkbook.path он не работает

Редактировать: если я сделаю это так

 Workbooks.Add
path = ActiveWorkbook.path
ActiveWorkbook.Close


Sheets(Array("5_CSV_Intermedian_Peptide", "5_CSV_Intermedian_MQ").Select
Sheets(Array("5_CSV_Intermedian_Peptide", "5_CSV_Intermedian_MQ").Copy
 

это работает, но для меня это действительно похоже на повязку на зияющей ране
. Есть ли лучший способ сделать это?

Комментарии:

1. Я не уверен, где вы хотите Export , чтобы находилась подпапка. Если это та же папка, в которой находится книга с кодом VBA, то измените ActiveWorkbook.path ее на ThisWorkbook.Path . В вашем первом блоке кода ActiveWorkbook указывается новая книга с скопированными листами, поэтому ее Path свойство представляет собой пустую строку.

2. к сожалению, это унаследованный код от предыдущего сотрудника. он настроен таким образом, потому что новая книга предварительно настроена на диск Windows (обычно C:/).