- ベストアンサー
エクセルVBAのユーザーフォームでセルデータを表示させる方法
- Excel2007を使っているVBA初心者です。ユーザーフォームのテキストフォームにエクセル内のセルデータを表示させたいと考えていますが、コードを書いてもデータが表示されません。
- コードに問題があるか、設定が間違っているのかわかりません。どなたか解決方法を教えていただけませんか?
- ユーザーフォームは表示されるので、それ自体は正しく動作しているようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ユーザーフォームを表示しただけではユーザフォーム内のプロシージャはコールされません。 ユーザーフォーム内に以下のコードを追加してみて下さい。 「UserForm_Initialize」は、このユーザフォームを開いたときに実行されるプロシージャです。 Private Sub UserForm_Initialize() Call Farst End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Meキーワードについて http://www.keep-on.com/excelyou/2000lng1/200002/00020091.txt Sub test02() '標準モジュールです UserForm1.Show Me.TextBox1 = "A" Me.TextBox2 = "b" Me.TextBox3 = "c" End Sub 標準Meモジュールではエラーになります。 ーー Sub test01() UserForm1.TextBox1 = "A" UserForm1.TextBox2 = "b" UserForm1.TextBox3 = "c" UserForm1.Show ではフォームとテキストボックスも内容も表示されます。 ーー Sub test02() UserForm1.Show UserForm1.TextBox1 = "A" UserForm1.TextBox2 = "b" UserForm1.TextBox3 = "c" はテキストボックスに何も表示されません。 ーー Private Sub UserForm_Click() i = 1 UserForm1.TextBox1 = Worksheets(1).Cells(i, 1) UserForm1.TextBox2 = Worksheets(1).Cells(i, 2) UserForm1.TextBox3 = Worksheets(1).Cells(i, 3) End Sub クリックイベントでテキストボックスは更新される。 ーー Me.・・・については Private Sub UserForm_Click() i = 1 Me.TextBox1 = Worksheets(1).Cells(i, 1) Me.TextBox2 = Worksheets(1).Cells(i, 2) Me.TextBox3 = Worksheets(1).Cells(i, 3) End Sub はOK。 「>標準モジュールではMeと書かれてもどのオブジェクトかわからないのです」が、この場合はUserFormのイベントの中で、それがわかるからOK。 根底にある「クラス」という考えの理解が必要らしい? ーー ユーザーフォームを使うことは、初心者にはむつかしいと思いました。 ・表示する指示のタイミング ・Meはよく判ってから使う 点など。 コントロールのテキストの値などを代入で変えても即座に実行されるわけではないこと。 エクセルVBAでも値をセットする書かれたコードを実行しないと(VBEにコードを書いただけでは)セルの値は変わらない。
- mt2008
- ベストアンサー率52% (885/1701)
変数 ActiveRowを文字型で宣言しておきながら数値を代入したりと言うおかしな箇所は有りますが、一応ちゃんと動きそうなコードではあります。 エラーは出ていないのでしょうか? 出ていないとすると、そもそもこのプロシージャが呼ばれていないとかではないですか?
補足
お世話になります。 回答ありがとうございます。 エラーは特に表示されず、ユーザーフォームが表示されます。 すみませんが、「プロシージャーが呼ばれていない」という箇所をおしえてもらえませんでしょうか。 今のところ、コードはユーザーフォームに先ほど添付しましたコードしかにゅうりょくしていません。 実は、コードはすべてインターネットからのコピーペーストで書いており必要な部分のみ書き換えています。 ActiveRowのStringっ宣言はいらないということでしょうか。 これは、私が勝手にString宣言した箇所です。 何卒よろしくお願いいたします。
お礼
mt2008様 回答ありがとうございました。 コードを追加したところ意図した表示ができました。 ありがとうございました。