我很難嘗試在VBA模塊中使用全局變量。在VBA中,如何在一個模塊中編輯全局變量並在另一個模塊中引用它?
我有一個二維數組,我正用它來存儲Excel中工作表的值。我想創建一個撤銷按鈕,在那裏我檢索最後存儲的值,我在看的是使用全局變量,它在一個模塊中編輯並在另一個模塊中引用。
問題是,我不認爲該程序允許我將一個模塊的更改傳送到另一個模塊。有什麼我可以做,以促進這一點?下面是想什麼,我要完成的總結:
Public empsTot As Variant
Sub update()
ReDim Preserve empsTot(5, numOfEmp, numOfFields)
'emps(,,) would be range extracted from excel
For i = 0 To numOfFields
For j = 0 To numOfEmp
empsTot(0, j, i) = emps(j, i)
Next
Next
'repeat the above process for each new entry, changing empsTot(++,j,i)
End sub
Sub retrieveValues()
For i = 0 To 6
For j = 0 To 3
'add values to sheet using something like
Range = empsTot([last value],j,i)
Next
Next
End Sub
Public week As Integer
Public empsTot As Variant
Sub update()
week = week + 1
If week > 5 Then
week = 5
End If
Worksheets("Data").Activate
Dim numOfEmp
Let numOfEmp = ThisWorkbook.Sheets("Accessory Sheet").Range("I2")
numOfEmp = numOfEmp
ReDim emps(numOfEmp, 6)
Dim numOfFields
Let numOfFields = 5
ReDim Preserve empsTot(5, numOfEmp, numOfFields)
For i = 0 To numOfEmp
Dim offset As Integer
offset = i + 3
emps(i, 0) = Range("E" & (offset))
emps(i, 1) = Range("F" & (offset))
emps(i, 2) = Range("I" & (offset))
emps(i, 3) = Range("J" & (offset))
emps(i, 4) = Range("K" & (offset))
emps(i, 5) = Range("B" & (offset))
Debug.Print ("^" & emps(i, 5))
Next
Debug.Print ("Week is " & week)
For i = 0 To numOfFields
For j = 0 To numOfEmp
empsTot(1, j, i) = emps(j, i)
Debug.Print (">" & empsTot(1, j, i))
Debug.Print ("i" & CStr(i))
Debug.Print ("j" & CStr(j))
Next
Next
Worksheets("Accessory Sheet").Activate
Dim ColNo
Dim empIndA
empIndA = 0
Dim empIndB
empIndB = 0
For a = 2 To numOfFields + 1
For b = 2 To (numOfEmp + 2)
ColNo = a
CurCol = Split(Cells(, ColNo).Address, "$")(1)
ThisWorkbook.Sheets("Accessory Sheet").Range((CurCol) & CStr(b + 10)).Value = emps(empIndB, empIndA) - ThisWorkbook.Sheets("Accessory Sheet").Range((CurCol) & CStr(b)).Value
empIndB = empIndB + 1
Next
empIndB = 0
empIndA = empIndA + 1
Next
ColNo = 0
For a = 0 To numOfFields
For i = 0 To numOfEmp
ColNo = a + 2
CurCol = Split(Cells(, ColNo).Address, "$")(1)
CurCol = CStr(CurCol)
ThisWorkbook.Sheets("Accessory Sheet").Range((CurCol) & CStr(i + 2)).Value = emps(i, a)
Next
Next
End Sub
Sub retrieveValues()
For i = 0 To 2
For j = 0 To 2
Debug.Print (empsTot(1, 1, 1))
Next
Next
End Sub
公共變量應在所有模塊中可訪問;我預計還會有更多的事情發生。你可以發佈你的實際代碼而不是你的彙總版本嗎? –
如果你聲明一個全局變量,它應該可以在任何模塊中訪問。 http://stackoverflow.com/a/27578082/2867756 –
謝謝你的回覆。好吧,那是個好消息。你能看看我的完整代碼嗎?在原始樣本下面張貼它。 – RWA4ARC