我在Excel VBA中编写了一个相当冗长的宏。我想使用命名范围而不是在宏中指定它。此宏旨在长期使用。如果范围由另一个用户转移会发生什么?如何调整我的代码,以便我的命名范围可以适应更改位置?
答案 0 :(得分:2)
我(个人)讨厌命名范围。特别是,当您将工作表/范围从一个文件复制或粘贴到另一个文件时,您总是会使用死引用或复制命名范围,这些范围不再起作用或已重命名(因为它们已存在于该文件中)。
我对此的解决方案是以下两种方法之一:
(1)我在VBA中使用某个部分(甚至模块)来声明全局变量中的范围。这与每个子开头的所有变量的Dim
非常相似。
'*********************************************************
'** Declaring all ranges and where to find which data
'*********************************************************
Dim rngNamedRangeName As Range
Sub SetupAllGlobalVariables()
Set rngNamedRangeName = ThisWorkbook.Worksheets(1).Range("A1:C10")
End Sub
'*********************************************************
'** After that all your normal subs follow and whenever
'** necessary you can call the above to get your ranges
'*********************************************************
Sub ExampleCodeToFormatYourRanges()
Call SetupAllGlobalVariables
With rngNamedRangeName
.Interior.ColorIndex = 36
End With
End Sub
(2)然而,我最喜欢的第二个解决方案是有一个单独的very hidden
表单,我再次引用/链接所有范围(对我来说很重要)。所以,基本上,我在这张单独的表格中再次提供了所有“重要”数据。这将是您的命名范围。但是没有人被允许触摸这张表(这就是为什么非常隐藏)。如果您的任何范围被移动或更改,则可以轻松地将此隐藏工作表上的范围与其他工作表重新链接。然而,在隐藏的工作表上,所有数据仍然在同一位置,并允许您对VBA中的所有范围进行硬编码(仅从隐藏工作表中获取)。
即使非VBA程序员也可以使用第二种方法正常修复此类问题。使用第一种方法,您可能总是需要具有VBA技能的人来修复它。
注意,以上不是唯一的解决方案,也不是最好的解决方案。但我可以肯定地说,即使对于大公司来说,这已被证明是一种可用的解决方案。