#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
краткое изложение того, что я пытался:
- объявить путь в виде строки — не сработало
- формат файла:=xlCSV > формат файла:=6 — не работает
- изменение
path = ActiveWorkbook.path amp; "Export"
наpath = "C:Export"
— действительно сработало, но некоторые компьютеры могут иметь другое имя для диска C:, поэтому это не предпочтительно. - сохраните, закройте и повторно откройте книгу Excel после запуска макроса импорта — действительно сработало, но по понятным причинам не рекомендуется.
- копирование, вставка значений в, для экспорта, рабочий лист в качестве значений — не сработало
- объявить имя
ActiveWorkbook
перед экспортом — не сработало - установите значение для пути перед копированием листов — работает, но экспорт не заканчивается в 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:/).