- 締切済み
VBAによるカレントフォルダのファイルを検索し開く
カレントフォルダ内にファイル(コ―ド.xls)を見つけ開き、無ければMSG表示したい。 どのように、したらいいですか? 考えているのは、 Application.DefaultFilePath = ThisWorkbook.Path If ??? Then Workbooks.Open "コード.xls" else msgbox (ThisWorkbook.Path & "にコード.xlsを置いて下さい。") Exit sub end If です。 この???の部分を教えて頂きたいと思います。 よろしくお願いします。
- 25630
- お礼率67% (21/31)
- その他MS Office製品
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
この質問だけであれば。Errorで処理しては如何でしょうか? Sub OnErrorTest() On Error GoTo ErrorTrap Application.DefaultFilePath = ThisWorkbook.Path Workbooks.Open "コード.xls" Exit Sub ErrorTrap: MsgBox (ThisWorkbook.Path & "にコード.xlsを置いて下さい。") Exit Sub End Sub
- end-u
- ベストアンサー率79% (496/625)
Dir関数などを使ってファイル存在をチェックします。 Sub test1() Const fName = "コード.xls" Dim pName As String Dim wb As Workbook pName = ThisWorkbook.Path & "\" If Dir(pName & fName) = "" Then MsgBox pName & "に" & fName & "を置いて下さい。" Exit Sub End If On Error Resume Next Set wb = Workbooks(fName) On Error GoTo 0 If wb Is Nothing Then Workbooks.Open pName & fName Else MsgBox fName & "は既に開いています。" Set wb = Nothing End If End Sub 簡易的に、Excel既定のエラーメッセージを使うという考え方も あっていいのではないかとも思います。 Sub test2() On Error GoTo errHndlr Workbooks.Open ThisWorkbook.Path & "\コード.xls" Exit Sub errHndlr: MsgBox Err().Number & vbLf & Err.Description End Sub
お礼
回答有難う御座います。 今回は、使用しませんでしたが、次回の参考にさせて頂きます。 有難う御座いました。
- kmetu
- ベストアンサー率41% (562/1346)
Dir("コード.xls") <> "" これでいかがでしょう。
お礼
回答有難うございました。 おかげさまで、上手く処理できました。 有難う御座いました。
関連するQ&A
- VBAでフォルダにあるエクセルファイルを開く
こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルVBAでフォルダ内の重複ファイルを表示
したいのです。 フォルダ内に集計用マクロファイルと個々人用の複数の回答ファイルがあります。 回答ファイル名は、「AB1234.xls」と数字(ID)の部分は個々人で異なります。 集計用マクロファイルには、個々人のIDが記載されており、「*1234*.xls」とワイルドカードで集計する様にしています。 回答ファイルには「AB1234.xls」、「AB1234rev1.xls」、「AB1234rev2.xls」等が有る場合があり、集計前に重複ファイルを検索して処理を中断したいのです。 コードは下記の通りですが、重複ファイルのメッセージ表示が次の様になってしまいます。 AB1234.xls AB1234rev1.xls AB1234.xls AB1234rev2.xls AB5678.xls AB5678rev1.xls この表示を次の様にしたいのですが、どう手直しすれば宜しいでしょうか。 宜しくご回答願います。 AB1234.xls AB1234rev1.xls AB1234rev2.xls AB5678.xls AB5678rev1.xls ------------------------------------ ThisWorkbook.Sheets(strMonth).Activate 'マクロファイルのシート名は4月~3月の12枚です。 MaxRow = Range("B4").End(xlDown).Row 'B4から下方に個々人のIDが記載されています。 For Y3 = 4 To MaxRow strID = Cells(Y3, 2) Cells(1, 6) = "プリチェック中" i = 0 Target = Dir(ThisWorkbook.Path & "\" & "*" & strID & "*.xls", vbNormal) msg1 = Target Do While Target <> "" i = i + 1 If i = 1 Then GoTo Label2 If i >= 2 Then msg2 = msg2 & vbCrLf & vbCrLf & msg1 & vbCrLf & Target Flag = Flag + 1 'ElseIf i = 1 Then 'msg1 = "" End If Label2: Target = Dir() Loop Next Y3 If Flag >= 1 Then Cells(1, 6) = "" msg1 = "下記のファイルが重複しているので処理を中止します。" & msg2 MsgBox msg1 Exit Sub Else End If
- ベストアンサー
- Visual Basic
- vbaで新規フォルダ作成時の名前の指定
「あいいうえお」フォルダの中に年が変わったら「2015年」という名前でフォルダの作成を行いたいのですが、下記のコードでは「あいうえお2015年」という名前のフォルダを作成してしまいます。フォルダの作成で、「あいうえお」を除いたものを作成するにはどう変えればよいでしょうか? (12月のファイルで実行した時に例えば「2015年」フォルダを作成して、その中に「あいうえお2015-1月.xlsm]ファイルを作成します。同じ年なら「あいうえお11月.xlsm]などファイルのみを作成します。) お手数をおかけしますがどうぞよろしくお願いいたします。 Sub ブックコピー自動翌月分作成() Dim i As Integer Dim wb As Workbook Dim myDir_path As String, myNew_path As String 'フォルダパスとファイルパスを作成 myDir_path = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 1) myNew_path = "あいうえお" & Format(DateAdd("m", 1, Replace(Replace(ThisWorkbook.Name, "あいうえお", ""), "月.xlsm", "")), "yyyy-m") & "月.xlsm" myDir_path = Left(myDir_path, InStrRev(myDir_path, "\")) & Left(myNew_path, 9) & "年\" 'フォルダの有無を確認、なければ作成 With CreateObject("Scripting.FileSystemObject") If Not .FolderExists(myDir_path) Then MkDir myDir_path 'MsgBox myDir_path & "を作成しました" 'MsgBox Left(myDir_path, InStrRev(myDir_path, "\")) & "に" & vbNewLine & MsgBox Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\") - 12) & "に" & vbNewLine & _ Left(myNew_path, 9) & "年" & "フォルダを新たに作成しました" End If End With 'ファイルの有無を確認、なければ保存,あれば処理中止 If Dir(myDir_path & myNew_path) = "" Then ThisWorkbook.SaveCopyAs myDir_path & myNew_path MsgBox myNew_path & "のファイルを新たに作成しました" Else MsgBox "翌月分のファイルはすでに存在するので処理を中止します", vbOKOnly, "処理中止" Exit Sub End If '新規作成したブックを開く,既に開いていれば処理中止 For Each wb In Workbooks If wb.Name = myNew_path Then MsgBox myNew_path & "は既に開いているので処理を中止します", vbOKOnly, "処理中止" Exit Sub End If Next Workbooks.Open myDir_path & myNew_path Workbooks(myNew_path).Activate End Sub
- ベストアンサー
- Excel(エクセル)
- ファイルの別名保存の方法
こんにちは。 Excelの素人です。blg.を参考に、ファイルの別名保存ボタンを作りましたが、別名保存後うまく終了してくれません。 現象は終了マクロから名前をつけて保存してもファイルが終了しません。もう一度ボタンをクリックするといきなり終了します。 素人の悲しさで、どこを修正すればよいのか悩んでいます。 Sub 別名保存後終了() If ThisWorkbook.Saved = False Then strFilename = ThisWorkbook.Path & "\" & _ "データ作成" & "_" & _ Format(Date, "yyyymmdd") & ".xls" strFilename = Application.GetSaveAsFilename( _ FileFilter:="Excelファイル,*.xls", _ InitialFileName:=strFilename, _ Title:="Excelファイルの保存") If strFilename = "False" Then If MsgBox("保存せずに終了します。よろしいですか?", _ vbOKCancel + vbInformation, _ "終了確認") = vbOK Then ThisWorkbook.Saved = True ThisWorkbook.Close Else Exit Sub End If Else ActiveWorkbook.SaveAs strFilename End If Else ThisWorkbook.Close End If End Sub 宜しくお願いします。
- ベストアンサー
- Visual Basic
- エクセル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 パスの¥マークは階層をあらわすのだと思っていましたがいくつ重ねてもなぜ開くのでしょうか?非常に初歩的な質問だと思いますが、ご教示いただければ幸いです。
- ベストアンサー
- オフィス系ソフト
- 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
- ベストアンサー
- Excel(エクセル)
- サーバーに保存したエクセルファイルでChDrive、ChDirがエラーになる
ひとつのフォルダにエクセルブックを6個置います、日常のデータ入力をする、メインのブックに 他ブックをオープンするコードを、以下のように書いています。 Sub 他ブックオープン1() Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path ブック名 = "○○.xls" For Each myBook In Workbooks If myBook.Name = ブック名 Then Workbooks("○○.xls").Activate Exit Sub End If Next Workbooks.Open ("○○.xls") Application.ScreenUpdating = True End Sub この、フォルダをサーバーに置いて、クライアントのパソコンから 上記コードを実行すると、実行時エラー "プロシージャの呼び出し、または引数が不正ですとなり、うまく 行きません、デバッグ画面でChDrive,ChDir に示される、アドレスを みると、正しく\\○○サーバー\...と表示されます、どうしてこの アドレスを認識しているのに、エラーが出るのかわかりません どなたか宜しくご教示願います。
- ベストアンサー
- その他(インターネット・Webサービス)
- エクセルマクロ フォルダ内のファイル検索で
よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub
- ベストアンサー
- その他MS Office製品
- EXCEL VBA ファイルが開かれているかチェックする処理
ファイルを開く処理の前に、対象ファイルが開かれているかチェックして、開かれていたらエラーを表示する処理を以下のように記述したのですが、対象ファイルが開かれていないのにエラーになってしまいます。 エラーコードは『75』と表示されるのですが、ヘルプを見たり調べてみましたが、なぜエラーとなるのかが分かりません。 どなたか教えて下さい。宜しくお願いします。 ************************************************************* Public Path As String Public Fmei1 As String Public Full1 As String Public Error As String Private Sub CommandButton1_Click() Path = "\\ディレクトリ1-1\ディレクトリ1-2\ディレクトリ1-3" Fmei1 = "ファイル.xls" Full1 = Path & "\" & Fmei1 Fopn End Sub Sub Fopn() On Error Resume Next Name Full1 As Full1 If Err.Number Then(←ここでエラーコード『75』となってしまいます) Error = MsgBox("『ファイル.xls』を閉じて下さい。", _ vbCritical, "処理中断") Err.Clear End Else Workbooks.Open Filename:=Path & "\" & Fmei1 End If End Sub
- ベストアンサー
- Visual Basic
- VBAでフォルダの中の1個のファイルを表示したい
Windows10、Microsoft 365使用の超初心者です。 毎月1回、一個だけファイルを、フォルダ「計算表」に手動で入れています。 入れるのは、翌月のファイルで、A年B月計算表完成.xlsです。 いま、フォルダ「計算表」に、2年8月計算表完成.xlsが,1個 いれてあるので、エラーが発生します。 毎月1回のエラーを回避するため、何か良い方法を知りたいです。 よろしくお願いします。 Sub 最新計算書ひらく() Dim wb As Workbook Dim ws As Worksheet ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error Resume Next Set wb = Workbooks("2年7月計算表完成.xls") If err.Number <> 0 Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\計算表\2年7月計算表完成.xls") err.Clear End If Set ws = wb.Worksheets("集計") On Error GoTo 0 wb.Activate ws.Select・・・・・・ここでエラーになる End Sub
- ベストアンサー
- Visual Basic
お礼
回答有難う御座います。 エラー処理は、別の方法で行っておりますので、今回は使用しませんでしたが、次回の参考にさせて頂きます。 有難う御座いました。