#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».