在Excel中,我有两个模块,比如说module1和module2。
在module1中,我声明了一个公共变量:
Public offsetNumber As Integer
在sub中,我为'offsetNumber'变量赋一个数字。
offsetNumber = 2
Msgbox offsetNumber
这成功显示数字2。
现在,在module2中,我尝试调用变量offsetNumber。
Msgbox offsetNumber
但是,显示的值为0,而不是2。
如何将变量值从module1转移到module2?
UPSTATE:
我尝试过module1.offsetNumber并检查“require variable declarations”。我还检查过以确保该值没有被覆盖(至少在module1中)。
为了更深入,这就是我的module1目前的结构:
Public offsetNumber as Integer
Sub **********
Dim .... (declare variables)
Activecell.EntireRow.Select
currentRow = ActiveCell.Row
offsetNumber = currentRow - 48
Msgbox offsetNumber (returns correct value)
........... (misc code)
Msgbox offsetNumber (returns correct value)
End Sub
这就是我的module2的结构:
Sub *********
Dim ..... (declare variables)
.............. (misc code)
Msgbox offsetNumber (returns 0)
For rowCounter = 2 to lastRow
If Sheets("****").Cells(rowCounter, 3) = ****** Then
Sheets("****").Activate
Rows(rowCounter + offsetNumber).Select
End If
Next rowCounter
End Sub
在执行module1后的“立即”窗口中,显示以下行
? offsetNumber
返回值0。
解:
这对我有用:
模块1:
Public globalOffsetNumber as Integer
Sub **********
Dim .... (declare variables)
Activecell.EntireRow.Select
currentRow = ActiveCell.Row
offsetNumber = currentRow - 48
globalOffsetNumber = offsetNumber (new line)
Msgbox offsetNumber (returns correct value)
........... (misc code)
Msgbox offsetNumber (returns correct value)
End Sub
模块2:
Sub *********
Dim ..... (declare variables)
.............. (misc code)
Msgbox globalOffsetNumber (now returns correct value)
For rowCounter = 2 to lastRow
If Sheets("****").Cells(rowCounter, 3) = ****** Then
Sheets("****").Activate
Rows(rowCounter + globalOffsetNumber).Select
End If
Next rowCounter
End Sub
对于在一个模块中声明为可在另一个模块中访问的公共变量,您无需执行任何操作。试试这个实验:
在模块1中有:
Option Explicit
Public s As String
Sub setvar()
s = "Hi"
End Sub
在模块2中有:
Sub readvar()
Debug.Print s
End Sub
如果您首先运行setvar然后立即运行readvar,您应该会在即时窗口中看到“Hi”。
我的猜测是你在运行你的第一个子程序之后但在运行第二个子程序之前以某种方式重置项目。
我添加了相同的问题,不要在模块2中放置“Public s As String”。定义重置变量。