将String传递给另一个子例程

时间:2017-01-11 20:18:13

标签: vba excel-vba excel

我正在尝试嵌入我的代码。我创建了一个名为JrnlHeader的子程序来声明我将在另一个子程序中使用的变量。我目前只关注一个名为Header的变量。我想知道为什么Header在子例程PrintToTextFile中是空的,以及如何修复它以便能够使用在JrnlHeader中声明的字符串。

Private Sub JrnlHeader()
    Dim Header As String
    Dim SeqNo As String
    Dim SeqVar As String
    Dim Bu As String
    Dim BuVar As String
    Dim JrnlID As String
    Dim JrnlIDVar As String
    Dim JrnlDate As String
    Dim JrnlDateVar As String
    Dim Descr As String
    Dim DescrVar As String
    Dim Ledger As String
    Dim LedgerVar As String
    Dim Source As String
    Dim SourceVar As String
    Dim CurEff As String
    Dim Reverse As String
    Dim AutoLn As String
    Dim AdjEnt As String

    Header = "<JRNL_HDR_IMP>"
    SeqNo = "<SEQNO>" & SeqVar & "</SEQNO>"
    Bu = "<BUSINESS_UNIT>" & BuVar & "</BUSINESS_UNIT>"
    JrnlID = "<JOURNAL_ID>" & JrnlIDVar & "</JOURNAL_ID>"
    JrnlDate = "<JOURNAL_DATE>" & JrnlDateVar & "</JOURNAL_DATE>"
    Descr = "<DESCR254>" & DescrVar & "</DESCR254>"
    Ledger = "<LEDGER_GROUP>" & LedgerVar & "</LEDGER_GROUP>"
    Source = "<SOURCE>" & SourceVar & "</SOURCE>"
    CurEff = "<CUR_EFFDT>" & JrnlDateVar & "</CUR_EFFDT>"
    Reverse = "<REVERSAL_CD>N</REVERSAL_CD>"
    AutoLn = "<AUTO_GEN_LINES>N</AUTO_GEN_LINES>"
    AdjEnt = "<ADJUSTING_ENTRY>N</ADJUSTING_ENTRY>"
End Sub

Sub PrintToTextFile()
    Dim FileNum As Integer

    JrnlHeader

    FileNum = FreeFile ' next free filenumber

    'Open "C:\Temp\TEXTFILE.TXT" For Output As #FileNum ' creates the new file
    Open "C:\temp\TEXTFILE.TXT" For Append As #FileNum
    Print #FileNum, Header
    Close #FileNum ' close the file
End Sub

2 个答案:

答案 0 :(得分:1)

您已将Header定义为JrnlHeader中的本地变量。这意味着它的范围不会扩展到其他子例程/函数。

通过将Dim Header As String语句放在代码模块中的第一个子例程/函数之前,可以将变量的范围定义为“模块”级别。然后,当PrintToTextFile中的执行恢复时,其值将可用。

或者,您可以更改代码以将变量作为两个函数之间的参数传递:

Sub PrintToTextFile()

    Dim Header As String
    '...
    JnrlHeader Header
    '...
    Print #FileNum, Header
End Sub

Sub JrnlHeader(Header As String)
    '...  (but don't include any declaration of Header!)
    Header = "<JRNL_HDR_IMP>"
    '...
End Sub

但是,根据JrnlHeader中设置了多少变量来判断,我认为你会想要使用模块级范围变量方法。

答案 1 :(得分:0)

这两个子程序的范围不同。定义的变量JrnlHeader在PrintToTextFile中不可用。如果要在PrintToTextFile中使用标题,请将其更改为PrintToTextFile(标题为字符串),并从JrnlHeader调用PrintToTextFile(标题)。

相关问题