2016-04-15 449 views
0

從閱讀以前的答案我明白我需要分解我的代碼。我只需要幫助就可以了。VBA - Excel程序太大

我有一個大的選擇案例程序,大約有50個選擇。非常棒!直到我編寫了一半的「case is =」代碼來解析行,如果情況是真的。

看來我的變量「Dataline」不能傳遞給子程序。如何將Line變量傳遞給我的Sub。

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

解析例程有多類似,即最終會在所有這些Subs中有什麼不同? – Comintern

+0

我已經想通了。要將一個變量從一個變量傳遞給另一個變量,變量名稱不能相同。例如; Sub Main 呼叫Ehsub(Dataline) 結束 Sub 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()呼叫者在不同模塊中傳播,那麼你會放置

Public Dataline as Variant 

在任何模塊的最頂端(無論是哪一個,但它可能被罰款選擇初始化變量Dataline的變量)