• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーフォームのコマンドボタンをマクロで操作したい)

ユーザーフォームのコマンドボタンをマクロで操作したい

このQ&Aのポイント
  • Excel97でユーザーフォームを出しながらセルに入力できるようにしたい
  • ユーザーフォームにコマンドボタンを作成し、「ファイルを開く」ダイアログをキャンセルする操作を自動化したい
  • ユーザーフォームのコマンドボタンを自動的にクリックしてダイアログをキャンセルする方法がわからない

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

  • ベストアンサー
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.2

>それはバグを使って解消できるのだそうです。 「モードレス」のフォームを使いたいのでしょうか。 しかしこういう裏ワザ的やり方はあまり感心しませんね。 「たまたま動いている」とでもいえばいいのでしょうか。 Excel97では「モーダル」になるのが仕様です。 その仕様の範囲内で制作するのがまっとうなやり方だと思いますよ。 モードレスフォームを使わなければ処理できないという、 「のっぴきならない事情」でもあるのなら仕方ないですが、 たぶん、こんな手法を使わなくても解決できる他の方法があるはずです。 たとえばセルの値を変更したいのなら、フォームにテキストボックスをつくればすむ話です。 たいていのことはVBAから操作できます。 ここはVBAの達人の方々が揃っていますから、 どういう機能を実現したいのかを、具体的に書いていただければ、 こんな裏ワザ的手法より、はるかにいい方法が見つかるかもしれませんよ。 さて、質問の直接の回答ですが、 「GetOpenFilename」で開いたダイアログをコードから閉じる方法は、ないと思います。

takahiro_
質問者

お礼

ご回答ありがとうございます。 「ダイアログを閉じる」というコードはないのですね…。   Application.GetOpenFilename の後にAlt + F4 のキー送信を行えばダイアログが閉じるかと思ったのですが、 エクセル自体が終了してしまいましたので、この方法は使わないことになりました。 次善策として同時進行で、シートにフォームのコマンドボタンを配置してマクロを登録し、コマンドボタンを配置した部分をウィンドウ枠の固定でいつでも見えるようにしているものがありますので、それを使用することになりました。 > たとえばセルの値を変更したいのなら、フォームにテキストボックスをつくればすむ話です。 もちろんそうなんですが…。 元になるデータがありますので、テキストボックスではなく、コンボボックスを使うと思います。今もセルに入力規則で別ブックのリストを参照しています。 作成しているものは作業場所ごとの作業員名簿で、名前を入力するとVLOOKUP関数を使ってその人の持っている資格が表示されるというものなのですが、フォームで入力していくと、もし間違った名前を入力してしまって後に気付いたというような場合にすぐ修正しにくい、という点がありましてちょっと使いにくいのです。 また、リストにない名前も入力する場合がありますので、入力した時点でそのデータが正しいか間違いかの判定ができないのです。 該当セルをクリックして名前を訂正する、という作業より簡単な手順でデータを修正できるのでしたらフォームでコンボボックスを使いたいのですが…。 バグ技については、「一定の操作を行えば機能を拡張することができる」という風に考えていましたもので、選択肢の一つとして採用していました。 今回は、VBAで出来ない作業というのが判って、とても勉強になりました。 どうもありがとうございます。 また何か判らないことがありましたら、どうぞよろしくお願いいたします。

その他の回答 (1)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.1

ちょっとよく分かりません。 >「ファイルを開く」ダイアログを表示させてキャンセルするようにしたのですが とありますが、それでは  Application.GetOpenFilename の行は何のために記述しているのでしょうか。 必要ないなら削除すればいいのではないでしょうか。

takahiro_
質問者

お礼

早速のご回答ありがとうございます。 エクセル97では、ユーザーフォームを表示させた状態ではセルに数値を入力することができないそうで、それはバグを使って解消できるのだそうです。 そのバグを出す操作が、ユーザーフォームにコマンドボタンを作成して、そのコマンドボタンから「ファイルを開く」ダイアログを表示させてキャンセルする、ということなのですが…。 この操作をすると、実際ユーザーフォームを出したままセルに入力できる状態になるのですが、もしこの操作をしなくてもエクセル97で同じ状態になる方法がありましたら、教えていただけませんでしょうか? どうぞよろしくお願いいたします。