VBA: моя программа бросает ошибку компиляции в формате

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

Dim elapsedTime As String Dim startTime As Date startTime = Now() 'code elapsedTime = Format(Now() - startTime, "h:m:s") 

Я проверил снова и снова, но этот точный код отлично работает в моем другом файле. В этом файле выделяется «Формат» и выбрасывается следующая ошибка компиляции. Ошибка компиляции: аргументы или свойство

Кто-нибудь знает, почему excel будет так расстроен? Если есть ошибки компиляции, должен ли я даже смотреть на места, которые он выделяет вообще?

У вас есть что-то с именем Format где- то в области видимости (т. Е. Доступно, откуда вызывается функция Format ), и эта функция Format затеняет функцию Format вы хотите вызвать.

Как предложил YowE3K, если вы щелкните правой кнопкой мыши на этом вызове Format и выберите «Определение» (или Shift + F2 ), что приведет к объявлению теневого копирования.

Оттуда у вас есть несколько вариантов:

  • Переименуйте идентификатор Format [и, возможно, сломайте массу вещей в своем коде]
  • Полностью квалифицируйте этот вызов Format , то есть VBA.Strings.Format , или просто Strings.Format , или даже VBA.Format .

Мое предложение состояло в том, чтобы полностью квалифицировать этот вызов, затем попытаться скомпилировать снова и полностью квалифицировать любые / все вызовы, которые вызывают ту же ошибку компиляции. Затем переименуйте все, что называется « Format , чтобы он больше не искажал функцию из стандартной библиотеки VBA.

Если вы используете Rubberduck (проект надстройки VBIDE с открытым исходным кодом, которым я управляю), вы можете легко найти все ссылки на идентификатор теневого копирования:

Панель инструментов Rubberduck, показывающая все ссылки

Панель инструментов Rubberduck сообщает вам, когда Format ссылается на правильную функцию:

Панель инструментов Rubberduck с VBA.Strings.Format

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

Rubberduck также упрощает рефакторинг / переименование функции таким образом, что поиск / замена не выполняется:

Функция «Формат» переименована в «Переименован», вызов VBA.Strings.Format остался без изменений

Кстати, новая проверка кода в настоящее время работает, в частности, для поиска идентификаторов теневого копирования, подобных этому.


Что касается несоответствия типа аргумента ByRef , кажется, что ваш скриншот не совпадает с кодом, который вы опубликовали, поэтому все возможно, но если в теле этой функции MakeEqn не назначено MakeEqn (оно должно быть возвращено , не назначено ), тогда нет необходимости передавать его ByRef (неявно или явно) – он может быть передан ByVal (Rubberduck дает вам результат проверки для этого – и другой для неявного типа возврата, а другой для неявного модификатора Public access для обеих процедур и несколько другие для других проблем в коде, который вы опубликовали).

Interesting Posts

Как сохранить / перезаписать существующий файл Excel с помощью Excel Interop – C #

Как перенести значение в нестандартный размер массива с помощью Excel VBA

Библиотека JXL в Android

Круговая диаграмма

Копирование данных с одного листа на другой на основе имен и дат

Найдите соответствующее значение и покажите это значение и его соответствующие значения

Экстракт Уникальный список & find Maximum

Как удалить текст / символы из ячейки excel

Excel макрос VisualBasic

Почему выбор столбцов из pandas read_excel дает разные форматы?

где я могу найти экспортированные данные из кода c # для подсчета

Сравните идентификатор и значение каждого листа, затем скомпилируйте все ID и добавьте значение в итоговый лист

Переменная SSIS переменной Excel с именем и без знака доллара $

Рисование конкретных данных из больших таблиц?

Я пытаюсь сканировать штрих-код и переместить Excel в правую ячейку

Давайте будем гением компьютера.