在此Sub上,我不断收到“参数不可选”的信息。 .Add
一词也总是突出显示。
我尝试使用Set
并在Sub和调用函数中声明集合。将参数设置为ByRef
或Optional
都可以。
Sub getDescriptions(ByRef descriptions As Collection)
Dim i As Integer
i = 0
Set descriptions = New Collection
Do While Cells(i + 3, 1).Value <> "" And Cells(i + 3, 2).Value <> ""
descriptions.Add = Cells(i + 3, 2).Value & " - Test Period " & Cells(i + 3, 4).Value & " - " & Cells(i + 3, 5).Value
i = i + 1
Loop
End Sub
Public descriptions as Collection
Private Sub UserForm_Initialize() 'calling Sub
With Application.ActiveWindow
Me.Left = .Left + (.Width - Me.Width) / 2
Me.Top = .Top + (.Height - Me.Height) / 2
End With
Set descriptions = New Collection
getDescriptions (descriptions)
...
答案 0 :(得分:3)
有问题:
descriptions.Add = {expression}
您正在调用没有任何参数的Add
方法,然后尝试将赋值给它的返回值(我认为它没有一个)。
从语法上讲,如下:
descriptions
收藏Add
方法(编译错误:参数不是可选的)=
运算符右侧的expresion。 如果Add
方法不需要任何参数并返回了对象引用,则您的代码可能有效。由于它没有具有非可选参数,并且不返回任何内容,因此是编译错误。
删除=
运算符,您将获得以下信息:
descriptions.Add {expression}
如下:
description
收藏Add
方法,将{expression}
作为参数传递这也是一个问题:
getDescriptions (descriptions)
删除括号;它们会强制将对象引用作为值表达式进行评估-并且Collection
类的默认属性(在表达式评估期间让对象强制执行时调用)为其参数化的Item(Index)
成员,您可以'合法地这样做。请注意,如果未设置默认属性,则无论ByVal
是否指定getDescriptions
,都将传递其值ByRef
。
说descriptions
参数只需要传递ByRef
,因为您正在使用该Set
语句为对象引用本身重新分配-一个相当小的错误,容易与全局变量有关。