0
私はExcel VBAで作業しています。異なる配列を保持するためにグローバル配列を使用しようとしています。異なるサブシステムと関数は、グローバル配列array_count
にアクセスできますが、私の目標は、配列の値を編集する関数Chart
を持つことです。現在、配列の関数の編集は、他のサブシステムに継承されません。私が正しく理解場合VBAで関数を編集できるグローバル配列
' Initialize variables
Private counter As Integer
Private Account As String
Public array_count As Variant
' Iterate over rows, reading Account
Sub RowInsert()
array_count = Array(-1, -1, -1)
Debug.Print array_count(0)
Debug.Print array_count(1)
Debug.Print array_count(2)
For counter = 0 To 1
Account = Worksheets("Journal").Cells(counter + 2, 2)
Call Record(Account)
Next counter
End Sub
' Record the transaction in proper T-account
Sub Record(Account As String)
Dim target_row As Long
With Worksheets("Ledger").Range("a1:c20")
Set Header = .Find(Account)
Debug.Print Account
If Header Is Nothing Then
Debug.Print "Not found."
End If
Dim n As Integer
n = Chart(Account)
Debug.Print n
target_row = Header.row + 2 + array_count(n)
Debug.Print target_row
Rows(target_row).Insert Shift:=xlDown
Cells(target_row - 1, 1) = Worksheets("Journal").Cells(counter + 2, 1).Value
Debug.Print counter
If IsEmpty(Worksheets("Journal").Cells(counter + 2, 3)) Then
Cells(target_row - 1, 3) = Worksheets("Journal").Cells(counter + 2, 4).Value
Else
Cells(target_row - 1, 2) = Worksheets("Journal").Cells(counter + 2, 3).Value
End If
End With
End Sub
' Count the number of entries in each T-account
Function Chart(Account As String) As Integer
If Account = "Cash" Then
array_count(0) = array_count(0) + 1
Chart = array_count(0)
ElseIf Account = "Equipment" Then
array_count(1) = array_count(1) + 1
Chart = array_count(1)
Debug.Print array_count(1)
End If
End Function
'n = Chart(Account)'の行の後に、あなたを次のサブに送るとき、 'n'はどうなるでしょうか?値ですか、何もありませんか?関数は全く機能しているのか、それとも 'Chart = [whatever]'を設定していますが、メインサブでは認識されていません。 – BruceWayne
ああ、私はこれが単に自分の論理的なミスであることを認識しています。私は 'Chart = array_count(0)'を単に 'Chart = 0'に変更する必要があります。これは最高のデザインではないようです。助言がありますか? – cpage
なぜパラメータとして渡すだけではないのですか?同じメモで、なぜグローバル変数をパラメータとして渡すのですか? – Comintern