VBA Exel编译错误:预期:由"("引起的语句结束

0 excel vba excel-vba

我正在尝试为以下内容创建自定义公式:

在单独的单元格中使用名称,附属和电子邮件,并将它们组合在一个新单元格中作为名称(附属).

我可以使用公式直接进入新单元格

=A2& " ("& B2&") " & "<"&C2&">" 
Run Code Online (Sandbox Code Playgroud)

其中A2,B2和C2分别是包含Name,Affiliation和Email的单元格.

但是,我不是每次都复制和粘贴这个公式,而是试图创建一个自定义公式作为捷径.但是,当我尝试在VBA中使用相同的公式来创建这样的新模块时:

Function Combined (name, affiliation, email)
 Combined = name&" ("&affiliation&") "&"<"&email&">"
Run Code Online (Sandbox Code Playgroud)

该程序突出显示"(",它给我以下错误:

编译错误:预期:结束语句

我不是编码员,我只是涉猎,但任何帮助将不胜感激.

谢谢!

PS如果我可以做一个像A2:C2而不是A2,B2,C2这样的范围,效果相同,那就更好!!!!!!

Mat*_*don 5

精简版

在运算符及其操作数之间添加空格.问题解决了.


长版

任何紧跟a &,like name&和的标识符都affiliation&被解释为Long变量,因此在连接运算符之间缺少空格会导致解析错误,因为VBA不知道哪个文字表达式可能跟随Combined = name&赋值 - 指令完整; 应该在哪里的唯一标记" ("语句结束标记:

预期:声明结束

说的确如此.之前的所有内容都是" ("完全有效的指令,除非它没有终止.

所以它不是" (",它是类型提示.插入空格以将运算符与操作数分开,您将解决问题.更明确也不会伤害:

Option Explicit

Public Function Combined(ByVal name As String, ByVal affiliation As String, email As String) As String
    Combined = name & " (" & affiliation & ") " & "<" & email & ">"
End Function
Run Code Online (Sandbox Code Playgroud)

如果未指定类型,则隐式声明Variant,这会产生一些不必要的运行时开销.

如果ByVal未指定,则ByRef默认传递参数,这意味着函数可以分配给参数.

你也可以像这样实现这个功能:

Combined = Join(Array(name, "(" & affiliation & ")", "<" & email & ">"), " ")
Run Code Online (Sandbox Code Playgroud)

  • 或者使用`Join $`并获得免费类型提示,而库存持续.实际上,不要这样做. (2认同)