- ベストアンサー
VBA for Excel でファイルを条件付きで開く
VBA for Excel で、開いているか開いていないか判らないファイルを開きたいと思い(ファイルは2つ、名前はGRT と GTATNO という変数に入っている)、下記のように書いてみましたが、Excel2000 ではエラーが起きるようです。 Sub ファイルを開く Dim hbook As Workbook AP = ActiveWorkbook.Path 'ファイルが開いていたら何もしない For Each hbook In Workbooks If hbook.Name <> GRT Then Workbooks.Open (AP & "\" & GRT) End If If hbook.Name <> GTANTO Then Workbooks.Open (AP & "\" & GTANTO) End If Next End Sub 原因は、そのときゲットした開いているファイル名(hbook.Name)がたまたま一致しないときにファイルを開こうとしてしまう、ということは判りました。 こうなると「2重に開こうとしている。開いて良いか?」のメッセージが表示され、それにNoと答えるとマクロがエラーを表示し、利用者は困ってしまうのですが、 どうしたらうまく動くマクロになるのかがわからず、悩んでいます。 ほとんど「組んでちょーだい」状態ですが、よろしくお願いいたしますm(_ _)m また職場でネットしているため、解答いただいた時間によってはお礼が8日(月)になってしまいますことを、予めお断りしお詫びしておきます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
'こんな感じでどうでしょう Sub ファイルを開く() Dim hbook As Workbook Dim file As String AP = ActiveWorkbook.Path On Error GoTo FILEOPEN file = GRT '開くファイル名 Set hbook = Workbooks(file) ' ワークブックに含まれていないとエラーになる file = GTATNO Set hbook = Workbooks(file) Exit Sub FILEOPEN: Workbooks.Open (AP & "\" & file) 'エラーになったファイルを開く Resume Next '次の行から実行 End Sub
その他の回答 (2)
- masa_019
- ベストアンサー率61% (121/197)
#1です。 >開きたいファイルが2つあるのですが... >Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか? 開くファイルが二つなのはわかってますが、 提示したコードはあくまでこんな感じでどうですか? という参考程度のもので、そのまま使って下さいというものでは有りませんでした。 質問内容からある程度VBAも知ってらっしゃるようなので、提示したコードを応用して後はご自分で何とかできるかと判断しましたが、不親切だったでしょうか? 申し訳ありません。 既に、#2の回答者さんが二つのファイルに対応したコードを出して下さっているので、今さら私がコードを提示する必要はありませんね。 失礼しました。
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 ブックをオブジェクト変数に格納し、 その変数がNothingだったら 開く処理をするというのはどうでしょう。 Sub ファイルを開く() On Error Resume Next Dim hbook As Workbook AP = ActiveWorkbook.Path Set hbook = Workbooks(GRT) If hbook Is Nothing Then Workbooks.Open (AP & "\" & GRT) End If End Sub
補足
早速のご返事ありがとうございます。 開きたいファイルが2つあるのですが... Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか?
補足
再度のご回答ありがとうございます。 アレンジできればと思って読んだのですが、それでも発想できませんでした(--;) その程度の知識・発想力しかないので、 >Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか? と質問させていただきました。 不快な思いされたようで、申し訳ございませんでした。