Все 3 способа верны. Вы использовали 2 разных подхода к использованию объектов.
- Первые 2 способа означают «Раннее связывание».
- Последний способ означает «Позднее связывание».
Средний путь - это путь к первому пути, но не полностью.
Лучше избегать начинающих пользователей VBA в сложном коде,
поскольку любая ссылка на переменную объекта создает новый экземпляр объекта,
если переменная объекта = Nothing
Раннее связывание:
Нужно связать используемые библиотеки / модули в VBA - Инструменты - Ссылки,
в это время Microsoft Scripting Runtime Библиотека
Если модуль / код отсутствует на целевом компьютере, выполнение не будет выполнено.
Раннее связывание по сообщениям значительно быстрее.
Раннее связывание предлагает при разработке Intellisense-редактор предложение методов и свойств объекта и именованных констант
Позднее связывание:
Нет необходимости связывать используемые внешние библиотеки / модули - лучшая переносимость между машинами.
Позднее связывание происходит медленнее.
Позднее связывание не предлагает Intellisense, и константы, специфичные для объекта, должны быть либо явно объявлены, либо предоставлены их значением.
См., Например, условная компиляция кода, основанная на аргументе условной компиляции в рамках всего проекта Раннее связывание:
Sub EarlyVsLateBindingtest()
#If Earlybinding Then
Dim oFS As Scripting.FileSystemObject
Set oFS = New Scripting.FileSystemObject
#Else
Const TemporaryFolder = 2
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
#End If
oFS.GetSpecialFolder (TemporaryFolder)
End Sub
https://superuser.com/questions/615463/how-to-avoid-references-in-vba-early-binding-vs-late-binding/1262353?noredirect=1#comment1859095_1262353
Смотри также
https://wordmvp.com/FAQs/InterDev/EarlyvsLateBinding.htm
https://support.microsoft.com/en-gb/help/245115/using-early-binding-and-late-binding-in-automation