(Окончательное редактирование: код, который я в итоге собрал, работает гораздо ниже, это, вероятно, окончательный ответ в этой теме. :-))
Я пытаюсь написать общий экземпляр-иВставьте код, который будет работать в автономном VBScript (файл .vbs), в файле .hta и как VBA (например, в файле Excel).Чтобы сделать это, мне нужен какой-то способ, чтобы сам код мог сказать, на каком движке он работает.
Лучшая идея, которую я слышал, до сих пор заключалась в тестировании, если определенные объекты существуют или нет, но в VBA это не помогает.во время компиляции (поэтому я не могу обойти это с On Error), так что это не сработало.Попытка выяснить имя файла, который он запускает, не принесла жизнеспособности;это одна из тех вещей, которые выполняются по-разному, в зависимости от того, в каком из трех обработчиков сценариев выполняется код. Мне бы хотелось иметь что-то простое, подобное этому, но я не уверен, чем его заполнить:
Редактировать:Большинство ответов до сих пор включают проверку на наличие, возможно, несуществующих объектов, что напрямую не работает в VBA с включенным Option Explicit (он выдает ошибку времени компиляции, поэтому On Error не работает, и отключение Option Explicit не является опцией).Есть ли какой-нибудь другой обходной / нестандартный способ узнать, что здесь нужно?
Option Explicit
'--- Returns a string containing which script engine this is running in,
'--- either "VBScript", "VBA", or "HTA".
Function ScriptEngine()
If {what goes here?} Then ScriptEngine="VBS"
If {what goes here?} Then ScriptEngine="VBA"
If {what goes here?} Then ScriptEngine="HTA"
End Function
Если это заполнено правильно, вы сможете скопировать и вставить эту функцию в любой VBA., VBS или HTA-файл без изменений, вызовите его и получите результат вместо ошибки, даже если Option Explicit включен.Какой лучший способ сделать это?