2016-07-01 171 views
0

我很難嘗試在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 
+0

公共變量應在所有模塊中可訪問;我預計還會有更多的事情發生。你可以發佈你的實際代碼而不是你的彙總版本嗎? –

+0

如果你聲明一個全局變量,它應該可以在任何模塊中訪問。 http://stackoverflow.com/a/27578082/2867756 –

+0

謝謝你的回覆。好吧,那是個好消息。你能看看我的完整代碼嗎?在原始樣本下面張貼它。 – RWA4ARC

回答

0

我相信這個問題是由Preserve引起的。刪除它並重置模塊似乎已經解決了這個問題,但我不確定它爲什麼會導致此問題。我從來沒有調整過任何東西,但我曾嘗試引用它。

+0

'但我不確定爲什麼它會導致這個問題Tim提要WIlliams在上面的評論中提到了這個問題...... –

+0

謝謝,這就解釋了它。 – RWA4ARC

相關問題