Установка FSO на FileSystemObject vs Scripting.FileSystemObject
У меня был один из тех моментов, когда вы выходите из-под сорняков, исследуете свой код и спрашиваете себя: «Почему я это сделал?»
У меня есть сценарий, который создает папку с несколькими подпапками и файлами, используя
FileSystemObject
. Все работает, но я думаю, что меняю способ настройки
fso
переменные.
В моем проекте используется
Microsoft Scripting Runtime Library
ссылку, чтобы я мог использовать раннее связывание (хотя я нашел несколько экземпляров
Set fso = CreateObject("Scripting.FileSystemObject"
), что для этого проекта глупо). Возможно, это потому, что я основал большую часть своего кода на примерах в Интернете, но я устанавливал эти переменные fso одним из двух способов:
Set FSo = New FileSystemObject
Set FSo = New Scripting.FileSystemObject
В чем разница между ними? Имеет ли значение, какой я использую, или он используется только в определенных случаях?
1 ответ
Разница между ними состоит в том, что последнее устраняет неоднозначность принадлежности к чему-либо, а не к чему-то другому.
Если бы у вас был собственный класс, названный в этой книге, последний должен был бы указать, что вы создаете
Scripting.FileSystemObject
и не
Yourworkbook.FileSystemObject
.
Точно так же, если у вас есть ссылка на какую-то другую внешнюю библиотеку, в которой также есть класс с именем, это также разрешит эту двусмысленность. Вот почему в диалоге добавления ссылки есть стрелки вверх / вниз - они решают, какая библиотека выиграет в случае конфликтующего имени и без явного устранения неоднозначности со стороны кодера.
Распространенный случай в VBA, когда требуется разрешение неоднозначности, - это одновременная работа с объектными моделями Word и Excel. У обоих есть класс под названием
Range
, и вам часто нужно указать, хотите ли вы
Word.Range
или
Excel.Range
этот раз.
Если у вас нет таких противоречивых имен, для вас это не имеет значения, разве что, возможно, будущему читателю будет легче вспомнить, что
FileSystemObject
это вещь от
Scripting
.