我有一个包含大量命名范围的工作簿(超过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
属性返回的集合?
谢谢大家,我有这个工作手册和其他四个工作簿,这意味着很多命名范围!
答案 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项目中弹出名称,则需要在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
修改命名范围时,您需要偶尔重复此操作:
GetAllNames
程序out.txt
文件Strings
课程或其他任何现在要获取命名范围,请使用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