• ベストアンサー

Excel VBAなんですけど…

ワークシートにコマンドボタンを配置して、ユーザーフォームを呼ぶという、簡単なことを忘れてしまいました。どなたか教えてください。お願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

私もkirara_pikaさんと同じ方法でやっています。コントロールツールボックスのボタンしか使いませんが。 UserForm1.Show の後に『Rangeメソッドは失敗しました』が出るのなら、ユーザーフォームは呼べているはずです。 Initializeのコードや内部のコードに不具合がないでしょうか。シート名を指定しないでRangeを使っている可能性もあります。 また、Excelのバージョンが分かりませんが  コマンドボタンのTakeFocusOnClickプロパティを False にする。または、  コードの最初で ActiveCell.Activate 等を実行してワークシートをアクティブにする ことで状況が変わるかもしれません。

northcurlcurl
質問者

お礼

>>"Initializeのコードや内部のコードに不具合がないでしょうか" 全くそのとおりでした。Rangeの名前をExcel側で変えていたにもかかわらず、VBAでも変えるのを忘れていました。ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

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

回答No.1

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

northcurlcurl
質問者

補足

それがなぜだか"Rangeメソッドは失敗しました"と出るんです。フォームのボタンを使っても同じで、cmdBttnからSubルーティンを呼んで、そこからユーザーフォームを呼んでも、だめみたいなんです。どうすれば良いんでしょう? ps UserFormを呼ぶ時って、最初にLoad ufしてから、uf.showじゃないんでしたっけ?

関連するQ&A