2017-01-11 40 views
0

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

回答

0

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

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,我想你将希望使用模块级范围变量方法。

相关问题