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&
,都被解释为一个Long
variables,所以在连接操作符之间缺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)