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

时间:2017-04-27 01:52:31

标签: excel vba excel-vba

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

在单独的单元格中输入名称,关联和电子邮件,并将它们组合在一个新单元格中作为名称(隶属关系)。

我可以使用公式

直接进入新单元格
=A2& " ("& B2&") " & "<"&C2&">" 

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

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

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

该计划突出了&#34; (&#34;它给了我以下错误:

编译错误:  预期:声明结束

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

谢谢!

P.S。如果我可以做一个像A2:C2这样的范围而不是A2,B2,C2,为了同样的效果,那会更好!!!!!!

2 个答案:

答案 0 :(得分:5)

简短版

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

长版

&之后紧跟着name&affiliation&的任何标识符都被解释为Long变量,因此&#39之间缺少空白; s意味着连接运算符导致解析错误,因为VBA不知道哪个文字表达式可能遵循Combined = name&赋值 - 指令是完整的; 应该在" ("所在的唯一标记是语句结束标记:

  

预期:声明结束

说的确如此。 <{1}}之前的所有内容都是完全有效的指令,除非它没有被终止。

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

" ("

如果未指定类型,则声明隐式Option Explicit Public Function Combined(ByVal name As String, ByVal affiliation As String, email As String) As String Combined = name & " (" & affiliation & ") " & "<" & email & ">" End Function ,这会产生一些不必要的运行时开销。

如果未指定Variant,默认情况下会传递参数ByVal,这意味着该功能可能会分配给参数。

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

ByRef

答案 1 :(得分:1)

如果您想将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)