• ベストアンサー
  • 暇なときにでも

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

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数186
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.1

こんにちは。 どう動かないのでしょうか? Dir の行のコメントを外してみましたが、私のところではきちんと動きますよ。 もうちょっと詳しく教えてください。 ------------------------------------------ あと、問題の本質ではないですが気になる点として・・・ 開こうと思っているデータファイルと VBA コードが書いてあるこのファイルとは同じフォルダに置いてあるんですか? 置いてあるなら「ActiveWorkbook.Path」は「ThisWorkbook.Path」の方が安全ですよ。 ActiveWorkbook というのは「その瞬間にアクティブなブック」ですので、VBA が書いてあるブック以外のブックがアクティブなケースも発生する可能性があります。 ThisWorkbook はまさに「このブック」ということなので、どんな状況でも ThisWorkbook は VBA コードが書いてあるブックを指します。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

有難うございます コメントになっていました。 はずしたら動きました。 どうも有難うございます。

関連するQ&A

  • vba で全てのエクセルファイルを開く処理

    お世話になります。 下記のVBAソースで、特定のフォルダにあるエクセルを全て 開く処理をしているのですが、スマートに行えているか 疑問に思いました。 具体的には、「'''''''''時間がかかっている??」箇所で 無駄なこと・時間がかかっていないか疑問です。 目的としては、「vba で全てのエクセルファイルを開く処理」ですので、 (1)皆さんがされている「vba で全てのエクセルファイルを開く処理」 (2)下記ソースの「'''''''''時間がかかっている??」は時間がかかっていないか の、どちらかで、結構ですのでご返事頂ければ有り難いです。 宜しくお願いします。 ------------ソース----------------- ChDir (ThisWorkbook.Path & "\" & フォルダ) 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

  • VBAによるカレントフォルダのファイルを検索し開く

    カレントフォルダ内にファイル(コ―ド.xls)を見つけ開き、無ければMSG表示したい。 どのように、したらいいですか? 考えているのは、 Application.DefaultFilePath = ThisWorkbook.Path If ??? Then Workbooks.Open "コード.xls" else msgbox (ThisWorkbook.Path & "にコード.xlsを置いて下さい。") Exit sub end If です。 この???の部分を教えて頂きたいと思います。 よろしくお願いします。

  • VBA フォルダ内の複数Excelファイルを開く

    お世話になります。 XP エクセル2003使用です。 フォルダー内にある複数のすべてのエクセルを開くコードを 下記の解答をそのままコピーして実行しました。 (以下、このエクセルファイルを「実行ファイル.xls」と呼びます) http://okwave.jp/qa/q2598781.html (コードは最後尾に転記(※)) 問題点は、実行ファイル.xlsから実行した 開きたいエクセルファイルは、 Workbook_Open()で自動実行して、 最後に、ThisWorkbook.Closeで閉じるので、 マクロの実行がループの途中(1回目)で 実行ファイル.xls のコードの実行も終了してしますことです。 (実行ファイル.xls のファイルは開いたままです) つまり、ThisWorkbook.Closeでエクセルを閉じたときに マクロの実行までもが終わってしまうので、 実行ファイル.xlsに戻ってきません。 この問題を解決するための方法として 下記2点を調べましたが、力不足で自己解決できません。 --------------------- 1  実行ファイル.xls から開きたいエクセルファイルを開く時に 何かしらの命令文または引数を記述しておく。  → 解決のヒントを見つけることができませんでした。 --------------------- 2 実行ファイルをエクセルではなく、VBS(VBScript)で記述する。 この場合、参考にしたコードを、 VBS用に書き換えれば良いと思いますが、 VBSは記述したことがないので、さっぱりです。 方法として間違っていなければ、 できれば、どなた様か当該コードを VBS用で記述いただけませんでしょうか? --------------------- 一番良い方法が分からないので、 お力添えいただきたいのです。 よろしくお願いします。 --------------------- (※)参考コード --------------------- Sub OpenAllBooks()   Dim FileName As String   Dim OpenedBook As Workbook   Dim IsBookOpen As Boolean      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

その他の回答 (1)

  • 回答No.2

とりあえず、VBAのヘルプにあるFilesコレクションの記述(使用例)を参照してみては。 指定したフォルダ内のファイル名を取り出す方法が記載されています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

有難うございます 参考にさせていただきます。

関連するQ&A

  • EXCELVBAでONEDRIVE上への保管方法 

    EXCEL ファイルの VBAで、 OneDrive上の ファイルを コピーして XLSX および XLS旧フォーマット 両方の 保存形式で ファイルを 保管しようとしています。 WINDOWS8.1 EXCEL2013 を 使用しています。 ONEDRIVE上へ、コピー作成する同名ファイルがなく、 新規のファイルを コピー作成する場合は 『Microsoft Excelは動作を停止しました。』 というエラーが (ファイルをコピー作成していますが)、 出てしまいます。 上書きする場合は エラー がでない模様です。 ' Sub 旧EXCEL形式保管() ' Application.DisplayAlerts = False ' Dim PathName, FileName1, FileName2, FileName3 As String ' PathName = ActiveWorkbook.Path FileName1 = "テスト.xlsx" FileName2 = "テストCOPY旧.xls" FileName3 = "テストCOPY新.xlsx" ' Workbooks.Open Trim(PathName) & "\" & Trim(FileName1) Windows(Trim(FileName1)).Activate ' ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName3) ActiveWorkbook.Close ' Workbooks.Open Trim(PathName) & "\" & Trim(FileName1) Windows(Trim(FileName1)).Activate ' If Application.Version < 12 Then ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName2), FileFormat:=xlExcel9795 Else ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName2), FileFormat:=xlExcel8 End If ' ActiveWorkbook.Close ' End Sub ' より効率的な VBA記述、 エラーへの対処方法 を 教えていただけないでしょうか? よろしく お願いします。

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • Excel VBA の ChangeFileAccess

    Excel(2000 SP-3) VBAの ChangeFileAccessがうまく行きません。 VBAからあるExcelファイルをWorkbooks.Open で開く処理の制御で悩んでいます。 2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが使用中です」的なメッセージが出ませんでした。 (エクスプローラからクリックしたりして、hoge.xlsを直接開くと、他のユーザが使用中かどうかがわかります) それでは困るので、ChangeFileAccess のNotify:=true をセットしてみたら、2人目は他のユーザが使用中である旨のメッセージが出るようになりました。 しかし、ChangeFileAccess のNotifyはちゃんと設定されているようなのですが、 'ChangeFileAccess'メソッドは失敗しました:'_Workbook'オブジェクト とエラーが出ています。 ChangeFileAccessはどう使うのが正しいのでしょうか? ソースは Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True って感じなのですが。 Workbooks.Openはちゃんとできています。Workbooks.OpenがコケたらOn Error Goto で拾ってMsgBoxでメッセージを出す、という処理をしているのですが、Workbooks.OpenはOKなのにChangeFileAccessでコケて、On Error Goto に引っかかってしまっています。

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

  • エクセルVBAでパスの¥マークについて

    このマクロを記述したBOOKと同じフォルダー内にある、シート001.xls を開くマクロです。 同一フォルダーにあるのですから、このような記述になると思います。 Sub kakunin1() Workbooks.Open (ThisWorkbook.Path & "\" & "シート001.xls") End Sub しかし、以下の3つはすべてシート001.xls を開くことができました。 Sub kakunin2() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "シート001.xls") End Sub Sub kakunin3() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "\" & "シート001.xls") End Sub Sub kakunin4() Workbooks.Open (ThisWorkbook.Path & "\" & "\" & "\" & "\" & "\" & "\" & "シート001.xls") End Sub パスの¥マークは階層をあらわすのだと思っていましたがいくつ重ねてもなぜ開くのでしょうか?非常に初歩的な質問だと思いますが、ご教示いただければ幸いです。

  • excelのファイルとセル値を書き出したい

    excel2003を利用しています。 とあるフォルダにある excelファイル名(自分自身のファイルを除く) を全て書き出して、 且つ A1セルの値をB列に書き出すことを、やろうとvbaを作ってみましたが。 最後のファイルのA1セルを書きだすところで、エラーになっていまい そこだけ空白になってしまいます。※写真参照 記述は以下の通りです。どのように修正すればよいか 教えていただけないでしょうか? また他にもっと優れた記述があれば、そちらも教えて欲しいです。 よろしくお願いします。 Sub test() Dim buf As String, cnt As Long Dim Path As String Path = ThisWorkbook.Path & "\" buf = Dir(Path & "*.xls") cnt = 2 Do While buf <> "" If buf <> ThisWorkbook.Name Then cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Workbooks.Open Filename:=Path & "\" & buf MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value Workbooks(buf).Close End If Loop End Sub

  • エクセルVBAでのエラー

    おはようございます。 昨日ここでいろいろ教えていただき、300のエクセルファイルから特定の範囲のデータ抽出方法を書いてみたのですが、セルが多すぎて実行できません、というエラーがでてしまいます。 これはどのように解消すればよろしいのでしょうか? Sub Test() Dim FPath1 As String, FPath2 As String Dim FName As String, myBook As String Const startROW As Long = 14, lastROW As Long = 20 Const startCOL As Long = 8, lastCOL As Long = 10 Const shtNAME As String = "sheet1" Application.ScreenUpdating = False FPath1 = "D:\MR5567\" FPath2 = "D:\New Microsoft Excel Worksheet\" Workbooks.Add myBook = ActiveWorkbook.Name FName = Dir$(FPath1 & "*.xls") Do While FName <> "" Workbooks.Open Filename:=FPath1 & FName ActiveWorkbook.Sheets.Select Sheets(1).Activate Sheets.Copy After:=Workbooks(myBook).Sheets(Sheets.Count) Workbooks(FName).Activate Application.DisplayAlerts = False ActiveWorkbook.Close FName = Dir$ Loop ActiveWorkbook.SaveAs Filename:=FPath2 & "Renketsu.xls", FileFormat:=xlNormal ActiveWorkbook.Close Application.ScreenUpdating = True End Sub

  • ファイル名が決まっていないファイルのデータを取り出しひとつのファイルにまとめる

    初めまして。 マクロ超初心者です。まだまだ勉強中でして自分で作るのは困難です。しかし、来月には必要なので… よろしくお願いします! エクセル2000で以下のマクロを作成したいです。 1.フォルダ内のCSVファイルを開き、中のデータをひとつにまとめる。 (フォルダ名とファイル名、ファイル数はその時によって変わってきます。ファイル数はだいたい10個くらいです。ひとつのデータは20列50行くらいで列の項目を基準にまとめたいです。) 2.列を1列目に挿入し、2列目と3列目のデータを1列目に統合する。 3.1列目のデータを使用し、重複を調べる。重複がある場合はどちらかひとつを削除する。(できれば4列目のデータを比較し数値が少ないほうを削除したいです。) ファイルを開くところまでは検索して探し当てたのですが、ファイル名が決まっていないことが難しく詰まってしまいます。 Sub OpenAllBooks() Dim filename As String Dim openedbook As Workbook Dim isbookopen As Boolean filename = Dir(ThisWorkbook.Path & "\*.csv") Do While filename <> "" 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 (ThisWorkbook.Path & "\" & filename) End If filename = Dir() Loop End Sub 詳しい方よろしくお願いします!

  • EXCEL/VBA:WORDファイルの上書き保存を確認する方法

    以下のvbaを実行すると、次のように動作します。   test1.xlsを開いて、Atest1.xlsの名前で保存するときに、既にファイルが存在する場合、excelでは上書き保存するか聞いてきます。  しかし、test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 wordの場合も上書き保存するか聞くようにするには、どうしたら良いか教えてください。 Workbooks.OpenText Filename:="test1.xls" ActiveWorkbook.SaveAs Filename:="Atest1.xls" ActiveWindow.Close Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\test1.doc") Set wordRange = wordDoc.Content wordDoc.SaveAs Filename:="Atest1.doc" wordDoc.Close wordApp.Quit

  • EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる

    EXCELのVBAでマクロを使ってファイルを開こうとしている際、指定したファイルが存在しなかった場合、普通はマクロのエラーが出て「ファイルが存在しません」となりますが、指定したファイルが存在しなかった場合には、メッセージボックスを表示させ、そこで処理を中止させるか、または、その無いファイルの処理は飛ばして次のファイルの処理を行う用にさせることはできるでしょうか? Sub test1() Workbooks.Open Filename:="C:\Documents and Settings\001.xls (001が存在しない場合メッセージボックスを出しマクロを中止するか次の002を開くか選ぶ) Workbooks.Open Filename:="C:\Documents and Settings\002.xls End sub