我在介绍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)替换命名范围,它确实有效,所以它似乎取决于命名范围的传递方式。
任何想法将不胜感激。
感谢。
答案 0 :(得分:3)
错误几乎肯定是因为Excel无法找到引用名为Summary的工作表上的范围的命名范围Sum_Date。最常见的原因是
答案 1 :(得分:0)
我有类似的问题,如果不是同一个问题&这是我如何解决它:
我首先意识到我用来创建命名范围的方法,使用名称管理器,我的命名范围有一个工作簿范围。这很重要,因为它不属于工作表,&因此不会在那里找到。
因此,工作表("摘要")。范围(" Sum_Date")对我不起作用。
由于我的范围属于工作簿,我能找到的方法是使用ActiveWorkbook.Names(" Sum_Date")
对我来说,我用它来删除我在许多地方使用的命名范围的公式。最大的优点是命名范围只更新一次,而不是为调用范围的每个单元位置调用公式。巨大的延时差异!
Public last_Selection As String
Private Sub Worksheet_Change(ByVal Target As Range)
'excel data change detection
If Range(last_Selection).Column = 2 Then
'Disable events, so this only executes once
Application.EnableEvents = False
'This can be done with a complex formula in a cell,
'but this is easily understood
Range("B1").End(xlDown).Select
ActiveWorkbook.Names("last_Entry").Value = ActiveCell.Row
'Re-enable so this routine will execute on the next change
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'constantly store the last cell to know which one was previously edited
last_Selection = Target.Address
End Sub
答案 2 :(得分:0)
我知道这是一个非常古老的线程,但我今天遇到了同样的问题,我寻找解决方案已经很长时间了。所以也许这会对某人有所帮助。
=OFFSET(...) 公式定义的命名“范围”实际上是一个命名的 FORMULA,所以在 VBA 中你必须先评估它才能得到范围。例如:
Measure-Object
感谢来自 mrexcel.com 的一个名叫“shg”的人,他让我走上了正轨。 :)
答案 3 :(得分:-2)
我已经尝试了几天,最终我想出了以下内容。它可能不是最有效的,但它对我有用!
The named range of "OhDear" was set up in the normal way
Dim vItem As Variant
Set vItem = Names("OhDear")
Debug.Print vItem.Name
值得一试你不觉得! 如果不是使用变体,而是使用以下内容:Dim Nm as Name:Set Nm = Names(“OhDear”),这不起作用。使用'Nm'的任何变化都失败!!!