Проблемы компиляции и выполнения с настройкой словаря MSoft Scripting Runtime flg для переносимости?

#vba #ms-word

#vba #ms-word

Вопрос:

Я экспериментирую с различными способами создания словарей в VBA, а также устанавливаю среду выполнения Microsoft Scripting Runtime из code для переносимости, чтобы на компьютере следующего пользователя не нужно было включать этот флажок VBA tools.

Q1: Первая проблема заключается в установке флага MSoft Scripting Runtime в коде VBA, что должно быть сделано в начале. Я не уверен, нужен ли Msoft Script Control 1.0 для чего-либо или когда это действительно необходимо? Таким образом, во время выполнения закомментированный оператор «Set Refearly …» выдает ошибку «Конфликты имен с существующим модулем, проектом или библиотекой объектов». Я не уверен, что проблема в имени файла или переменной? Более того, если я сниму флажок для этого в инструментах, он не будет компилироваться, поскольку он не знает, что делать со сценариями. словарь. Кроме того, после установки ссылочного объекта, что необходимо для фактического включения флага из VBA в диалоговом окне VBE tools?

Q2: Вторая проблема — это метод 1, в котором я получаю ошибку времени компиляции «недопустимое использование нового ключевого слова», хотя среда выполнения сценариев MSoft и …Проверено расширение в инструментах. Я ввел то, что различные сайты показывают как правильный способ заставить это работать, и это не работает… Что здесь не так?

Q3: Это путает его с определением словаря Office Words? Если нет, то я могу добавить четвертый метод для определения пользовательского словаря слов для имен, где определение для каждого введенного имени заключается в том, Являются ли они сотрудником или менеджером и т. Д.

Другие методы 2 и 3 будут компилироваться и работать. Таким образом, любой код после этого момента может быть одним и тем же кодом.

 Option Explicit

Sub Dictionary_Test()


' Set the "Microsoft scripting Runtime" library for portability. Needs to be done first.
    ' Unknown if "Microsoft Script Control 1.0" library needs to be checked in tools
    ' Could set the "Microsoft Visual Basic for Applications Extensibility 5.3" same way
    ' https://docs.microsoft.com/en-us/office/vba/api/access.references.addfromfile
    ' References!referencename
    
    Dim Refearly As Reference  ' doesn't use the reference events functionality.
    'Set Refearly = ActiveDocument.VBProject.References.AddFromFile("C:windowssystem32scrrun.dll")  'Early Binding
     
     'If Refearly.BuiltIn Then
     '  Debug.Print "Found Microsoft Scripting Runtime "
    'End If

'//======== Collection: Method 0 ======'
Dim varc As Collection    ' Method 0
    Set varc = New Collection
    
     varc.Add "John"
     varc.Add "Star"
     
     Debug.Print " Method 0: using Collection " amp; varc.Item(1) amp; Space(2) amp; varc.Item(2)
   
'//======== Dictionary: Method 1========='
Dim dict As Dictionary  ' method 1
Dim dicts As Dictionaries

' Get compiletime error of "invalid use of new keyword"
    'Set dict = New Dictionary
      
    'dict.Add "First Name", "John"
    'dict.Add "Last Name", "Star"

    'Debug.Print " Method 1: using Dictionary " vbTab amp; dict.Items()(0), dict.Items()(1)
    
'//======== Dictionary: Method 2========='
    Dim odict As Object ' method 2
    Set odict = CreateObject("Scripting.Dictionary")  ' method 2 late binding
    odict.Add "First Name", "John"
    odict.Add Key:="Last Name", Item:="Star"
    
    Debug.Print " Method 2: using object Scripting Dictionary " amp; odict.Items()(0), odict.Items()(1)
    
'//===== Dictionary: Method 3==========='
    Dim sdict As Scripting.Dictionary   ' method 3
    Set sdict = New Scripting.Dictionary ' method 3
  
    sdict.Add "First Name", "John"
    sdict.Add Key:="Last Name", Item:="Star"
  
    Debug.Print " Method 3: Scripting Dictionary " amp; sdict.Items()(0), sdict.Items()(1)
    

End Sub
 

Ответ №1:

Метод 1 не работает, потому что вы не указали библиотеку при объявлении переменных. Поскольку Word также имеет Dictionaries коллекцию Dictionary объектов, предполагается, что это то, на что ссылается объявление. Ваш метод 3 — это правильный способ объявления переменных из Scripting библиотеки.

Если вы сохраняете свой код в шаблоне, который собираетесь распространять, ссылки сохраняются вместе с проектом кода, поэтому нет необходимости любому другому пользователю «включать этот флажок VBA tools».