こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コモンダイアログエラー

エクセルのマクロについて質問です。
今エクセルでCommonDialog1を実行しようとしています。
やりたいことは”ファイルを選択するウィンドウを表示”させて”ファイルを開く”です。
マクロを作成しているエクセルは2007で実際に動作させるときに使用するのは2002です。

下記マクロ参照ください。

Private Sub CommandButton1_click()

Dim strfilename As String

commondialog1.Filename = ""
commondialog1.Filter = "CSV Files(*.csv)|*.csv"
commondialog1.showopen
strfilename = commondialog1.Filename

End Sub

実行しようとすると実行エラー424
オブジェクトが必要です

とエラーメッセージがでます。(2007で作成、デバック時)
common dialog controlの挿入等試してみましたがうまくいきません。
解決策がありましたらご教示願います。

ちなみに、既存のマクロの都合でcommondialogのコマンドを使用して作りたいです。
他にも方法はあるかと思いますが、宜しくお願い致します。

投稿日時 - 2011-08-05 10:25:29

QNo.6922664

困ってます

質問者が選んだベストアンサー

#1 です。
 どうも、前の回答は説明が過ぎたようで却って分かりにくかったでしょうか。

 新規の ブック で、下記の通りに試してみてください。

 先ず、新規の ブック を開き、VBE を開いてください。
1)VBE において、[挿入(I)] - [ユーザー フォーム(U)] で ユーザー フォーム を挿入します。
2)[ツールボックス] の中から [コマンド ボタン] を クリック し、[UserForm1] の中に配置します。
3)[ツールボックス] の アイコン が並んでいるトコロの何もないトコロを [右クリック] - [その他のコントロール(A)...] を クリック します。
4)[コントロールの追加] ダイアログ - [利用可能なコントロール(A):] の中から、[Microsoft Common Dialog Control, Version 6.0 (SP6)] を クリック して、前の □ に「×」を付け [OK] します。
5)[ツールボックス] の アイコン が並んでいるトコロの最後に、アイコン が1つ追加されましたので、それ([CommonDialog])を クリック し、[UserForm1] の中に配置します。
6)(2) で配置した [コマンド ボタン] を [右クリック] - [コードの表示(O)] を クリック します。
7)現われた コードウィンドウ に、ご質問でお示しの コード をそのまま コピペ します。そのまんまです。
 このとき、冒頭に「Option Explicit」と書かれていなかったら、これを冒頭に書いてください。
8)ワークシート上 に配置した コマンドボタン なり、シート イベント なりで、
UserForm1.Show
を実行します。
9)現われた ユーザーフォーム の コマンドボタン を クリック します。
10)[開く] ダイアログ が起動します。

 上記で エラー が出ずに (10) まで行けたとしたら、お手許の ブック と比べて、どこが異なるのかご確認ください。

 上記でも、まだ エラー が出るということであれば、話は振り出しに戻ります。

 なお、当方、Excel 2003 にて試行しましたが、ユーザーフォーム 関係は、2007 でも余り変わっていなさそうですので。。。
http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_04_04.html

投稿日時 - 2011-08-05 15:23:51

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

エクセルVBAでやるらしい。質問には
http://www.serpress.co.jp/excel/vba030.html
に書いてある3つの方法(API、commondialog1のコントロール、Excel標準のダイアログボックス)のうち、どれでやっているのか。APIは論外としてはっきり質問には、書くべきではないか。
参考
UserFormにcommondialog1のコントロールを貼り付け
Sub test02()
With UserForm1
.CommonDialog1.Filename = "C:\Documents and Settings\XXXX\My Documents\*.xls" 'デフォルトのファイル名
.CommonDialog1.DialogTitle = "ファイルを開く" 'ダイアログのタイトル
.CommonDialog1.Filter = "Microsoft Excel (*.xls)|*.xls" '拡張子にxlsを指定
.CommonDialog1.Flags = cdlOFNExplorer + cdlOFNLongNames 'エクスプローラ形式と長いファイル名を指定
.CommonDialog1.MaxFileSize = 512 '512文字
.CommonDialog1.ShowOpen 'ダイアログを開く
strFileName = .CommonDialog1.Filename '選択したファイル名
MsgBox strFileName
End With
End Sub
のようなユーザーフォーム上にコントロールを貼り付けてやっているのか。
With UserForm1
に当たるものは入れているか?
ーー
別パソコンに行けばパソコンの環境・データ(ドライブ、フォルダなど)が変わる可能性がある。
プログラムがうまく行かないのは
(1)プログラムコード
(2)環境(例えば、ドライブ、フォルダ、参照設定、ライブラリ、64ビット、ソフトのバージョンなど多岐にわたってありえる)
(3)データの有様(予期せぬデータがあった)
などでエラーが起こりえる。(1)だけとは限らない。
それらを切り分けてみましたか。
commondialog1のコントロールは昔からあるコントロールだが。

投稿日時 - 2011-08-05 13:56:53

お礼

ご丁寧に回答頂きましてありがとうございました。

投稿日時 - 2011-08-16 12:11:44

ANo.1

>common dialog controlの挿入等試して
>みましたがうまくいきません

http://www.serpress.co.jp/excel/vba030.html
に書かれているような段取りでしていらっしゃるのでしょうか?

-------------------------------

 「Option Explicit」で変数の宣言を強制してある場合には、

-------------------------------

【1】「Private Sub CommandButton1_click()」が 標準モジュール などに記載してある場合:

【1-1】[CommandButton1] を クリック した場合:何も起こりません。

【1-2】VBE において デバッグ しようとしている場合:
CommonDialog1.Filename = ""
の行で「コンパイル エラー: 変数が定義されていません。」が発生します。

-------------------------------

【2】「Private Sub CommandButton1_click()」が フォーム モジュール に記載してある場合

【2-1】[UserForm1] 上に [CommonDialog1] コントロール がない(削除された)場合:
CommonDialog1.Filename = ""
の行で「コンパイル エラー: 変数が定義されていません。」が発生します。

【2-2】[CommonDialog] の「(オブジェクト名)」が「CommonDialog1」でなくなっている場合:【2-1】と同じ結果です。

-------------------------------

【1-2】【2-1】の場合に、「Option Explicit」で変数の宣言を強制していない場合:
「コンパイル エラー: 変数が定義されていません。」が発生する場所で、「実行時エラー '424': オブジェクトが必要です。」が発生します。

※VBE の [ツール(T)] - [参照設定(R)...] において、[参照(B)...] ボタン を クリック、[ファイル名(N):] に、「C:\windows\System32\COMDLG32.OCX」と入力して、[参照可能なライブラリ ファイル(A):] の一覧の「Microsoft Common Dialog Control 6.0 (SP6)」に チェック が付いた状態でも結果は変わらないようです。

-------------------------------

 以上のことから、【1-2】はちょっとあり得ないので、【2-1】ということになりましょうか?(これもあり得ませんが。。。)

===============================

 ちなみに、
>既存のマクロの都合でcommondialogの
>コマンドを使用して作りたいです。
とのことですが、
http://gallery.technet.microsoft.com/scriptcenter/5481e36a-8073-40ae-92cd-fbef1e6df99a
には、
>UserAccounts.CommonDialog オブジェクトは、
>セキュリティ上の問題から Windows Vista で
>廃止されました。
と書かれています。

 今、Windows7 32bit & Excel 2003 で試してみましたが、問題なく行なうことができましたので、実際のところは分かりませんが、「セキュリティ上の問題から廃止」になったものを使うというのはどうでしょうかねぇ。。。

 ちなみにちなみに、本家MS社でありながら、「12/2/2010」(昨年暮れ)に「UserAccounts.CommonDialog オブジェクト」の使い方を紹介しています。
http://gallery.technet.microsoft.com/scriptcenter/93f959a5-b57e-4617-9f55-4b0aacdd12cb/

 また、冒頭の URL は、下記を具体的に紹介した ページ かと存じます。

●コモン ダイアログ コントロール (Comdlg32.ocx) を呼び出すコードを実行するとエラー メッセージ "ActiveX コンポーネントはオブジェクトを作成できません" が表示される
http://support.microsoft.com/kb/281848/ja

投稿日時 - 2011-08-05 12:59:11

あなたにオススメの質問