VBA:使用字符串常量指定范围

时间:2014-03-27 15:28:34

标签: excel vba excel-vba

我正在尝试创建一个简单的函数来计算代号为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"。

2 个答案:

答案 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声明移到模块的开头,一切都正常运行。