VBA多参数函数调用语法错误

我想在Excel VBA(2007)中调用一个函数,并且在调用中收到语法错误。 我有一个称为ImportSets的数组结构,它包含工作表和string,并试图将该数组中项目的成员传递给称为Import的函数。

调用代码如下所示:

For n = 1 To 7 Debug.Print ("Destsheet: " & ImportSets(n).DestSheet.name) Debug.Print ("Sourcesheet: " & ImportSets(n).SourceSheet.name) Debug.Print ("Sourcecolumn: " & ImportSets(n).SourceColumn) Import(CostAnalysisWorksheet.Sheets("Reimbursements"), ImportSets(n).DestSheet, ImportSets(n).SourceSheet, ImportSets(n).SourceColumn) Next n 

所有的Debug.Print语句都返回有意义和正确的string,并检查“Reimbursements”的存在是否为真。 方法调用在一行上。 这里是ImportSet对象代码:

 Public Type ImportSet DestSheet As Worksheet SourceSheet As Worksheet SourceColumn As String ...other code... End Type 

函数体看起来像这样:

 Function Import(ByRef ReimbursementSheet As Worksheet, ByRef DestSheet As Worksheet, ByRef ImportSheet As Worksheet, ByRef ImportSheetPriceColumn As String) As String ....code here ..... End Function 

我在函数调用(第一个代码片段)中出现了一个红色高亮的语法错误。 我可能错过了一些愚蠢的东西。 它是什么?

我在Excel 2007中没有使用过VBA,但是如果你将返回值赋给一个variables的话,旧版本只允许你在函数调用参数中加上括号。 尝试这个:

 Import CostAnalysisWorksheet.Sheets("Reimbursements"), ImportSets(n).DestSheet, ImportSets(n).SourceSheet, ImportSets(n).SourceColumn 

重要的一点是如何让函数返回值以及是否传递variablesByVal或ByRef。 ByRef允许函数改变variablesByVal意味着函数不能改变variables。

这两个例子基本上做同样的事情,但要注意操作variablesByRef和从函数返回一个variables的微妙之处。

 Sub test() Dim lngX As Long, lngY As Long, Product As Long lngY = 10 lngX = 5 Product = multiply(lngX, lngY) MsgBox (Product) End Sub Function multiply(ByVal lngX As Long, ByVal lngY As Long) As Long multiply = lngY * lngX End Function 

或者传递variablesByRef并使用函数进行操作

 Sub test() Dim lngX As Long, lngY As Long, Product As Long lngY = 10 lngX = 5 Product = 0 multiply lngX, lngY, Product MsgBox (Product) End Sub Function multiply(ByVal lngX As Long, ByVal lngY As Long, ByRef Product As Long) Product = lngY * lngX End Function 

这个例子是相当微不足道的,但往往一个对象,数组等可能需要传递给一个函数来处理ByRef,而不是提供一个答案ByVal