Использование константы vba в объявлении константы

Обновлять

Я идиот, причина, по которой это не сработало, заключалась в том, что знак & стал немного близок к vbNewLine. Я не понял этого, так как знал, что Chr(xx) не сработает, и сразу же сделал поспешные выводы.
То, что исходный оператор был многострочным, не помогло. (Не проверял код, который я написал здесь)

Исходное сообщение

Итак, я пытаюсь объявить Const, который содержит описание моего класса, в описании будет несколько разрывов строк/новых строк (просто новый абзац). Значение которого позже будет возвращено с помощью метода получения свойства.

Я знаю, что вы не можете использовать вызовы функций, такие как Chr(10) (что на самом деле vba.Chr(10)), при установке значения константы.

Private Const FOO As String = "Apple" & chr(10) & "Ale"

Но видимо VBA-константы типа vbNewLine (что на самом деле vba.vbNewLine) тоже не будут работать.

Private Const FOO As String = "Banana" & vbNewLine & "Beer"

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

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

Private Const FOO As String = "Cucumber {/CrLf} Cerveza"

Итак, прежде чем я приступлю к реализации форматирования, я хотел бы задать вопрос:

Есть ли простой способ объявить vbNewLine в объявлении/определении Const?


person L8n    schedule 20.08.2019    source источник
comment
Chr(10), полностью квалифицированный, на самом деле VBA.Conversion.Chr(10) — вы можете использовать Обозреватель объектов, чтобы найти его ;-) У меня нет проблем с объявлением Const, который использует что-либо в модуле VBA.Constants для присвоения своего значения — VBA.Constants.vbNewLine является одним из них. из них.   -  person Mathieu Guindon    schedule 20.08.2019


Ответы (2)


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

РЕДАКТИРОВАТЬ:

причина, по которой это не сработало, заключалась в том, что знак & оказался слишком близко к vbNewLine.

Теперь это имеет больше смысла — символ & служит оператором конкатенации строк при использовании в качестве оператора (то есть operand1 & operand2 с пробелами по обеим сторонам). Но он также служит символом подсказки типа, который разрешено использовать в числовых литералах, например. 42& является литералом Long, тогда как 42 будет литералом Integer. Это незначительно полезно, и забывание поставить этот важный пробел перед оператором является относительно распространенной ошибкой.

Применительно к строковой константе, такой как vbNewLine, подсказка типа вызывает ошибку компиляции: «символ объявления типа не соответствует объявленному типу данных».

Оригинальный ответ ниже.


Я пытаюсь объявить константу, содержащую описание моего класса

Похоже, вы заново изобретаете строки документации. Вы можете получить доступ к строкам документации модулей и элементов через обозреватель объектов, выбрав свойства в контекстном меню:

Свойства класса в обозревателе объектов

В появившемся диалоговом окне «Параметры участника» можно ввести описание:

диалог параметров участника позволяет ввести описание

Это описание будет отображаться в обозревателе объектов:

пользовательское описание, отображаемое в нижней панели обозревателя объектов

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

Rubberduck Code Explorer, отображающий настраиваемую строку документации в нижней панели

...и везде на него тоже ссылаются:

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

С помощью аннотаций @ModuleDescription строки документации пользовательского модуля можно поддерживать из видимых комментариев в коде (используйте аннотации @Description для элементов).

Строки документации — это инструмент разработчика, они имеют небольшую программную ценность, если вообще имеют.

person Mathieu Guindon    schedule 20.08.2019
comment
Спасибо за подробное объяснение! Я довольно часто использую Rubberduck, без него моя программа VBA на 6 тыс. строк была бы неуправляемой. В этом случае это не будет DocString. Класс используется для запуска проверки по определенным критериям в документе... Класс реализует интерфейс IInspection и может запускаться через InspectionManager. Имя и строка должны быть там, чтобы сообщить пользователю, что именно делает тест. Хотя, наверное, было бы лучше иметь центральный модуль/файл с переводами... - person L8n; 20.08.2019
comment
Рассмотрите возможность наличия таблицы ListObject/на рабочем листе со столбцом Key, а затем столбцом для каждого языка, который вы хотите поддерживать, например. иметь английское описание в столбце en-US, французское, например. fr-CA, а затем у вас может быть функция, роль которой заключается в поиске ключа ресурса в этой таблице и возврате соответствующей строки ресурса с учетом языкового стандарта (по умолчанию?). - person Mathieu Guindon; 20.08.2019

Нет проблем с:

Private Const FOO As String = "Banana" & vbNewLine & "Beer"

Какую ошибку вы получаете при этом?

person Tim Williams    schedule 20.08.2019