引用VBA中的dynamic命名范围
我在VBA中引用dynamic名称范围时遇到了麻烦。
我的范围被定义为
= OFFSET(!张$ B $ 2,0,0,COUNTA(表$ B:$ B)-1,1)
我的代码应该search另一个范围内的所有条目的一个范围,意图是任何缺失的条目将被添加。 到目前为止,我有
Sub UpdateSummary() 昏暗的细胞作为范围 昏暗rngF作为范围 设置rngF = Nothing “逐步通过数据范围内的每个单元格 对于工作表中的每个单元格(“Aspect”)。Range(“A_Date”) 'search当前单元格值的汇总范围 Set rngF = Worksheets(“Summary”)。Range(“Sum_Date”)。Find(Cell.Value)// does not work 如果rngF没有那么 '将date添加到摘要 万一 设置rngF = Nothing 下一个单元格 结束小组
For循环似乎工作正常。 但是,使用.Find方法给我一个错误消息。
应用程序定义或对象定义的错误
如果我用特定的范围($ B $ 2:$ B $ 5000)replace指定的范围,它确实可以工作,所以它似乎取决于如何传递指定的范围。
任何想法,将不胜感激。
谢谢。
这个错误几乎是肯定的,因为Excel无法find一个命名范围Sum_Date,它引用名为Summary的工作表上的一个范围。 最常见的原因是
- Sum_Date是指“汇总”以外的工作表。 检查Sum_Date的RefersTo属性,并确保没有任何拼写错误。
- 没有命名的范围Sum_Date,也就是说,在VBA代码中是拼错的。 在名称pipe理器中检查命名范围的拼写。
- Sum_Date的RefersTo公式中存在错误。 这听起来像你已经证实,情况并非如此。
我有一个类似的,如果不是相同的问题,这是我如何解决它:
我首先意识到我用来创build命名范围的方法,使用名称pipe理器,我命名的范围有一个工作簿的范围。 这很重要,因为它不属于工作表,因此不会在那里find。
所以,工作表(“摘要”)。范围(“Sum_Date”)不适合我。
由于我的范围属于工作簿,我能够find的方式是使用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
我已经做了几天的试验,最终我想出了以下几点。 这可能不是最高效的,但它确实为我工作!
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”的变体都失败了!