【问题标题】:Why can I not see a Named Range that is scoped as Workbook from any VBA code?为什么我无法从任何 VBA 代码中看到范围为工作簿的命名范围?
【发布时间】:2016-08-02 17:30:58
【问题描述】:

我使用名称管理器创建了一个命名范围。它被称为Vol_Check。它的范围为工作簿。

如果它被限定为工作簿,为什么我在其他工作表或 ThisWorkbook 或模块的 VBA 代码中看不到它。 即使我尝试直接引用它,它也不起作用。 这是一个我无法工作的代码示例。

Private Sub CommandButton1_Click()

    If ThisWorkbook.Sheets("sheet1").Range("Vol_Check").Value <> 1 Then
        MsgBox ("Some message ")
    End If

End Sub

【问题讨论】:

  • 如果工作表的范围仅限于工作簿,为什么还要将其粘贴在那里?只是ThisWorkbook.Range("Vol_Check").value 应该可以工作。你有任何错误吗?该范围是否包含多个单元格,还是只有一个?当您运行debug.print Range("Vol_Check").value 时,您是否在“立即”窗口中看到任何内容?
  • ThisWorkbook.Range("Vol_Check").value 生成编译错误。找不到方法或数据成员。
  • 我的范围只有一个单元格。当我在上面运行我的原始代码时,我得到一个下标超出范围的错误。
  • @rtemen 在下面看到我的答案

标签: excel vba


【解决方案1】:

如果您使用的是命名范围“Vol_Check”,则使用下面的代码从命名范围内的一个单元格中读取一个值。

在示例中,假设您的命名范围包括范围 B2:B2,那么代码行 Range("Vol_Check")(1, 1) 指的是 Cell B2

Private Sub CommandButton1_Click()

' just for debug - shows the first row and first column in the Named Range
MsgBox Range("Vol_Check")(1, 1)

If Range("Vol_Check")(1, 1) <> 1 Then
    MsgBox ("Some message ")
End If

End Sub

【讨论】:

    【解决方案2】:

    尝试改用Worksheet.Evaluate

    Private Sub CommandButton1_Click()
        If ThisWorkbook.Sheets(1).Evaluate("Vol_Check").Value <> 1 Then
            MsgBox "Some message "
        End If
    End Sub
    

    【讨论】:

      【解决方案3】:

      问题解决了。 事实证明,我没有使用名称管理器工具正确定义命名范围。即使我在范围内将其标记为“工作簿”,我的另一个错误还是把它搞砸了。 谢谢大家。 丰富

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 2023-01-14
        • 2020-09-04
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多