
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
-
4
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
5
VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定
Excel(エクセル)
-
6
Excel VBA:特定の文字列以降(あるいは以前)のテキストをすべて取得する方法
Visual Basic(VBA)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
9
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
12
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
13
【VBA】PDF出力に任意のファイル名前を付ける方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダ内のexcelファイルを順...
-
EXCEL VBA 指定したファイルが...
-
【Excel VBA】ファイル名が一...
-
【マクロ】変数に入れるコード...
-
【マクロ】名前を保存する際に...
-
エクセルのマクロ・ウイルス駆...
-
エクセル 複数ファイルの一括...
-
データ参照先が別ファイルの場...
-
フォルダ内のブック全部にパス...
-
Excelのマクロでファイルを開く...
-
ACCESS VBAでファイルを開くダ...
-
エクセルマクロ 異なるファイ...
-
Excelマクロで指定したファイル...
-
VBA EXCELファイル選択⇒指定セ...
-
Accessのaccdbファイルを起動で...
-
VBAで開いているファイルの...
-
複数のエクセルファイルに対し...
-
ワード2007で複数ファイル自動...
-
ISOファイルとMDSファイル
-
差し込み印刷の元データファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】変数に入れるコード...
-
【マクロ】EXCELで読込したCSV...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
【Excel VBA】ファイル名が一...
-
ファイルを開かずにマクロを実行
-
エクセル 複数ファイルの一括...
-
accessフォルダを移動したらフ...
-
ファイルの保存場所を変えたら...
-
データ参照先が別ファイルの場...
-
VBAでワークブックの名前を変数...
-
EXCELマクロを無効にして開く方法
-
フォルダ内のブック全部にパス...
-
エクセル(マクロ)のファイル...
-
エクセルファイルを開く時、関...
-
秀丸:あらかじめ設定した複数...
-
Excelのマクロでファイルを開く...
-
EXCEL VBAで作成した ファイル...
おすすめ情報