2016-10-19 24 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)'の行の後に、あなたを次のサブに送るとき、 'n'はどうなるでしょうか?値ですか、何もありませんか?関数は全く機能しているのか、それとも 'Chart = [whatever]'を設定していますが、メインサブでは認識されていません。 – 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)。私は正しい?

関連する問題