過去ログ

                                Page     145
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼Do Loopについて  こうき 02/9/30(月) 11:07
   ┗Re:Do Loopについて  つん 02/9/30(月) 11:49
      ┗Re:Do Loopについて  こうき 02/9/30(月) 12:47

 ───────────────────────────────────────
 ■題名 : Do Loopについて
 ■名前 : こうき
 ■日付 : 02/9/30(月) 11:07
 -------------------------------------------------------------------------
   こんにちは。
下のようなコードを書いたのですが、Do Loopの中で、ファイルが開いていれば作業を行い、開いていなければ変数(下の場合はj)を1つ増やしてDoに戻るようにするにはどうしたらよいのでしょうか? 

Dim j As Integer
Dim fn As String      
Dim strfn As String 
  fn = Worksheets("sheet2").Cells(j, 1)     
j = 1
 Do
  On Error Resume Next         'なければ次のファイルへ  
   strfn = ""
   strfn = Workbooks(fn).Name
   On Error GoTo 0
  If strfn = "" Then
  
  Else 

  (作業するコード)
  
  End If
   j = j + 1
  Loop While Worksheets("sheet2").Cells(j, 1) <> ""
 ───────────────────────────────────────  ■題名 : Re:Do Loopについて  ■名前 : つん <honey@sweetparty.ne.jp>  ■日付 : 02/9/30(月) 11:49  -------------------------------------------------------------------------
   こうき さん、こんにちは

>Dim j As Integer
>Dim fn As String      
>Dim strfn As String
 
  ↓この部分は、ループの中に入れないとダメなんじゃないでしょうか?
   でないと、いつまでも、Cell(1,1)の値しかfnに入らないことになります。
>  fn = Worksheets("sheet2").Cells(j, 1)

  ↓これは、↑より上でないとダメで、なおかつループの外     
>j = 1
> Do
>  On Error Resume Next 'なければ次のファイルへ  
>   strfn = ""
>   strfn = Workbooks(fn).Name
>   On Error GoTo 0
   ここで、strfnに値が入ってるときだけ記述すればいいと思います。
  If strfn <> "" Then
     ’(作業するコード)
  End If
>   j = j + 1
>  Loop While Worksheets("sheet2").Cells(j, 1) <> ""

こんな感じでどうでしょうか?
 ───────────────────────────────────────  ■題名 : Re:Do Loopについて  ■名前 : こうき  ■日付 : 02/9/30(月) 12:47  -------------------------------------------------------------------------
   つん さん、こんにちは
  ↓この部分は、ループの中に入れないとダメなんじゃないでしょうか?
   でないと、いつまでも、Cell(1,1)の値しかfnに入らないことになります。
   fn = Worksheets("sheet2").Cells(j, 1)

確かにそうですね。ぜんぜん気づきませんでした。ありがたい指摘です。

  ↓これは、↑より上でないとダメで、なおかつループの外     
j = 1
 Do
  On Error Resume Next 'なければ次のファイルへ  
   strfn = ""
   strfn = Workbooks(fn).Name
   On Error GoTo 0
   ここで、strfnに値が入ってるときだけ記述すればいいと思います。
  If strfn <> "" Then
     ’(作業するコード)
  End If
   j = j + 1
  Loop While Worksheets("sheet2").Cells(j, 1) <> ""

こんな感じでどうでしょうか?

うまくいきました。ありがとうございます。
また質問することがあると思うので、これからもよろしくお願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 145