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

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



このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。
キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?

A 回答 (4件)

ダイアログをキャンセルしたとき vntFileName は文字列型ではなくブール型です。



なので

> If vntFileName <> "False" Then

ではなくて

If vntFileName <> False Then
    • good
    • 0
この回答へのお礼

修正しましたが、改善されませんでした・・・

お礼日時:2010/07/24 20:13

End Ifの前にExit Subを


入れてはどうでしょうか。
    • good
    • 0

aNo.2です。


Else
Exit Sub
End If
でした。
    • good
    • 1

こういう場合、きちんと書いてあげたほうがよいですね。


ご自身のコードと見比べてください。ワザとベストの書法ではない方法で書きました。

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 などの、組込み定数までは、勤めて省略はしないでください。
    • good
    • 0

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