2017-08-05 130 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

相关问题