2017-08-05 128 views
1

由於我是vba腳本編程的新手,我無法弄清楚在這個簡單的賦值語句中哪裏出錯了。 我已經在ThisWorkBook中初始化了我的變量並嘗試使用sheet1中的變量。爲什麼這個簡單的賦值語句不工作(vba)?

代碼:

Public count1 As Integer 
Public count2 As Integer 
Public count3 As Integer 
Public row13 As Integer 
Public srow8 As Integer 
Public erow8 As Integer 
Private Sub Workbook_Open() 

count1 = 18 
count2 = 26 
count3 = 26 
Sheet1.setValues 
Sheet1.getValues 
End Sub 

Sub setValues() 
row13 = ThisWorkbook.count1 
Debug.Print (row13) 
srow8 = ThisWorkbook.count2 
erow8 = ThisWorkbook.count3 
End Sub 

Sub getValues() 
Debug.Print ("row13") 
Debug.Print (row13) 
Debug.Print ("srow8") 
Debug.Print (srow8) 
Debug.Print ("erow8") 
Debug.Print (srow8) 
End Sub 

(所有變量都是全局) 當我嘗試打印這些值沒有印刷價值。 我不明白我哪裏錯了? 如果你能幫助我,這將是很大的幫助。 在此先感謝。 :)

+0

'row13','srow8'和'erow8'被聲明爲模塊級別,我認爲是你的'ThisWorkbook'代碼,但是你試圖在'Sheet1'代碼的模塊之外使用它們。 – YowE3K

+0

是的,你是對的,它是外部的Thisworkbook代碼,但作爲變量是公開的,那麼我不應該能夠從Sheet1使用此? – Devanshi

回答

2

Public變量可以從您的代碼的任何區域訪問,而不僅僅是它們定義的對象。這並不意味着您不需要指定它們在您想要引用它們時所處的對象因此,例如,包含在您的ThisWorkbook對象中的對象將被稱爲ThisWorkbook.count1等。爲了避免使用相關對象限定變量,可以在標準代碼模塊中使變量Public

我相信你正在嘗試做如下:

在你ThisWorkbook代碼模塊:

Private Sub Workbook_Open() 
    count1 = 18 
    count2 = 26 
    count3 = 26 
    Sheet1.setValues 
    Sheet1.getValues 
End Sub 

在你Sheet1代碼模塊:

Sub setValues() 
    row13 = count1 
    Debug.Print row13 
    srow8 = count2 
    erow8 = count3 
End Sub 

Sub getValues() 
    Debug.Print "row13" 
    Debug.Print row13 
    Debug.Print "srow8" 
    Debug.Print srow8 
    Debug.Print "erow8" 
    Debug.Print srow8 
End Sub 

在通用代碼模塊(可能是Module1):

Public count1 As Integer 
Public count2 As Integer 
Public count3 As Integer 
Public row13 As Integer 
Public srow8 As Integer 
Public erow8 As Integer 
+0

我在ThisWorkbook通用代碼模塊 下有公共變量,感謝幫助 – Devanshi

+0

是的,因爲他們在'ThisWorkbook'中可以使用'ThisWorkbook.count1'訪問,這就是爲什麼它在'Workbook_Open'內設置'count1'的原因默認爲當前對象中的'count1',即'ThisWorkbook'),並且在'setValues'中設置'row13'的值(其中'row13'隱式引用過程級範圍變量,因爲沒有模塊級範圍變量存在)到'Thisworkbook.count1'(顯式引用'ThisWorkbook'對象中的'count1'變量。 – YowE3K

相關問題