Excel用户定义的函数不能在Excel 2007中使用ArgumentDescriptions。我试图绕过它在我的添加

我在Excel中创build了几个用户定义的函数,并创build了一个简单的插件,以便我可以与同事分享。

我使用Application.MacroOptions为了给如何使用函数一些有用的指示。 特别是,我使用参数描述给参数的描述。

Application.MacroOptions _ Macro:=FuncName, _ Description:=FuncDesc, _ Category:=Category, _ ArgumentDescriptions:=ArgDesc _ HelpFile:= Helpfile 

我刚刚发现,Excel 2007中不支持ArgumentDescriptions参数,这会导致此版本的错误。 排除这个参数解决了这个问题。

我不想分发两个版本的加载项。 如果版本比Excel 2007更新,我试图使用这个代码来包含参数,但是如果在Excel 2007中使用的话,它仍然会被无法识别的参数名称绊住:

 If Left(Application.Version, 2) > 12 Then Application.MacroOptions Macro:=FuncName, ArgumentDescriptions:=ArgDesc End If 

有没有办法解决这个问题,所以我可以做到这一切只有一个加载项?

谢谢

一个简单的方法来解决Named argument not found您的函数中的错误是将macros选项设置为2个单独的函数:

  If Left(Application.Version, 2) > 12 Then setUpNewMacroOptions Else setUpOldMacroOptions End If 

然后是2个function:

  Public Sub setUpOldMacroOptions() Application.MacroOptions Macro:="myMacro", Description:="desc", Category:="cat", HelpFile:="file" End Sub Public Sub setUpNewMacroOptions() Application.MacroOptions Macro:="myMacro", Description:="desc", Category:="cat", ArgumentDescriptions:="blah", HelpFile:="file" End Sub 

由于在Excel 2007中永远不会调用setUpNewMacroOptions函数,因此VBA编译器不会尝试validation函数,因此不会出现错误。

此过程在Excel 2010中使用参数描述符,在2007年没有使用它们:

  Private Sub AddDesc(Macro As String, Description As String, _ Category As String, ArgumentDescriptions As Variant) #If VBA7 Then 'in Excel 2010 and over Application.MacroOptions Macro:=Macro, Description:=Description, _ Category:=Category, ArgumentDescriptions:=ArgumentDescriptions #Else 'in Excel 2007 and under Application.MacroOptions Macro:=Macro, Description:=Description, _ Category:=Category #End If End Sub 

最好的问候,彼得Krassoi