Как использовать VBA для сохранения как с динамическим типом файла - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь написать код, который будет автоматизировать обновление таблиц инвентаризации для разных поставщиков. Я столкнулся с проблемой, когда дело доходит до сохранения файлов, поскольку поставщики требуют разные типы файлов при загрузке инвентаря. Поэтому мне нужен некоторый код, который будет динамически изменять тип файла сохранения в зависимости от поставщика.

На данный момент у меня есть диалог выбора файлов, который пользователь использует для выбора нужных им электронных таблиц. обновить. Имеющийся на данный момент VBA зацикливает эти выбранные шаблоны, которые открываются, обновляются с помощью формул в электронной таблице, а затем сохраняются в другой папке с именем поставщика и текущей датой.

Вот проблемный разделкода, с которым я работаю:

CustomerWB.SaveAs Filename:="S:\Online Inventory Reports\" _
                & Left(CustomerWB.Name, 6) _
                & "\" _
                & Left(CustomerWB.Name, 6) _
                & " " _
                & Format(Now(), "MM.DD.YY") _
                & WorksheetFunction.Index(ThisWorkbook.Sheets(2).Range("B:B"),WorksheetFunction.Match(Left(CustomerWB.Name, 6),ThisWorkbook.Sheets(2).Range("A:A"),0)), _
                FileFormat:=WorksheetFunction.Index(ThisWorkbook.Sheets(2).Range("C:C"),WorksheetFunction.Match(Left(CustomerWB.Name, 6),ThisWorkbook.Sheets(2).Range("A:A"),0))

Я отлаживал каждый фрагмент кода, и он работает до тех пор, пока не попаду в разделы Index(Match().

Формулы просматривают таблицукоторый имеет идентификаторы поставщиков рядом с требуемым типом файла и кодом типа. При запуске в непосредственном окне эти формулы дают желаемый результат. Но когда они запускаются в этом коде, возвращается ошибка: Run-time error '1004': Method 'SaveAs' of Object '_Workbook' failed Так что, похоже, VBA не понравилось то, что я смешивал функции листа, когда пытался сохранить файл.

Итак, я переместил секции Index(Match()) в электронную таблицу и заставил VBA заполнить ячейку именем поставщика. Затем присваивает переменные значениям ячеек, которые теперь возвращают тип файла и код типа. Новый код выглядит так:

CustomerWB.SaveAs Filename:="S:\Online Inventory Reports\" _
                & Left(CustomerWB.Name, 6) _
                & "\" _
                & Left(CustomerWB.Name, 6) _
                & " " _
                & Format(Now(), "MM.DD.YY") _
                & FileType, _
                FileFormat:=TypeCode

Но я получаю ту же ошибку. Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 02 октября 2019

Оказывается, это была простая ошибка. У меня была звездочка, включенная в возвращаемое расширение файла (например, * .xlsx). После удаления звездочки из расширений файлов в таблице код работал нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...