VBA объявить неопределенную переменную типа? - PullRequest
0 голосов
/ 27 января 2019

Спасибо, что прочитали это.

Я работаю над личным проектом.Я написал скрипт, который добавляет Scripting Runtime (для использования типа Dictionary), а затем объявляет переменную, такую ​​как DictSummary, как Scripting.Dictionary.Проблема в том, что VBA не допускает этого, так как сканирует код на наличие ошибок даже до его запуска.Когда среда выполнения сценариев не добавляется, Dim DictSummary as Scripting.Dictrionary дает «Определяемый пользователем тип не определен» ошибка.

If ReferenceIsAdded("Scripting") = False Then
    If ProjectIsNA Then
        Exit Function
    Else
        ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\scrrun.dll"
    End If
Dim DictSummary As Scripting.Dictionary

Я попытался добавитьФункция, которая объявляет, назначает и возвращает переменную типа Dictionary, чтобы избежать этой ошибки.

Public Function AddADict() As Variant
    Dim myDict As Scripting.Dictionary: Set myDict = New Scripting.Dictionary
    Set AddADict = myDict
End Function

Затем я получаю переменную, подобную этой

Set DictSummary = AddAdict()

Она действительно избегает этой ошибкино возвращаемая переменная не совсем такая, тип DictSummary - Variant / Object / Dictionary, в то время как для этой переменной он должен быть Dictionary / Dictionary.Я попробовал On Error Resume Next, но это не помогает.

Есть ли способ избежать этого или есть способ необязательного объявления переменной?

1 Ответ

0 голосов
/ 27 января 2019

Вы протестуете против Variant, потому что вы можете определить свою функцию для возврата Object. Запуск sub TestAddDict ниже переменной objDict можно увидеть в окне Locals типа Object/Dictionary

Option Explicit

Function AddADict() As Object
    Set AddADict = VBA.CreateObject("Scripting.Dictionary")
End Function

Sub TestAddADict()
    Dim objDict As Object
    Set objDict = AddADict
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...