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)'라인 다음에, 당신을 다음 sub로 보낼 때,'n'은 무엇이됩니까? 가치, 또는 아무것도? 함수가 전혀 작동하지 않습니까, 아니면'Chart = [무엇이든]'을 설정하고 있지만 메인 서브에서 인식되지 않는 것은 무엇이든간에? – BruceWayne
아, 이건 단순히 내 실수에 불과하다는 것을 알았습니다. 나는'Chart = array_count (0)'을 간단히'Chart = 0'으로 변경해야하며, 작동한다. 이것은 최고의 디자인 같지 않습니다. 어떤 제안? – cpage
왜 매개 변수로 전달하지 않습니까? 같은 메모에서 왜 글로벌 변수를 매개 변수로 전달합니까? – Comintern