使用更改的命名范围Excel VBA

我在Excel VBA中写了一个相当长的macros。 我想使用命名的范围,而不是在macros中指定它。 这个macros是为长期使用而devise的。 如果范围转移到另一个用户会发生什么? 我怎样才能调整我的代码,使我的命名范围可以适应不断变化的职位?

我(个人)讨厌命名的范围。 尤其是,当你从一个文件复制或粘贴表单/范围到另一个文件时,你总是会遇到死亡引用或复制到不再工作的命名范围或被重命名(因为它们已经存在于该文件中)。

我的解决scheme是以下两个之一:

(1)我将VBA中的某个部分(甚至模块)专用于在全局variables中声明范围。 这与每个子开头的所有variables的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)然而,我最喜欢的第二个解决scheme是有一个单独的very hidden表,我参考/链接所有的范围(这对我来说很重要)。 所以,基本上,我在这个单独的表格中再次提供所有“重要”数据。 这将是你命名的范围。 但是没有人允许触摸这张纸(这就是为什么它非常隐藏)。 如果你的任何一个范围被移动或改变,那么很容易重新链接这个隐藏表格上的范围和其他表格。 然而,在隐藏的表格上,所有的数据仍然在同一个地方,并且允许你在你的VBA中对所有的范围进行硬编码(仅从隐藏的表格中获取)。

即使非VBA程序员也能正常使用第二种方法修复这些问题。 用第一种方法,你可能总是需要有VBA技能的人去修复它。

请注意,上述不是唯一的解决scheme,也不是最好的解决scheme。 但是我可以肯定地说,即使对于大公司来说,这已经被certificate是一个可用的解决scheme。