vba - 将所有命名范围提取到一个类中

标签 vba excel

我有一本工作簿,其中包含大量命名范围(远远超过 200 个)。我确实需要一种快速、轻松地处理所有命名范围的方法,这样我就可以使用 VBA 处理/填充它们。

到目前为止,我的解决方案是在公共(public) NamedRanges 模块中的一堆 get property 中添加代码,以将属性设置为等于命名范围,例如所以:

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

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

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

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

谢谢大家,我要处理这本工作簿以及其他四本工作簿,这意味着大量的命名范围!

最佳答案

通过字符串获取命名范围

为什么不采用像这样的简单过程:

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类或其他类

现在要获取命名范围,请使用您的 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

关于vba - 将所有命名范围提取到一个类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30988364/

相关文章:

ms-access - Access VBA : What is the difference between dao. 记录集 vs 记录集?

excel - 使用 Excel VBA 自动邮件合并

c# - 为什么即使我明确将工作表计数设置为 1,我也会得到一张多余的工作表?

excel - 从列表框中删除重复项

.net - Excel 2003 ActionsPane 中的 AutoSize ElementHost

excel - 使用 VBA 将文件夹导入 Excel (FileDialogFolderPicker)

ms-access - 如何检查 MS Access 表单 vba 宏中是否存在表

excel - 使用格式和布局将多个表从 Access DB 导出到 Excel 工作簿

html - VBA - 查找前面的 html 标记

javascript - xmlhttpRequest 使用 javascript 打开 Excel (xlsx)