VBA - Excel程序太大

时间:2016-04-15 03:14:00

标签: excel vba procedure

从阅读之前的答案我知道我需要分解我的代码。我只是需要帮助。

我有一个大的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

2 个答案:

答案 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