Vba EXCEL传递给函数的范围始终为空
我正在尝试在Excel2007中创建一个用户定义的函数。该函数位于VBA模块内,接受单个参数,即范围对象。问题是接收时参数总是空的。我错过了什么Vba EXCEL传递给函数的范围始终为空,vba,excel,Vba,Excel,我正在尝试在Excel2007中创建一个用户定义的函数。该函数位于VBA模块内,接受单个参数,即范围对象。问题是接收时参数总是空的。我错过了什么 Function ConcatenateCells(p_objConcatArea As Range) As String '****************************************** ' Initialize Variables '***********************************
Function ConcatenateCells(p_objConcatArea As Range) As String
'******************************************
' Initialize Variables
'******************************************
Dim strReturnString As String
'******************************************
' Process Each Cell In Range
'******************************************
strReturnString = ""
For Each objCellValue In p_objConcateArea
If (objCellValue <> "") Then
If (strReturnString <> "") Then strReturnString = strReturnString & ", "
strReturnString = strReturnString & objCellValue
End If
Next
'******************************************
' Return Final Value
'******************************************
ConcatenateCells = strReturnString
End Function
我得到了#价值作为我的结果。我仔细检查了代码,发现参数(p_objcatearea)总是空的。为什么我不能将范围传递给我的UDF
救命啊
-Ben对于不使用Option Explicit时出现的问题,这是一个“经典”案例。我纠正了你的打字错误
Option Explicit
Function ConcatenateCells(p_objConcatArea As Range) As String
'******************************************
' Initialize Variables
'******************************************
Dim strReturnString As String
Dim objCellValue
'Dim p_objConcateArea
'******************************************
' Process Each Cell In Range
'******************************************
strReturnString = ""
For Each objCellValue In p_objConcatArea
If (objCellValue <> "") Then
If (strReturnString <> "") Then strReturnString = strReturnString & ", "
strReturnString = strReturnString & objCellValue
End If
Next
'******************************************
' Return Final Value
'******************************************
ConcatenateCells = strReturnString
End Function
选项显式
函数将单元格(p_objConcatArea作为范围)连接为字符串
'******************************************
'初始化变量
'******************************************
Dim streturnstring作为字符串
模糊目标值
“暗p_对象关联区域”
'******************************************
'处理范围内的每个单元格
'******************************************
strReturnString=“”
对于p_objconcatara中的每个objcell值
如果为(objCellValue“”),则
如果为(strReturnString“”),则strReturnString=strReturnString&“
strerturnstring=strerturnstring&objCellValue
如果结束
下一个
'******************************************
'返回最终值
'******************************************
ConcatenateCells=strReturnString
端函数
您应该使用选项显式“`^^^^p_objconcatea
p_objconcateaOMG、类型和缺少的系统标志。我已经很久没有使用VBA了,我忘了没有intellisense是多么烦人。非常感谢。Tools~Options~Editor Tab~需要变量声明才能将Option Explicit
放在所有新模块上。还必须始终指定按值传递参数串联单元格(ByVal p_objConcatArea As Range)
。如果不使用ByVal
,默认情况下,VBA通过引用传递参数。这会给你带来一些讨厌的、难以找到的bug。这是。
Option Explicit
Function ConcatenateCells(p_objConcatArea As Range) As String
'******************************************
' Initialize Variables
'******************************************
Dim strReturnString As String
Dim objCellValue
'Dim p_objConcateArea
'******************************************
' Process Each Cell In Range
'******************************************
strReturnString = ""
For Each objCellValue In p_objConcatArea
If (objCellValue <> "") Then
If (strReturnString <> "") Then strReturnString = strReturnString & ", "
strReturnString = strReturnString & objCellValue
End If
Next
'******************************************
' Return Final Value
'******************************************
ConcatenateCells = strReturnString
End Function