電子書籍の厳選無料作品が豊富!

1列のセルそれぞれに同フォルダのファイル名が入力されていて(ファイル数は変化する)それを、一度に開くか、もしくは1つずつ開いていくかの構文で悩んでいます。ファイル数が特定されていないので、Do Untilでカウンタ変数をたててしているのですが、1つ目のファイルは開くのですが、後のファイルがエラーになってしまいます。
説明がうまくできていないかもしれませんが、もしわかりましたら、是非教えてください。

A 回答 (2件)

>1つ目のファイルは開くのですが、後のファイルがエラーになってしまいます。


>・・・もしわかりましたら、是非教えてください。
エラー原因なら・・・内容がわからないので、分からないとしかいいようがありませんが・・・

質問にあるような状態で、不特定の複数Bookを開くようにコードを書いてみました。参考にして下さい。
下のコードは、A1にフォルダ名がセットされていて、B列にB1から不特定数(>0)のファイル名が連続にセットされている例です。ファイルが存在しない場合などのエラー処理は省略しています


Sub xlsFilesOpen()
  Dim myFolder As String '共通のフォルダ名
  Dim rw As Long '行カウンタ
  Dim ThisBookname As String 'このブック名

  ThisBookname = ThisWorkbook.Name
  myFolder = Range("A1")
    If Right(myFolder, 1) <> "\" Then myFolder = myFolder & "\"

  With Range("B1")
    'ファイル名が登録されていれば開く
    While .Offset(rw, 0) <> ""
      'Bookを開く
      Workbooks.Open myFolder & .Offset(rw, 0)

      '次のセル(B列の次の行になる)
      rw = rw + 1
    Wend
  End With
  '最初のBookを表示しているだけです
  Workbooks(ThisBookname).Activate
End Sub
    • good
    • 0
この回答へのお礼

できました!!
while~Wend 本で探せませんでした。
これからも活用できそうです。
ありがとうございました。ほんとに勉強になりました。
ここでちょっと質問なのですが、Ifに対してもEnd Ifがなくてなぜエラーがでないのでしょうか?

お礼日時:2002/09/14 23:05

>ここでちょっと質問なのですが、


>Ifに対してもEnd Ifがなくてなぜエラーがでないのでしょうか?
If~Then~Else ステートメントの書き方については、VBAのヘルプを見ると、

『条件が真 (True) の場合のステートメントの実行
  条件が真 (True) の場合に 1 つのステートメントだけを実行するときは、
  If...Then...Else ステートメントの1行の構文を使います。
  次の例は、キーワードElseを省略した1行の構文を示しています。

   Sub FixDate()
     myDate = #95/2/13#
     If myDate < Now Then myDate = Now
   End Sub                 』

とあります。

条件が成立した時、1つのことだけを行う場合にこう書けます。

X = a: If y < 0 Then x = b
のような使い方をして行が長くならないようにしています。癖かもしれません。


>while~Wend 本で探せませんでした。
>これからも活用できそうです。
while~Wendは少し古い書き方かもしれません。
Do~Loopでも当然できます。こちらをマスターしたほうがいいかもしれません。
個人的にはwhile~Wendの方がなれているのでこちらを使うことが多いです。

Do~Loop についても、Help等でみて下さい。


Do~Loop例:B1~B3に何か入力しておいて実行してみて下さい。最初の回答と同じような意味合いです。

Sub DoLoopTest()
  Dim rw As Long

  With Range("B1")
    Do Until .Offset(rw, 0) = ""
      MsgBox "セル" & .Offset(rw, 0).Address & "の値は" & .Offset(rw, 0)

      rw = rw + 1
    Loop
  End With
  MsgBox "おしまい"
End Sub
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
仕事で初めてVBAをやり出し、聞く人もいなく本だけを見て作っているので、
これが本当に正しいのか?など不安になる事が多く、今回質問をして、
回答頂き、とても嬉しく思っています。

お礼日時:2002/09/15 23:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!