我在这个 Sub 上不断收到“Argument not optional”。 .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)
...
最佳答案
问题来了:
descriptions.Add = {expression}
您正在调用
Add
没有任何参数的方法,然后尝试分配给它的返回值(我不认为它有一个)。从语法上讲,如下所示:
descriptions
收藏 Add
没有任何参数的方法(编译错误:参数不是可选的)=
右侧的表达式运算符(operator)。 如果
Add
方法不需要任何参数并返回一个对象引用,您的代码可能是有效的。由于它确实有一个非可选参数,并且不返回任何内容,因此这是一个编译错误。删除
=
运营商,你会得到这个:descriptions.Add {expression}
如下:
description
收藏 Add
方法,通过{expression}
作为参数这也是一个问题:
getDescriptions (descriptions)
去掉括号;他们强制对象引用被评估为值表达式 - 和
Collection
类的默认属性(在表达式评估期间让强制对象时调用)是其参数化 Item(Index)
成员(member),你不能合法地这样做。请注意,如果默认属性未参数化,您将传递其值 ByVal
, 不管 getDescriptions
指定 ByRef
.那说
descriptions
参数只需要传ByRef
因为您正在使用 Set
重新分配对象引用本身声明 - 与全局变量有关的一个相当容易出错的事情。
关于excel - 在代码段上出现 "Argument not optional"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56655321/