2016-08-17 114 views
1

Excel-VBA。我想創建一個變量,稍後我會在其他幾個子目錄中使用它。繼這個其他的問題,我聲明的變量公開VBA:對其他潛水艇使用公共變量

Public Counter As Integer 

然後,我繼續使用子

Sub Count() 
Set sh2= ActiveWorkbook.Sheets("Sheet2") 
Set sh1 = ActiveWorkbook.Sheets("Sheet1") 
Dim rng As Range 
Dim trng As Range 
Set trng = sh2.Range("A4:HV4") 

For Each rng In trng 
    If rng.Value = "Name" Then 
    Counter = Range(rng, rng.End(xlToLeft)).Columns.count 
    End If 
Next rng 

如果我嘗試測試在同一子給予價值的變量,值數有例如

sh1.range("B1").value = counter 

我得到正確的數字。

但是,一旦我嘗試在另一個子上調用它,值爲0!

Sub Test() 

Range("F1").Value = counter 

end sub 

我也試過在我的測試子上調用Count子,但也沒有結果。

任何想法?謝謝!

+1

我總是使用「overkill」approcah,我只是添加一個專用模塊(我稱之爲_Global_Var_),並且在那裏我聲明瞭所有的全局變量。在你的示例'Global Counter As Integer'中。 –

+1

這裏包含的代碼部分沒有明顯的錯誤,所以問題出在你正在做的其他部分。但我注意到Counter是在一個地方大寫的,而不是在其他地方:要麼複製不正確,要麼代碼顯示解析器認爲它們是不同的變量。 – david

回答

2

@ShaiRado已經在評論中指出了它。下面是圍繞一些細節:

Public類型不通過有知名度了VBA項目,至少不是沒有對象引用。因此,如果在工作表對象\ UserForm \ Class中聲明變量Public,則需要使用該變量的完整引用。例如,如果Counter在Sheet1中聲明,則使用Sheet1.Counter

Global另一方面,變量可通過VBA項目訪問。您不需要爲引用調用其父對象名稱。這裏只有一個,Global變量只能在標準模塊中聲明。 object \ UserForm \ Class,它們不允許在它們內部進行全局變量聲明。

如果需要項目範圍訪問,請始終聲明Global

的另一件事是Option Explicit,如果你在你的代碼有它,而不是意外輸出/行爲,你woud已經得到了錯誤Variable not defined與codde在

範圍(「F1」)highlihgted。價值=計數器

這會使調試變得更容易。 :)

-1

所以,我解決了它只需調用我的新子功能之前!

Sub Test() 
Call count() 
Range("F1").Value = counter 

end sub