• ベストアンサー

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日(月)になってしまいますことを、予めお断りしお詫びしておきます。

noname#61366
noname#61366

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

'こんな感じでどうでしょう 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)
回答No.3

#1です。 >開きたいファイルが2つあるのですが... >Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか? 開くファイルが二つなのはわかってますが、 提示したコードはあくまでこんな感じでどうですか? という参考程度のもので、そのまま使って下さいというものでは有りませんでした。 質問内容からある程度VBAも知ってらっしゃるようなので、提示したコードを応用して後はご自分で何とかできるかと判断しましたが、不親切だったでしょうか? 申し訳ありません。 既に、#2の回答者さんが二つのファイルに対応したコードを出して下さっているので、今さら私がコードを提示する必要はありませんね。 失礼しました。

noname#61366
質問者

補足

再度のご回答ありがとうございます。 アレンジできればと思って読んだのですが、それでも発想できませんでした(--;) その程度の知識・発想力しかないので、 >Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか? と質問させていただきました。 不快な思いされたようで、申し訳ございませんでした。

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 ブックをオブジェクト変数に格納し、 その変数が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

noname#61366
質問者

補足

早速のご返事ありがとうございます。 開きたいファイルが2つあるのですが... Nothing が条件だと1つだけ開いている場合、その1つは「2重に開く」になってしまいませんか?

関連するQ&A

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • もしも新規Excelファイルを開いてる場合は閉じる

    Excel2003です・ ユーザーが新規Excelファイル(book1)かテスト用ファイルを開いている場合は閉じる処理を考えております。 Option Explicit Dim ws As Workbook, flag As Boolean Private Sub Workbook_Open() For Each ws In Workbooks If ws.Name = "Book1" Then flag = True Next ws If flag = True Then Workbooks("Book1.xls").Close   Else   End IF For Each ws In Workbooks If ws.Name = "テスト用.xls" Then flag = True Next ws If flag = True Then Workbooks("テスト用.xls").Close   Else   End IF End Sub このコードだとBook1を開いているのに、Trueで拾ってくれません。 ws.Name = "Book1.xls"にしても同じです。 どこかおかしい部分があるのでしょうか?

  • エクセル VBA 読み取り専用になっているファイルを開く場合

    エクセルVBAを取り組んでいるのですが、 "A"のファイルでマクロを作動させて、"B"のファイルを開くマクロを組んでいます。 その時に誰かが"B"のファイルを開いていた場合強制的に読み取り専用で開いてしまいます。 読み取り専用で開こうとした場合には、マクロを停止させるようにしたいのですが、どういう形にしたら良いでしょうか? ちなみに"B"ファイルを開いているマクロを下に乗せておきますので、変更しなければならない等がありましたら、教えていただけますと幸いです。 For Each wb In Workbooks If InStr(wb.Name, "B") > 0 Then flag = True Next wb If flag = True Then Else Workbooks.Open Filename:="Z:\B.xls" End If

  • エクセル2000VBAで質問です。

    デスクトップ上に「T」というフォルダがあり、そこに「x05.txt」という カンマ区切りファイルがあるのですが、 そのファイルの内容を デスクトップ上の実績フォルダ内の「book1.xls」sheet1に、 カンマ区切りで貼り付けていく処理をしたいのです。 「x05.txt」の05は、作成した日付が?月5日という意味です。 貼り付けも、上書きではなくA1に1日のデータ、その続きの行の1列目に2日目のデータを貼り付ける という風にしたいのですが・・・さっぱりです。 OSは、WindowsXPです。 どうか、よろしくお願いいたします。 以下、作っている途中のプログラムです。 * 変数の宣言を抜いております。 Sub データ結合() SYSBASE = ActiveWorkbook.Name res = MsgBox("累積処理を開始します。", vbOKCancel) If res = vbCancel Then Exit Sub End If Workbooks(SYSBASE).Sheets("累積データ").Activate Cells.Delete For h = 1 To 31 メインパス名 = ActiveWorkbook.Path 日付パス名 = Right("00" + Mid(Str(h), 2), 2) On Error GoTo オープンエラー ChDir メインパス名 + "\" + 日付パス名 On Error GoTo 0 If ermsg = 1 Then ermsg = 0 Else ermsg = 0 For i = 1 To 10 ファイル名 = "T-LOG1_" + Right("00" + Mid(Str(i), 2), 2) On Error GoTo オープンエラー Workbooks.Open Filename:=メインパス名 + "\" + 日付パス名 + "\" + "個別" + _ "\" + ファイル名 + ".txt" On Error GoTo 0 If ermsg = 1 Then ermsg = 0 Exit For End If Workbooks(SYSBASE).Sheets("累積データ").Activate datarec = Range("A1").CurrentRegion.Rows.Count If datarec = 1 And Cells(1, 1) = "" Then Workbooks(ファイル名 + ".txt").Activate Range(Cells(1, 1), Cells(1, 20)).Copy Workbooks(SYSBASE).Sheets("累積データ").Activate Cells(1, 1).Select ActiveSheet.Paste End If Workbooks(ファイル名 + ".txt").Activate D_datarec = Range("A1").CurrentRegion.Rows.Count If D_datarec <= 1 Then ActiveWorkbook.Close savechanges:=False Else Range(Cells(2, 1), Cells(D_datarec, 20)).Copy Workbooks(SYSBASE).Sheets("累積データ").Activate datarec = Range("A1").CurrentRegion.Rows.Count Cells(datarec + 1, 1).Select ActiveSheet.Paste Workbooks(ファイル名 + ".txt").Activate Application.DisplayAlerts = False ActiveWorkbook.Close savechanges:=False Application.DisplayAlerts = True End If Next i End If Next h Exit Sub オープンエラー: ermsg = 1 Resume Next End Sub

  • Excel 2007 Windows7での不具合

    下記のExcel 2007 VBAマクロを Windows XP で組んでいましたが、 Windows 7 に乗り換えたとたん、強制終了してしまいます。 Workbooks.Openのアドレスは、Windows 7用に書き換えました。 何方かご教授願います。   Private Sub CommandButton63_Click()   Application.ScreenUpdating = False   Dim wb As Workbook   wbn1 = ActiveWorkbook.Name   For Each wb In Workbooks   If wb.Name = wbn1 Then   Workbooks.Open "D:\ユーザー\PC18\Documents\※※※※\※※※※.xls"   ActiveWindow.WindowState = xlMaximized    Workbooks(wbn1).Save   Application.DisplayAlerts = False   Workbooks(wbn1).Close   Else: Application.ScreenUpdating = False   End If   Next   Application.ScreenUpdating = True   End Sub

  • Excel2007VBAファイルの表示について

    ●質問の主旨 開いたダイアロボックス内のファイルについてエクセルファイル(.xlsxのみ)を 対象としたいと考えています。 下記コードをどのように書き換えればよいでしょうか? ご存知の方ご教示願います。私はVBA初心者です ●質問の補足 作成した下記のコードでは 「実行時エラー1004:GetOpenFilenameメソッドに失敗しました」 と表示されます。 参考書2冊読んで全くその通りに引用していて、なぜエラー表示に なるのかよく分かりません。 またTarget = Application.GetOpenFilename("Excelブック,*,xlsx")を Target = Application.GetOpenFilename()にするとダイアロボックスは 表示され、その中にあるエクセルファイルは表示されます。 ●コード Sub Sample3() Dim Target As String Target = Application.GetOpenFilename("Excelブック,*,xlsx") If Target <> "False" Then Workbooks.Open Target Else MsgBox "キャンセルされました" End If End Sub

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • フォルダ内の全てのファイル開く時間短縮の方法

    Excelのマクロを使ってフォルダ内の全てのファイルを開く以下のコードを利用しているのですが(教えてgoo!で教えて頂いたコードです)、ファイル数が10個くらいあるため全部開くのに1分くらいかかってしまいます。 もっと時間を短縮することはできませんでしょうか? Sub OpenAllBook()   Dim FileName As String   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean   ChDir ("フォルダ名")   FileName = Dir("*.xls")   Do While FileName <> ""    If FileName <> ThisWorkbook.Name Then     IsBookOpen = False     For Each OpenedBook In Workbooks      If OpenedBook.Name = FileName Then       IsBookOpen = True       Exit For      End If     Next     If IsBookOpen = False Then      Workbooks.Open (FileName)     End If    End If    FileName = Dir()   Loop End Sub

  • エクセルVBA 日付つきバックアップファイル

    下記のような連番でバックアップファイルを作成するマクロを書きました。バックアップファイルの最上部に行を挿入し、そこにバックアップファイルの作成日とオリジナルのFullName(フルパス)を記したいのですがうまくいきません。 .Range("a1") = "保存時刻 : " & Format(Now, "yyyy年mm月dd日hh時nn分") .Range("a2") = "オリジナル : " & ActiveWorkbook.FullName ↑のような感じの情報を加えたいのです。 どなたか、下記のマクロにフルパスと作成日を付与し、マクロ実行後も作業中のブックをアクティブのままにして置く方法をおしえてください。 Sub MySave2() Dim FSO As New Scripting.FileSystemObject バックアップファイル名 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & ActiveWorkbook.Name If FSO.FileExists(バックアップファイル名) = False Then ActiveWorkbook.SaveCopyAs バックアップファイル名 Else Dim indn As Variant For indn = 2 To 1000 新 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & "-" & indn & ActiveWorkbook.Name If FSO.FileExists(新) = False Then ActiveWorkbook.SaveCopyAs 新 Exit For Else End If Next indn End If End Sub

  • Excel2007 VBA Copyメッソド

    Excel2003で開発されたVBAをExcel2007で動くように修正しているのですが、 次のコードがExcel2007ではエラーになります。  (1)Workbooks.Open Filename:=pthFolder & "\" & nmFile  (2)nmSheet = Workbooks(nmFile).ActiveSheet.Name  (3)Workbooks(WB_Name).Worksheets(S_MAIN).Copy After:=Workbooks(nmFile).Sheets(nmSheet) (1)と(2)は実行されますが、(3)がエラーになり、(4)に飛びます。 (4) SaveError:      MsgBox "エラー発生"      Application.DisplayAlerts = False      Workbooks(nmFile).Close    End Sub どなたか、Excel2007でエラーになる理由と解決策を教えていただけないでしょうか。 既に同じ質問が出ているかもしれませんが、VBA初心者なもので、うまく探せませんので、 ご協力をお願いいたします。

専門家に質問してみよう