- ベストアンサー
インプットボックスからファイルを開く方法についての質問
- インプットボックスからファイルを開く際、すでに開いているか確認する項目が正常に作動しないため、どのように記述したらよいか教えてください。
- ファイルを開く際に、インプットボックスを使用した方法で問題が発生しています。すでに開かれているか確認する部分のコードがうまく動作していないようです。修正方法を教えてください。
- ファイルを開く際に、インプットボックスを使用していますが、既に開かれているか確認するコードが正常に動作しません。どのように修正すればよいでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
横からすみません。 >Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここを修正するとエラーになってしまいます。 先ほどの質問の補足に >しかし、教えて頂いた方法でうまくファイルを開く事ができません。バックスラッシュの表示もうまくいかず¥になってしまいます とありましたので このサイトでは ¥マークが /(バックスラッシュ)で表示されます。 ThisWorkbook.Path & "¥" & fil & ".xls" が正しいです。 今は 全角で ¥ を出していますが 正しくは半角です。 それと ThisWorkbook.Path ですので 開きたいファイルが、同じフォルダにあることが前提です。
その他の回答 (5)
- shinkami
- ベストアンサー率43% (179/411)
For Each wb In Workbooks ’すでに開いているか確認。二重に開くのを防止 If wb.Name = "fil.xls" Then ’ここの部分がうまく作動してくれません。 psw = True Exit For End If Next wb これではForループの出口は全て[Next wb]ですね Exit if を何かと置き換える必要があります Exit sub は通りますか
- Wendy02
- ベストアンサー率57% (3570/6232)
私が回答を書いている間に、既に同じ指摘が出てしまいましたが、 ただ、以下のように、InputBox を使うのは、あまり関心しません。 ConboBox やListBox に設定していないのでしたら、 Application.GetOpenFilename を使ったほうがよいです。 パスを直すなら、宣言部分の直下の「パス」というコメントの所で修正してください。 '// Sub Test1() Dim pSp As String 'パスセパレータ Dim fil As Variant Dim myPath As String myPath = ThisWorkbook.Path 'パス Const sEXT As String = ".xls" pSp = Application.PathSeparator fil = Application.InputBox("ファイル名入力", "ファイル名入力", Type:=2) If VarType(fil) = vbBoolean Or fil = "" Then Exit Sub If InStr(fil, pSp) > 0 Then fil = Mid(fil, InStr(fil, pSp) + 1) If InStr(fil, sEXT) = 0 Then fil = fil & sEXT On Error GoTo ErrHandler Workbooks(fil).Activate '..マクロ実行 Exit Sub ErrHandler: If Err.Number <> 9 Then MsgBox Err.Description: Exit Sub If Dir(ThisWorkbook.Path & pSp & fil) <> "" Then Workbooks.Open myPath & pSp & fil Resume Else MsgBox "ファイルが見つかりません!", vbExclamation Exit Sub End If End Sub
お礼
Wendy02様 有難うございます。いろいろ教えて頂き有難うございます。 少し検討していきます。
- hallo-2007
- ベストアンサー率41% (888/2115)
加えて補足して置きます。 せっかく2重に開くのエラー処理されていますが InputBox で間違ったファイル名を入力したときのエラー処理が必要と思います。 セルにファイル名を入れておくのであれば 予め入力規則などで ミスの防止策ができますが? もしVBA上で 入力するのであれば Application.Dialogs(xlDialogOpen).Show で開くのダイアログ を表示させたり OpenFile = Application.GetOpenFilename("Excelブック,*.xls") で選択したほうが良いですよ。 詳しくは http://officetanaka.net/excel/vba/tips/tips109.htm を参考にしてください。 それと新規のファイルで ThisWorkBook.Pathを使うと空白でしかありません。 一度、開きたいファイルのあるフォルダに保存してから実行してください。
お礼
hallo-2007様 有難うございます。なんとか解決できそうです。
補足
hallo-2007様 いろいろ有難うございます。 今から、調べながらやっていきたいと思います。 少し、時間がかかりそうです。今から仕事なので今日はあきらめます。 本当に有難うございます。
- xls88
- ベストアンサー率56% (669/1189)
>Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここを修正するとエラーになってしまいます。 「エラーになる」というだけではなくエラー内容も教えてください。 解決の重要な手掛かりになります。 Workbooks.Open Path & "C:¥" & fil 修正しない場合はエラーにならないのですか? ここでは、半角の¥がバックスラッシュになりますが気にしなくても大丈夫です。 MsgBox ThisWorkbook.Path と 開こうとしているファイルのパスは同じですか? MsgBox fil filには文字列が間違いなく入っていますか? 拡張子は、.xls で間違いないですか?
- xls88
- ベストアンサー率56% (669/1189)
""で囲んでいるので fil.xlsという文字列(ファイル名)になっています。 For Each wb In Workbooks If wb.Name = fil & ".xls" Then psw = True Exit For End If Next wb If psw = False Then Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここも直してみました End If
補足
xls88様 いつも有難うございます。 Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここを修正するとエラーになってしまいます。 すみません何が原因かわからないのですが・・・。
お礼
shinkami様 >Exit if を何かと置き換える必要があります この辺が今の私にはよく分からないので、勉強して修正します。