【问题标题】:Excel VBA Dynamic Named Ranges: How to check if range is blankExcel VBA动态命名范围:如何检查范围是否为空白
【发布时间】:2018-12-06 21:30:56
【问题描述】:

我正在尝试编写一个 excel 子程序,该子程序将根据命名范围中的条目填充数组。我的范围代码是:

=OFFSET(Home!$B$5,1,0,COUNTA(Home!$B:$B)-1,1)

我正在尝试编写一个 vba 脚本,该脚本将在调用函数之前检查是否填充了命名范围,但看不到任何工作。尝试:

Debug.Print ActiveSheet.Range("NamedRange")

返回 1004 错误。并尝试:

If (IsError(ActiveSheet.Names("NamedRange")) Then

返回相同的错误。谁能指出我正确的方向?

【问题讨论】:

  • 检查 Range.Address
  • 检查命名范围的范围。是工作表还是工作簿?
  • Cool Blue 范围的工作簿。 Range.Address 似乎也没有返回任何内容

标签: excel vba


【解决方案1】:

这是你正在尝试的吗?

Sub Sample()
    Dim rng As Range        
    Set rng = [NamedRange]        
    If Application.WorksheetFunction.CountA(rng) = 0 Then _
    MsgBox "Range is blank"
End Sub

在 VBA 中,您可以使用 Range 属性引用 Excel 的范围对象。这可以使用方括号 ([ ]) 缩短。例如,如果您要引用单元格 A1,请使用“[A1]”。 Book1.xlsm 的 Sheet1 中单元格 A1 的完全限定引用将是 Application.Workbooks(“Book1.xlsm”).Worksheets("Sheet1").[A1]

【讨论】:

  • 啊哈,谢谢悉达多。即使指定范围内没有项目,使用 Application.WorksheetFunction.CountA 也会返回值 1。我认为我的动态范围本身有问题...我明天再检查一下。
  • 循环遍历该范围内的单元格并检查它是否有值?
  • 上面的例子有效。我在每个命名范围上方都有列标题,并且 CountA 函数将标题作为一个值,即使范围是空白的。删除了标题,一切都很好。谢谢
  • ewbi.blogs.com/develops/2006/03/determine_if_a_.html 也包含有趣的提示。是的,我知道这是一个相当古老的问题(和答案)。
  • @SiddharthRout 我以前在 vba 的代码中从未见过 [],它有什么作用?我和 Socii 有同样的问题,但在括号里我有一个 Object required 错误
猜你喜欢
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2017-10-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多