- ベストアンサー
Excel VBAなんですけど…
ワークシートにコマンドボタンを配置して、ユーザーフォームを呼ぶという、簡単なことを忘れてしまいました。どなたか教えてください。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私もkirara_pikaさんと同じ方法でやっています。コントロールツールボックスのボタンしか使いませんが。 UserForm1.Show の後に『Rangeメソッドは失敗しました』が出るのなら、ユーザーフォームは呼べているはずです。 Initializeのコードや内部のコードに不具合がないでしょうか。シート名を指定しないでRangeを使っている可能性もあります。 また、Excelのバージョンが分かりませんが コマンドボタンのTakeFocusOnClickプロパティを False にする。または、 コードの最初で ActiveCell.Activate 等を実行してワークシートをアクティブにする ことで状況が変わるかもしれません。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
Module1の部分はマクロの記録から得ました。 Module1に Worksheets("sheet1").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ , DisplayAsIcon:=False, Left:=225, Top:=20.25, Width:=54, Height:= 29.25).Select --------- Sheet1のClick Event Procedureに Private Sub CommandButton1_Click() UserForm1.Show End Sub
- kirara_pika
- ベストアンサー率33% (102/305)
1.Visual Basicのツールバーを表示しておきます。 2.Visual Basic Editorで別にユーザーフォームを作成しておきます。(フォーム名をUserForm1とします。) 3.コントロールツールボックスからコマンドボタンを選択して配置したいところにボタンを配置します。 (ボタンの名前をCommandButton1とします。) 4.配置したボタンをダブルクリックします。 (Private Sub CommandButton1_Click() ~End Subとなってると思います。) 5.Private Sub ~ から End Subの間にコードを記述します。 (例) Private Sub CommandButton1_Click() UserForm1.Show End Sub
補足
それがなぜだか"Rangeメソッドは失敗しました"と出るんです。フォームのボタンを使っても同じで、cmdBttnからSubルーティンを呼んで、そこからユーザーフォームを呼んでも、だめみたいなんです。どうすれば良いんでしょう? ps UserFormを呼ぶ時って、最初にLoad ufしてから、uf.showじゃないんでしたっけ?
お礼
>>"Initializeのコードや内部のコードに不具合がないでしょうか" 全くそのとおりでした。Rangeの名前をExcel側で変えていたにもかかわらず、VBAでも変えるのを忘れていました。ありがとうございました。