Если общее намерение заключается в создании и повторном использовании кодовой базы VBA, которая может использоваться во всех приложениях Office, лучшим способом может быть использование условной компиляции.Первые два случая в приведенном выше примере TestApplication будут выглядеть следующим образом:
Private Sub TestApplication()
#If Word then
MsgBox "Running in Word " + Application.Version
#ElseIf Excel
MsgBox "Running in Excel " + Application.Version
#Else
MsgBox "Running in SomeOtherApplication " + Application.Version
#End if Case "Microsoft PowerPoint"
End Sub
(Все другие приложения были обнаружены с помощью #Else.)
Путем установки аргументов условной компиляции Word'и' Excel ', соответствующие в свойствах VBProject, который содержит повторно используемый код, тогда можно обеспечить компиляцию только кода, необходимого для этой реализации.например, условные аргументы компиляции, необходимые для использования в Word, будут:
Word = -1: Excel = 0
То есть Word = True: Excel = False,являются необходимыми настройками для компиляции кода в приложении Word.
Один последний общий совет:
Всегда используйте -1 для True при установке значений аргументов условной компиляции.Если позже вы решите изменить намерение оператора, тогда легко изменить намерение, добавив NOT.Это хорошая идея, потому что:
Как вы, вероятно, знаете, условные операторы VBA рассматривают ненулевые значения в условных выражениях как истинные.например, это будет GoTo Label Line10:
If 5 Then GoTo LINE10
Это нормально, пока вы не попытаетесь изменить намерение такого оператора, чтобы НЕ делать что-либо на основе такого условия.Этот оператор будет по-прежнему GoTo Line10.
If NOT 5 Then GoTo LINE10
Оператор NOT не будет преобразовывать любое число, кроме -1, в False (то есть 0).