2016-10-19 3 views
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 
+0

'n = Chart (Account)'라인 다음에, 당신을 다음 sub로 보낼 때,'n'은 무엇이됩니까? 가치, 또는 아무것도? 함수가 전혀 작동하지 않습니까, 아니면'Chart = [무엇이든]'을 설정하고 있지만 메인 서브에서 인식되지 않는 것은 무엇이든간에? – BruceWayne

+0

아, 이건 단순히 내 실수에 불과하다는 것을 알았습니다. 나는'Chart = array_count (0)'을 간단히'Chart = 0'으로 변경해야하며, 작동한다. 이것은 최고의 디자인 같지 않습니다. 어떤 제안? – cpage

+0

왜 매개 변수로 전달하지 않습니까? 같은 메모에서 왜 글로벌 변수를 매개 변수로 전달합니까? – Comintern

답변

0

, 문제는 RowInsert를 실행할 때마다 (당신이 거기 debug.prints을 왜 나는 가정, 즉)()는 항상 array_count의 같은 값을 (0) 얻을 수 있다는 것입니다. 라인에

그 이유는, 그 : 당신이 때마다 배열을 재개 한있다

array_count = Array(-1, -1, -1) 

(이처럼 보이게 -1, -1, -1). 내가 맞습니까?