2016-04-22 226 views
0

我在Excel VBA中編寫了一個相當長的宏。我想使用命名範圍,而不是在宏中指定它。此宏旨在用於長期使用。如果範圍由另一個用戶改變會發生什麼?我如何調整我的代碼,使我的命名範圍可以適應不斷變化的職位?使用更改命名範圍Excel VBA

回答

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技能的人來修復它。

請注意,上述不是唯一的解決方案,也不是最好的解決方案。但我可以肯定地說,即使對於大公司來說,這已經被證明是一個可用的解決方案。

+0

感謝您的回覆。但是,第二種解決方案可能會犧牲多用戶的可用性以及宏和電子表格的可移植性。當你隱藏電子表格時,它最終會飄浮在內存之外。 – Dombey

+0

在某些時候,你必須告訴VBA在哪裏找到數據,直到你不把它放在結構化數據庫服務器(SQL)上,你必須在某處某處對引用進行硬編碼。所以,現在你有三種選擇,你可以評估它們並且儘可能多地嘗試它們。我(親自)已經這麼做了很長時間,並得出了上述結論。然而,不同的設置/參數可能導致不同的結論。所以,盡情地嘗試一下並比較它們。可能有人甚至可以添加另一個切實可行的解決方案。 – Ralph