VBAでモジュール間でグローバル変数を使用しようとするのが難しいです。VBAでは、1つのモジュールのグローバル変数を編集し、それを別のモジュールで参照する方法は?
私はExcelのシートから値を格納するために使用している2次元配列を持っています。私は最後に格納された値を取り出すための取り消しボタンを作成したいと思います。私が見ているのは、グローバル変数を使用して、1つのモジュールで編集し、別のモジュールで参照しています。
問題は、私は、プログラムによって、あるモジュールから別のモジュールへの変更を引き継ぐことができないと思います。これを容易にするために私ができることはありますか?以下は私が達成したい内容の要約です:
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