アプリ版:「スタンプのみでお礼する」機能のリリースについて

インプットボックスからファイルを開くようにしました。しかし、すでに開いているか確認する項目がうまく作動しません。どのように記述するか教えて頂けませんでしょうか。

Sub Macro1()
Dim wb As Workbook
Dim psw As Boolean
Dim fil As String
fil = InputBox("ファイル名入力")

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 Path & "C:¥" & fil
End If
End Sub

A 回答 (6件)

""で囲んでいるので


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" 'ここを修正するとエラーになってしまいます。
すみません何が原因かわからないのですが・・・。

補足日時:2010/09/12 13:57
    • good
    • 0

横からすみません。


>Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここを修正するとエラーになってしまいます。
先ほどの質問の補足に
>しかし、教えて頂いた方法でうまくファイルを開く事ができません。バックスラッシュの表示もうまくいかず¥になってしまいます
とありましたので
このサイトでは ¥マークが /(バックスラッシュ)で表示されます。
ThisWorkbook.Path & "¥" & fil & ".xls"
が正しいです。
今は 全角で ¥ を出していますが 正しくは半角です。
それと
ThisWorkbook.Path ですので
開きたいファイルが、同じフォルダにあることが前提です。
    • good
    • 0

>Workbooks.Open ThisWorkbook.Path & "\" & fil & ".xls" 'ここを修正するとエラーになってしまいます。



「エラーになる」というだけではなくエラー内容も教えてください。
解決の重要な手掛かりになります。

Workbooks.Open Path & "C:¥" & fil
修正しない場合はエラーにならないのですか?
ここでは、半角の¥がバックスラッシュになりますが気にしなくても大丈夫です。

MsgBox ThisWorkbook.Path

開こうとしているファイルのパスは同じですか?

MsgBox fil
filには文字列が間違いなく入っていますか?
拡張子は、.xls で間違いないですか?
    • good
    • 0

加えて補足して置きます。


せっかく2重に開くのエラー処理されていますが
InputBox で間違ったファイル名を入力したときのエラー処理が必要と思います。
セルにファイル名を入れておくのであれば
予め入力規則などで ミスの防止策ができますが?
もしVBA上で 入力するのであれば
Application.Dialogs(xlDialogOpen).Show
で開くのダイアログ を表示させたり
OpenFile = Application.GetOpenFilename("Excelブック,*.xls")
で選択したほうが良いですよ。
詳しくは
http://officetanaka.net/excel/vba/tips/tips109.htm
を参考にしてください。

それと新規のファイルで ThisWorkBook.Pathを使うと空白でしかありません。
一度、開きたいファイルのあるフォルダに保存してから実行してください。

この回答への補足

hallo-2007様
いろいろ有難うございます。
今から、調べながらやっていきたいと思います。
少し、時間がかかりそうです。今から仕事なので今日はあきらめます。
本当に有難うございます。

補足日時:2010/09/12 15:11
    • good
    • 0
この回答へのお礼

hallo-2007様
有難うございます。なんとか解決できそうです。

お礼日時:2010/09/12 20:59

私が回答を書いている間に、既に同じ指摘が出てしまいましたが、


ただ、以下のように、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
    • good
    • 0
この回答へのお礼

Wendy02様
有難うございます。いろいろ教えて頂き有難うございます。
少し検討していきます。

お礼日時:2010/09/12 20:55

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 は通りますか
    • good
    • 0
この回答へのお礼

shinkami様 
>Exit if を何かと置き換える必要があります
この辺が今の私にはよく分からないので、勉強して修正します。

お礼日時:2010/09/12 20:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!