引用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的工作表上的一个范围。 最常见的原因是

  1. Sum_Date是指“汇总”以外的工作表。 检查Sum_Date的RefersTo属性,并确保没有任何拼写错误。
  2. 没有命名的范围Sum_Date,也就是说,在VBA代码中是拼错的。 在名称pipe理器中检查命名范围的拼写。
  3. 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”的变体都失败了!