将所有命名范围提取到类中

时间:2015-06-22 19:36:13

标签: vba excel-vba excel

我有一个包含大量命名范围的工作簿(超过200个)。我真的需要一种快速,轻松地使用所有命名范围的方法,这样我就可以使用VBA进行/填充它们。

到目前为止,我的解决办法是在我的公共get properties模块中将代码放在一堆NamedRanges中,将属性设置为等于命名范围,如下所示:

Public Property Get LotNumber49() As range
    Set LotNumber49 = Common.GetRange(Strings.LotNumber49)
End Property

其中Strings.LotNumber49是一个属性,其中包含工作簿中记录的命名范围的名称,Common.GetRange是一个返回所需范围对象的新实例的方法。

虽然这个解决方案运行良好(我现在可以通过调用NamedRanges.LotNumber49来访问该命名范围的实例)在Strings类和另一个属性中键入属性绝对是耗时且乏味的。在NamedRanges班。

有没有更好的方法来完成命名范围的快速参考,任何人都可以想到?也许迭代Workbook.Names属性返回的集合?

谢谢大家,我有这个工作手册和其他四个工作簿,这意味着很多命名范围!

1 个答案:

答案 0 :(得分:2)

按字符串

获取命名范围

为什么不这样简单的程序:

Function GetNR(namedRange as String) as Range
 Set GetNR = ActiveWorkbook.Names(namedRange).RefersToRange
End Function

然后简单地获取命名范围:

Sub Example()
  Debug.Print GetNR("NAME").Value
End Sub

VBA项目中的命名范围建议

或者如果您希望在VBA项目中弹出名称,则需要在Strings类中重新定义常量。试试这个程序:

Sub GetAllNames()
 Dim res As String, n As Name
 For Each n In ActiveWorkbook.Names
    If InStr(n.Name, "!") = 0 Then res = res & "Const " & n.Name & "=""" & n.Name & """" & vbNewLine
 Next n
 Dim fFile As Long
 fFile = FreeFile
 Open "out.txt" For Output As #fFile
 Print #fFile, res
 Close #fFile
End Sub

修改命名范围时,您需要偶尔重复此操作:

  1. 运行GetAllNames程序
  2. 打开out.txt文件
  3. 将输出复制到Strings课程或其他任何
  4. 现在要获取命名范围,请使用Common.GetRange方法和Strings名称,或者只使用上述方法生成Getter代码,如下所示:

    Sub GetAllGetters()
     Dim res As String, n As Name
     For Each n In ActiveWorkbook.Names
        If InStr(n.Name, "!") = 0 Then res = res & "Public Property Get " & n.Name & "() As range" & vbNewLine & "Set " & n.Name & " = Common.GetRange(Strings." & n.Name & ")" & vbNewLine & "End Property"
     Next n
     Dim fFile As Long
     fFile = FreeFile
     Open "outGetters.txt" For Output As #fFile
     Print #fFile, res
     Close #fFile
    End Sub