2016-08-04 2 views
2

Я пытаюсь сохранить книгу работоспособности, но когда я использую следующий код, я продолжаю получать ошибку «скомпилировать ошибку: ожидаемая функция или переменная» со словом «формат», подсвечен.Ошибка VBA в сохранении файла с использованием функции Формат (дата)

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

Вот одна строка кода

ActiveWorkbook.SaveAs Filename:=SavedPath & format(Date, "mmddyyyy") & " 4512 GLUpload.xlsm" 

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

+0

@Comintern Я попытался использовать «Формат $», но я получил ошибку: «Ошибка компиляции» Символ декларации типа не соответствует объявленному типу данных ». Я также проверил и слово« формат »больше не используется в моем модуле. В модулях моего коллеги он использовал formatrow или format4512 как переменную, но никогда не форматировал сам. –

+0

Собственно, единственный способ реплицировать точную ошибку компилятора - получить, если у меня есть 'Sub' с именем' Sub SavedPath (Sub SavedPath)) '.Если предполагается вернуть значение, измените его на' Function'. – Comintern

+0

Также проверьте для 'Sub Format' с двумя аргументами. Это также дает ту же ошибку компилятора. – Comintern

ответ

5

Ошибка компилятора, которую вы получаете, указывает на то, что VBA ожидает присваиваемое значение (либо литерал, либо переменная, либо возвращаемое значение функции). Это означает, что один из идентификаторов в инструкции справа от знака равенства не попадает в эти категории. Таким образом, либо SavedPath определяется где-то Sub SavedPath(), либо существует где-то Sub Format(arg1, arg2) (если у него было другое количество аргументов, вы получили бы ошибку «Неверное количество аргументов или недопустимое присвоение свойств»). Второй ключ (в комментариях) заключается в том, что смена format на строго типизированный Format$ привела к ошибке «Тип объявления типа не соответствует объявленному типу данных». Это указывает на то, что компилятор не обрабатывает символ format как вызов функции (Format$() - это строго типизированная версия Format()). Решение состоит в том, чтобы отслеживать ошибочное использование имени функции VBA и переименовать его.

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

+0

Good Catch !!!!! –

+1

@SiddharthRout - Тест-код для Rubberduck заставил меня рассказать обо всех странных компиляторах в VBA ... ;-) – Comintern

+0

Я знал об этом причуде. На самом деле есть еще одна запись stackoverflow, где я предложил то же самое, но не смог ее найти. Я просто помню, что Рори тоже пытался ответить на тот же вопрос.Сейчас уже 1 AM, и мне нужно отправиться спать, иначе моя жена обязательно разводится со мной: D Позвольте мне посмотреть, смогу ли я найти эту нить утром ... nite nite –

Смежные вопросы