我正在尝试创建一个简单的函数来计算代号为LINES的工作表中列出的管道数。列表LINES中列出行的范围是$ A $ 2:$ A $ 1048576,我已经命名了范围" LineList"。我创建了一个包含所有硬编码全局常量的模块,以便将来可以轻松地更改它们。 LineList范围的名称是其中之一,定义如下:
Public Const LINELIST_RNG As String = "LineList"
我的功能如下。由于某些原因,由于LINELIST_RNG为空,此命令失败:
Function numLines() As Integer
numLines = WorksheetFunction.CountA(LINES.Range(LINELIST_RNG))
End Function
但是,如果我将范围名称硬编码到此函数中,它可以正常工作:
numLines = WorksheetFunction.CountA(LINES.Range("LineList"))
我不确定为什么.Range对象不能将LINELIST_RNG作为参数,而是采用" LineList"。
答案 0 :(得分:1)
以下代码可以正常使用:
Option Explicit
Public Const LINELIST_RNG As String = "LineList"
Public Sub test()
Dim r1 As Range
Dim r2 As Range
Set r1 = Sheets(1).Range("LineList")
Set r2 = Sheets(1).Range(LINELIST_RNG)
MsgBox r1.Cells(1, 1).Value
MsgBox r2.Cells(1, 1).Value
End Sub
因此代码中必定还有其他内容。明确打开选项,它可能指向正确的方向
答案 1 :(得分:1)
问题似乎源于我的模块中的声明顺序。提供上下文,
的声明Public Const LINELIST_RNG As String = "LineList"
Function numLines() As Integer
是在公共Const和函数声明列表之后完成的,因此它们无法正常工作。
我的模块看起来像:
Public Const ...
Public Const ...
Function blabla1 ...
Function blabla2 ...
Public Const LINELIST_RNG ...
Function numLines() As Integer ...
现在我已将所有Public Const声明移到模块的开头,一切都正常运行。