【问题标题】:Passing String to another sub routine [duplicate]将字符串传递给另一个子例程[重复]
【发布时间】:2017-01-12 04:46:42
【问题描述】:

我正在尝试练习嵌入我的代码。我创建了一个名为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

【问题讨论】:

    标签: vba excel


    【解决方案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 中设置的变量数量来看,我认为您会希望使用模块级作用域变量方法。

    【讨论】:

      【解决方案2】:

      这两个子例程的范围不同。定义 JrnlHeader 的变量在 PrintToTextFile 中不可用。如果您希望标题在 PrintToTextFile 中可用,请将其更改为 PrintToTextFile(header as string) 并从 JrnlHeader 调用 PrintToTextFile(header)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2016-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        相关资源
        最近更新 更多