
Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙動についてです。
マクロで次のような記述をしています。
Sub tekitou()
Dim vntFileName As Variant
vntFileName = _
Application.GetOpenFilename( _
FileFilter:="エクセルファイル(*.xls),*.xls" & _
",CSVファイル(*.csv),*.csv" _
, FilterIndex:=1 _
, Title:="ファイルを開く" _
, MultiSelect:=False _
)
If vntFileName <> "False" Then
Workbooks.Open Filename:=vntFileName
End If
うんたらかんたら
End Sub
このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。
キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?
No.4ベストアンサー
- 回答日時:
こういう場合、きちんと書いてあげたほうがよいですね。
ご自身のコードと見比べてください。ワザとベストの書法ではない方法で書きました。
Sub MyFileOpenPro()
Dim FName As Variant
FName = Application.GetOpenFilename("Excelファイル(*.xls),*.xls, " & _
"CSVファイル(*.csv),*.csv", 1, "ファイルを開く", False)
If VarType(FName) = vbBoolean Then Exit Sub 'マクロ離脱←本来はコメントは不要
'ファイルオープン '←ここにコメントを入れる
Workbooks.Open FName
MsgBox FName 'うんたらかんたらの部分
End Su
以下は、つまらないことを言っていると思ってもよいですが、実務上のアドバイスで、もし、以下の中でどこかに引っかかることがあったら幸いです。
FileName を、Variant 型にするのはでよいです。明示的にわかる変数は、方針(ハンガリアン記表)が変わって、あまりプレフィックスは拘らなくてよいです。特に、VB.Net で、int と long の分岐点が変ったからです。
Variant 型にしたら、Cancel を押せば、当然、データ型は、Boolean 型になりますから、大文字・小文字を考えなくても、VarType や False で、除外項目が作れます。文字型でもよいのですが、Variant 型のほうが上です。
Fname に変えた理由は、別に意味ありません。本来は、こういう省略型は良くないのですが、VBAでは、伝統的になぜかこういう書き方もあるようです。とかくVBA(のみ)では長い変数名は、嫌われます。スクリプト型言語の名残りを残しているのかもしれません。
今回は、そのままでもよいのですが、本格的に、自分だけのコードを書く場合は、見せるコードは無視してよいです。とかく、掲示板では、可読性がどうとかという人がいますが、どうせ、この程度で読めなくなるようなレベルなら、どう書いた所で同じです。本格的に書くときは、なるべく短縮させてしまってください。その代わり、コメントを上手に入れます。ただし、vbBoolean などの、組込み定数までは、勤めて省略はしないでください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
このQ&Aを見た人はこんなQ&Aも見ています
-
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
-
4
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
5
特定の名前のオートシェイプの有無を知りたい(エクセルVBA)
Excel(エクセル)
-
6
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
7
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
10
【VBA】PDF出力に任意のファイル名前を付ける方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】変数に入れるコード...
-
エクセル(マクロ)のファイル...
-
【マクロ】名前を保存する際に...
-
EXCEL VBA 指定したファイルが...
-
エクセルマクロで不特定なファ...
-
【マクロ】EXCELで読込したCSV...
-
ファイルの保存場所を変えたら...
-
データ参照先が別ファイルの場...
-
秀丸:あらかじめ設定した複数...
-
ファイルを開かずにマクロを実行
-
エクセルのシートの数を数えた...
-
フォルダ内のブック全部にパス...
-
エクセルファイルを開く時、関...
-
Excelファイルがマクロを含むか...
-
新規 xlsmファイルにする方法...
-
【VBA】フォルダ内のファイル全...
-
別ファイルの値を、「そのファ...
-
エクセル 複数ファイルの一括...
-
エクセルのxls形式からxlsx形式...
-
Excelマクロで指定したファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】EXCELで読込したCSV...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
【Excel VBA】ファイル名が一...
-
ファイルを開かずにマクロを実行
-
フォルダ内のブック全部にパス...
-
EXCELマクロを無効にして開く方法
-
エクセル 複数ファイルの一括...
-
エクセル(マクロ)のファイル...
-
accessフォルダを移動したらフ...
-
秀丸:あらかじめ設定した複数...
-
データ参照先が別ファイルの場...
-
エクセルファイルを開く時、関...
-
Excelファイルがマクロを含むか...
-
ファイルの保存場所を変えたら...
-
エクセルのシートの数を数えた...
-
VBAでワークブックの名前を変数...
-
Excelのマクロでファイルを開く...
おすすめ情報