過去ログ

                                Page     569
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼データの受け渡し  jin 03/1/20(月) 2:12
   ┗Re:データの受け渡し  BOTTA 03/1/20(月) 13:49
      ┗感謝  こう 03/1/20(月) 17:16
         ┗Re:感謝  jin 03/1/20(月) 17:19

 ───────────────────────────────────────
 ■題名 : データの受け渡し
 ■名前 : jin
 ■日付 : 03/1/20(月) 2:12
 -------------------------------------------------------------------------
   いろいろ参考にさせていただいてます。

テキストデータをINPUT #1 D(1),D(2),D(3)
として読み込んだあとファンクションに値を渡してその中でループ処理をして
条件と一致したら値をセルにセットしてまたINPUT...というように
処理しているのですが、ループを抜けてファンクションからでると次のファンクションに移るときに途中まで読み込んだテキストデータの値を次のファンクションに
渡すことができず困っています。
どのようにしたらよろしいでしょうか?
コードは次のようになっていますが。。。
  Do Until EOF(1) 'EOFでない間は
   For retu = 22 To 29 '列カウンターに 1 加える
    Input #1, D(1), D(2), D(3)
   
    If InSfsdata(objSh_No43, 6, 37, "T", retu, D(1), D(2), D(3)) = False Then Exit Sub
    If InSfsdata(objSh_No47, 6, 39, "T", retu, D(1), D(2), D(3)) = False Then Exit Sub
    If InSfsdata(objSh_No53, 6, 37, "T", retu, D(1), D(2), D(3)) = False Then Exit Sub
   Next
  Loop  'Doループする(繰り返す)
  Next
-----------------------------------------------------------------------
Function InSfsdata(ByVal objShNm As Object, _
         ByVal DEF_ROW As Long, _
         ByVal MAX_ROW As Long, _
         ByVal CdCol As String, _
         ByVal AmCol As Integer, _
         ByVal SegCd As String, _
         ByVal sACCTCD As String, _
         ByVal Money As Double) As Boolean
                                
      Dim intRowCnt  As Integer '行カウンタ
      Dim X As String
      Dim Y As String
      Dim A(3) As Variant
     
  
    InSfsdata = False
    
    For intRowCnt = DEF_ROW To MAX_ROW
        X = objShNm.Cells(5, AmCol)
        If SegCd = X Then
          Y = objShNm.Cells(intRowCnt, CdCol)
          If sACCTCD = Y Then
            objShNm.Cells(intRowCnt, AmCol - 17) = Money '読み取ったデータ(金額)をセルにセット
            End If

            Input #1, A(1), A(2), A(3)
            SegCd = A(1)
            sACCTCD = A(2)
            Money = A(3)
            
          End If
        Else
          Exit Function
        End If

    Next  '行カウンタFor..Nextする(繰り返す)
    
    InSfsdata = True
    

End Function
上でファンクションに移るときにA(1)にはいっている値ではなく初めに読み込んだD(1)が次のファンクションにわたされてしまいます
 ───────────────────────────────────────  ■題名 : Re:データの受け渡し  ■名前 : BOTTA  ■日付 : 03/1/20(月) 13:49  -------------------------------------------------------------------------
   jinさん、こんにちは。

単純に、ByVal(値渡し)をByRef(参照渡し)にかえてみては?

ザッとみただけです。的はずれかもしれません。
もちろん、このコードをすべて理解しているわけでもありません。^^;
 ───────────────────────────────────────  ■題名 : 感謝  ■名前 : こう  ■日付 : 03/1/20(月) 17:16  -------------------------------------------------------------------------
   ▼BOTTA さん:
>jinさん、こんにちは。
>
>単純に、ByVal(値渡し)をByRef(参照渡し)にかえてみては?

BOTTAさん、ありがとうございます。
ByRefを使ってファンクション内の値を変数に格納して値の受け渡しを行うことができました。
ByVal自体も覚えたてでよくわからず使っていたもので・・・
 ───────────────────────────────────────  ■題名 : Re:感謝  ■名前 : jin  ■日付 : 03/1/20(月) 17:19  -------------------------------------------------------------------------
   自宅PCではないところからの返信でこのPC所有者の名前で返信してしまいました。
(^^;A
すみません
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 569