VBA Exel编译错误:预期:由“(”

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

将姓名,联系和电子邮件分别放在单元格中,并将其作为名称(联盟)组合到一个新的单元中。

我能够使用公式直接进入一个新的单元格

=A2& " ("& B2&") " & "<"&C2&">" 

其中A2,B2和C2分别是包含名称,联盟和电子邮件的单元格。

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

 Function Combined (name, affiliation, email) Combined = name&" ("&affiliation&") "&"<"&email&">" 

该程序突出了“(”,它给了我以下错误:

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

我不是一个编码器,我只是涉猎,但任何帮助将不胜感激。

谢谢!

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

简洁版本

在运算符和它们的操作数之间添加空格。 问题解决了。


长版

任何紧跟着& name& ,如name&affiliation& ,都被解释为一个Longvariables,所以在连接操作符之间缺less空格会导致parsing错误,因为VBA不知道字面expression式可能遵循Combined = name& assignment Combined = name&指令完整, 唯一的标记应该在哪里" ("是,是语句结束标记:

预计:声明结束

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

所以它不是" (" ,它是types提示,插入空格来分隔操作符和操作数,你就可以解决这个问题。

 Option Explicit Public Function Combined(ByVal name As String, ByVal affiliation As String, email As String) As String Combined = name & " (" & affiliation & ") " & "<" & email & ">" End Function 

当一个types没有被指定时,声明隐含的是Variant ,这会导致一些不必要的运行时间开销。

当没有指定ByVal ,参数默认通过ByRef ,这意味着函数可以分配给参数。

你也可以实现这样的function:

 Combined = Join(Array(name, "(" & affiliation & ")", "<" & email & ">"), " ") 

如果你想传递一个Range到你的函数,你可以这样做:

 Public Function Combined(rng As Range) As Variant If rng.Cells.Count <> 3 Or rng.Areas.Count <> 1 Then Combined = cvErr(xlErrValue) Else Combined = rng.Cells(1).Value & _ " (" & rng.Cells(2).Value & ")" & _ " <" & rng.Cells(3).Value & ">" End If End Function 

如果放置在一个标准的代码模块中,则可以从Excel调用该函数,例如=Combined(A2:C2)