从阅读之前的答案我知道我需要分解我的代码。我只是需要帮助。
我有一个大的Select Case程序,有大约50个选项。效果很好!直到我编程的一半"案例是="如果case为true,则解析该行的代码。
看来我的变量" 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 :(得分:1)
要么你按照Alex McMillan的解决方案(我这样做),要么宣布Dataline
变量具有足够宽的范围
对于后一种选择,如果EHsub()
和每个呼叫者都在同一个模块中那么你应该放置
Dim Dataline as Variant
在它的最顶端
EHsub()
来电者应该分散在不同的模块中,然后放置
Public Dataline as Variant
位于任何模块的最顶层(无论哪一个,但可以选择首先初始化Dataline
变量的那个)
答案 1 :(得分: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