2016-04-15 34 views
0

前の回答を読んでから、自分のコードを分割する必要があることを理解しています。私はそれをするのに助けが必要です。VBA - Excelプロシージャが大きすぎる

私は約50の選択肢を持つ大規模なケース選択手順を持っています。よく働く! caseがtrueの場合、行を解析するための "case is ="コードの半分をプログラムするまでは。

私の変数「Dataline」はサブルーチンに渡されないようです。 Sub変数にLine変数を渡すにはどうしたらいいですか?

Open fName For Input As #FileNum 

While Not EOF(FileNum) 
    'read in data one line at a time. 
    Line Input #FileNum, Dataline 

    'Read first three characters of line to determine Line Name 
    LineName = Left(Dataline, 3) 

    'Find line Name them parse 
    Select Case LineName 
     Case Is = "EH "  'Envelope Header 
      EHsub 'Case sub routine (because I need to breakup code) 
    End Select ' End of Select Case 
Wend ' end of While Loop 

Close #FileNum 'close the file 

Sub EHsub() 'if envelope header = "EH " then parse dataline 
    Field01 = Mid(Dataline, 1, 3) 'read 2nd data item 
    ' I get an error here: "DataLine" is null 
    'place date item in data worksheet 
    Sheets("FannieData").Cells(Datarow, DataColumn).Value = Field01 
End Sub 
+0

Um ... 'Sub EHSub(ADataLine)'とそのコードで 'ADataLine'を解析し、' EHLine DataLine'で呼び出しますか? –

+0

解析ルーチンはどれほど似ていますか。つまり、これらのすべてのSubでは何が違うのでしょうか? – Comintern

+0

私はそれを理解しました。あるサブ変数から別のサブ変数に変数を渡すには、変数名を同じにすることはできません。例えば; サブメイン コールEhsub(Dataline) 終了 サブEhsub(Dataline1) '別の名前にする必要があります。 終了 –

答えて

0

あなたは、サブにDataLineを渡していないので、変数が存在することを知りません。

Select Case LineName 
    Case Is = "EH "  'Envelope Header 
     EHsub DataLine 
End Select 

Sub EHsub(DataLine) 'if envelope header = "EH " then parse dataline 
    Field01 = Mid(Dataline, 1, 3) 'read 2nd data item 
    ' I get an error here: "DataLine" is null 
    'place date item in data worksheet 
    Sheets("FannieData").Cells(Datarow, DataColumn).Value = Field01 
End Sub 
1

あなたはアレックス・マクミラン・ソリューションごとに行く(私はそれを行うだろう)か、このためのよう十分に広い範囲

Dataline変数を宣言いずれか:このような何かを試してみてください後者の選択肢はEHsub()で、その発信者のそれぞれが同じモジュールにある場合は、

Dim Dataline as Variant 
それの最上部

EHsub()発信者は、その後、あなたが任意のモジュールの最上部(どんなに1で

Public Dataline as Variant 

を置くと思いますが、それは大丈夫かもしれない別のモジュールに分散させる必要があります最初に初期化するものを選択するにはDataline変数

関連する問題