2016-04-04 4 views
4

У меня есть функция VBA, который должен взять словарь в качестве аргумента:Не удается передать словарь в качестве аргумента функции VBA

Function ShowDict(Dict1 As Dictionary) 
    For Each x In Dict1 
     MsgBox (Dict1.Item(x)) 
    Next 
End Function 

И я пытаюсь назвать это следующим образом:

Dim Dict As Dictionary 
Set Dict = Dictionary 
Dict.Add "Owner", "John" 
Dict.Add "Employee", "Sam" 
ShowDict (Dict) 

Я делал выбор ссылок на Microsoft Scripting из ссылок перед определением словаря. Тем не менее, я получаю ошибку компиляции с указанием «Аргумент не факультативно», когда я пытаюсь вызвать функцию, используя параметр «Dict» в качестве параметра. Может кто-нибудь мне помочь?

+1

'ShowDict' неявно принимает параметр' Dict1' 'ByRef', но вызов' ShowDict (Dict) 'явно передает аргумент' Dict' 'ByVal'. Выбрасывайте круглые скобки, если вы не используете возвращаемое значение функции ... и напишите 'Sub', если вы пишете процедуру, которая не возвращает значение. Члены 'Function' должны что-то возвращать. –

ответ

5

сделать эти 2 изменения (New Dictionary и ShowDict Dict):

Dim Dict As Dictionary 
'Set Dict = Dictionary 
Set Dict = New Dictionary 
Dict.Add "Owner", "John" 
Dict.Add "Employee", "Sam" 
'ShowDict (Dict) 
ShowDict Dict 

Также я предлагаю добавить Option Explicit в раздел объявлений код модуля и включает Dim x в вашей ShowDict функции. Отсутствие этих факторов не способствует непосредственной проблеме, но добавление их может предотвратить другие проблемы в будущем.

+0

Спасибо! Оно работает. –

Смежные вопросы