Установка 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.

Другие вопросы по тегам