我在介绍VBA中的动态名称范围时遇到了麻烦 .
我的范围被定义为
=OFFSET(Sheet!$B$2,0,0,COUNTA(Sheet!$B:$B)-1,1)
我的代码应该在一个范围内搜索另一个范围内的所有条目,意图是添加任何缺失的条目 . 到目前为止我有
Sub UpdateSummary()
Dim Cell As Range
Dim rngF As Range
Set rngF = Nothing
' Step through each cell in data range
For Each Cell In Worksheets("Aspect").Range("A_Date")
' search Summary range for current cell value
Set rngF = Worksheets("Summary").Range("Sum_Date").Find(Cell.Value) // Does not work
If rngF Is Nothing Then
' Add date to Summary
End If
Set rngF = Nothing
Next Cell
End Sub
For循环似乎工作正常 . 但是,使用.Find方法给我一个错误消息 .
Application-defined or object-defined error
如果我用特定范围($ B $ 2:$ B $ 5000)替换命名范围,它确实有效,所以它似乎取决于命名范围的传递方式 .
任何想法,将不胜感激 .
谢谢 .
3 回答
我已经尝试了几天,最终我想出了以下内容 . 它可能不是最有效的,但它确实对我有用!
值得一试你不觉得!如果不是使用变体,而是使用以下内容:Dim Nm as Name:设置Nm = Names(“OhDear”),这不起作用 . 使用'Nm'的任何变化都失败了!
该错误几乎肯定是因为Excel无法找到引用名为Summary的工作表上的范围的命名范围Sum_Date . 最常见的原因是
Sum_Date指的是摘要以外的工作表 . 检查Sum_Date的RefersTo属性,确保没有拼写错误 .
没有命名范围Sum_Date,也就是说,它在VBA代码中拼写错误 . 检查名称管理器中命名范围的拼写 .
Sum_Date的RefersTo公式中存在错误 . 听起来你已经证实情况并非如此 .
我有一个类似的,如果不是相同的问题,这是我如何解决它:
我首先意识到我用来创建命名范围的方法,使用名称管理器,我的命名范围有一个工作簿范围 . 这很重要,因为它不属于工作表,因此不会在那里找到 .
因此,工作表(“摘要”) . 范围(“Sum_Date”)对我不起作用 .
由于我的范围属于工作簿,我能找到的方法是使用ActiveWorkbook.Names(“Sum_Date”)
对我来说,我用它来删除我在许多地方使用的命名范围的公式 . 最大的优点是命名范围只更新一次,而不是为调用范围的每个单元位置调用公式 . 巨大的时间延迟差异!