2017-01-11 4 views
0

Ich versuche zu üben, meinen Code einzubetten. Ich habe eine Subroutine namens JrnlHeader erstellt, um Variablen zu deklarieren, die ich in einer anderen Subroutine verwenden werde. Ich beschäftige mich zur Zeit nur mit einer Variablen namens Header. Ich würde gerne wissen, warum Header in Subroutine PrintToTextFile leer ist und wie ich es beheben kann, um in JrnlHeader deklarierte Zeichenfolgen zu verwenden.String an eine andere Unterroutine übergeben

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 

Antwort

0

Die beiden Subroutinen haben einen unterschiedlichen Umfang. Definierte Variablen JrnlHeader sind in PrintToTextFile nicht verfügbar. Wenn Sie möchten, dass der Header in PrintToTextFile verfügbar ist, ändern Sie ihn in PrintToTextFile (header as string) und rufen Sie PrintToTextFile (header) von JrnlHeader auf.

1

Sie haben Header als lokale Variable in JrnlHeader definiert. Dies bedeutet, dass sich der Geltungsbereich nicht auf andere Unterprogramme/Funktionen erstreckt.

Sie können den Gültigkeitsbereich der Variablen als "Modul" -Ebene definieren, indem Sie die Anweisung Dim Header As String vor dem ersten Unterprogramm/der ersten Funktion im Codemodul platzieren. Dann wird der Wert verfügbar sein, wenn die Ausführung in PrintToTextFile fortgesetzt wird.


Alternativ können Sie Ihren Code ändern, um die Variable als Parameter zwischen den beiden Funktionen zu übergeben:

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 

Aber urteilen, wie viele Variablen in JrnlHeader sind im Aufbau, ich glaube, Sie möchte mit der Verwendung eines Modulebene-Scoped-Variablen-Ansatzes gehen.

Verwandte Themen