VBA – Excel程序太大

从阅读以前的答案我明白我需要分手我的代码。 我只是需要帮助做到这一点。

我有一个大的select案例程序,大约有50个select。 很棒! 直到我编程的一半“case is =”代码parsing行如果情况是真的。

看来我的variables“Dataline”不能传递给子程序。 如何将Linevariables传递给我的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 

要么按照Alex McMillan的解决scheme(我会这么做),要么你声明Datalinevariables的范围足够宽

至于后面的这个select,如果EHsub()和它的每个调用者都在同一个模块中,那么你应该放置它

 Dim Dataline as Variant 

在它的最顶端

如果EHsub()调用者被传播到不同的模块中,那么你应该放置

 Public Dataline as Variant 

在任何模块的最顶端(不pipe是哪一个模块,但可以select首先初始化Datalinevariables的模块)

你没有将DataLine传递给你的子类,所以它不知道这个variables是存在的。 尝试这样的事情:

 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