Вопрос или проблема
Это скорее неудобство, чем проблема. Я использую MS 365 Excel в Windows 10. Функции Excel, перечисленные в документации, работают, когда используются в макросе на листе, но некоторые из них приводят к “ошибке компиляции/подпрограмма или функция не определены”, когда я пытаюсь использовать их в коде VBA, с модификатором worksheetfunction или без него. Примеры:
code,
char (chr работает, но не документирован),
days (datedif работает),
textbefore,
textafter,
unicode,
unichar.
Я пробовал все это, но пришлось изобретать обходные пути.
Я думаю, что в объектной модели VBA также есть объекты, методы и свойства, которые не распознаются, но я не отмечал их, когда сталкивался с ними.
Обратите внимание, что редактор VB распознает все это достаточно хорошо, чтобы правильно регистрировать их, но не для компиляции.
Ответ или решение
Вопрос, который вы подняли, относится к определённым ограничениям взаимодействия между функциями Excel и средой программирования VBA (Visual Basic for Applications). Эта проблема может вызывать неудобства у пользователей, работающих с Microsoft 365 Excel на платформе Windows 10, особенно когда некоторые функции, которые доступны в интерфейсе Excel, не распознаются в коде VBA.
Понимание проблемы
Ваша ситуация с функциями, такими как CHAR
, DAYS
, TEXTBEFORE
, TEXTAFTER
, UNICODE
и UNICHAR
, отлично иллюстрирует это ограничение. Эти функции действительно доступны в самой программе Excel и могут быть использованы в ячейках для выполнения различных вычислений, но при попытке вызвать их в коде VBA возникает ошибка компиляции: "Sub или Function не определены". Это происходит по нескольким причинам.
Причины возникновения ошибок
-
Разные контексты использования функций:
Некоторые функции, доступные в Excel, не имеют прямого соответствия в VBA. Например, функцияCHAR
в VBA реализована черезChr
, аDAYS
имеет аналогично полностью функционирующую альтернативу черезDateDiff
с параметромd
. Это может быть обусловлено тем, что Excel и VBA имеют различные внутренние архитектуры и предназначение. -
Обновление функций:
Microsoft постоянно обновляет и добавляет новые функции в Excel, но не всегда эти функции интегрируются непосредственно в VBA. Это может быть связано с тем, что некоторые функции больше предназначены для использования в современных версиях Excel, таких как Office 365, которые фокусируются на пользовательском интерфейсе и автоматизации на уровне ячеек, а не на более традиционном программировании через VBA. -
Объекты и методы:
Как вы правильно заметили, могут возникать ситуации, когда определённые объекты, методы и свойства, доступные пользователю в интерфейсе Excel, не поддерживаются или не завершены в VBA. Это часто касается новых функций, которые были внедрены для взаимодействия через кнопку или меню, но не имеют прямого программного эквивалента.
Рекомендации по обходу ограничений
-
Используйте альтернативные решения:
Вы уже нашли обходные пути для некоторых функций. Продолжайте использовать эквиваленты VBA, такие какApplication.WorksheetFunction.SomeFunction
, когда это возможно. Это может помочь использовать некоторые функции, которые работают в Excel, но доступны только через VBA. -
Проверяйте обновления Office:
Убедитесь, что ваша версия Microsoft Office обновлена. Иногда Microsoft release новых библиотек VBA или обновлений, которые могут улучшить совместимость с функциями Excel. -
Изучайте сторонние библиотеки:
Существуют сторонние библиотеки и надстройки, которые могут расширить функциональность VBA и включить в него поддерживаемые функции. Исследуйте такие решения, если вам часто нужны определённые функции. -
Документация и сообщество:
Изучайте официальную документацию Microsoft и ресурсы сообщества для обновлений и советов по реализации. Часто другие пользователи уже сталкивались с подобными проблемами и нашли решения.
Заключение
Несмотря на то, что ограничения между Excel и VBA могут вызывать некоторые неудобства, понимание специфики этих систем и использование доступных альтернатив могут значительно упростить вашу работу. Развивайте свои навыки, исследуя различные аспекты Excel и VBA, чтобы повысить продуктивность.