Как правильно объявить и определить объект FileSystemObject на VBA? - PullRequest
0 голосов
/ 27 апреля 2018

Я читал о том, как объявлять объекты FileSystemObjects, и нашел противоречивую информацию. Это потому, что есть разные способы объявить это?

Я дам вам несколько способов объявления и определения объектов FileSystemOjbect, которые я нашел:

  1. Dim FSO As FileSystemObject Set FSO = New FileSystemObject

  2. Dim FSO As New FileSystemObject

  3. Dim FSO As Object Set FSO = CreateObject("scripting.filesystemobject")

Как правильно объявлять объекты FileSystemObject?

1 Ответ

0 голосов
/ 21 июня 2018

Все 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

...