我正在尝试为以下内容创建自定义公式:
在单独的单元格中输入名称,关联和电子邮件,并将它们组合在一个新单元格中作为名称(隶属关系)。
我可以使用公式
直接进入新单元格=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,为了同样的效果,那会更好!!!!!!
答案 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)