2017-01-11 16 views
0

私は自分のコードを組み込むことを練習しようとしています。別のサブルーチンで使用する変数を宣言するために、JrnlHeaderというサブルーチンを作成しました。私は現在、Headerという名前の1つの変数のみを扱っています。私はなぜ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

2つのサブルーチンは異なるスコープを持ちます。定義された変数JrnlHeaderは、PrintToTextFileでは使用できません。 PrintToTextFileでヘッダーを使用できるようにするには、PrintToTextFile(ヘッダーは文字列)に変更し、JrnlHeaderからPrintToTextFile(ヘッダー)を呼び出します。

1

HeaderJrnlHeaderのローカル変数と定義しました。これは、そのスコープが他のサブルーチン/関数にまで及ばないことを意味します。

Dim Header As Stringステートメントをコードモジュール内の最初のサブルーチン/関数の前に置くことによって、変数のスコープを「モジュール」レベルに定義できます。実行がPrintToTextFileで再開すると、その値が使用可能になります。


また、あなたは2つの関数のパラメータとして変数を渡すようにコードを変更することができます:によって判断、

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に設定されているどのように多くの変数、私はあなたを考えますモジュールレベルのスコープ付き変数アプローチを使用したいと考えています。

関連する問題