- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DataGridView のSUB制御)
DataGridViewのSUB制御の現象について
このQ&Aのポイント
- Windows 7 ProfessionalにMicrosoft Visual Basic 2010 Expressをインストールしました。今までVBAプログラムを移植しようとしています。
- DataGridViewのSUB制御に関して、いくつかの現象に悩まされています。例えば、プロジェクト内のForm3でDataGridView1を設置し、Form3_Loadやボタンのプロシージャーにコードを記述すると、正常に動作しますが、Module1で同じコードを記述し、呼び出すと表示されません。
- このような現象が起きた場合、Visual Basic 2010ではForm上のコントロールを制御することはできないのか、それとも別の方法が必要なのかについて教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Form3 が2つできているのでは? >Debug.Print(Form3.DataGridView1.Columns.Count) >を通過したところでは、カウント数がデータソースの行数になりますが この直前に Form3.Show のコードを入れたらどうなりますか? Form3 がもう一つ表示されたなら、インスタンスの管理ができていないということです。
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
回答No.2
>VBAだとインスタンス気にしないもので、勘違いしているかもしれません。 それがそもそもの間違い。プログラムを詳しく勉強してないからそうなってるだけ。 [Excel2003 VBA] Sub test() Dim f As UserForm3 Dim i As Long For i = 0 To 3 Set f = New UserForm3 f.Show vbModeless Next End Sub ※同じ位置に表示されるから、表示後にずらせば4つのUserForm3ができてるはず。 オブジェクトの仕組みはクラスが設計図で、実行時にメモリ上にインスタンス(実体) を生成しないと使えない。その手続きが New で、これは VBA でも同じなんだけど、 VB 系の言語では裏で勝手にお仕事するのが好きで、デフォルトインスタンスとか 呼ばれるものを勝手に作っちゃう。 この辺を理解できてない素人がシングルトンで画面を制御するなら、New を一切使わず、 全て VB が用意してくれるデフォルトインスタンスで統一すればいいのでは?
補足
> この直前に > Form3.Show のコードを入れたらどうなりますか? > Form3 がもう一つ表示されたなら、インスタンスの > 管理ができていないということです。 確かに、Form3がもうひとつ表示され、そちらは希望通りになっていました。 ボタンを押すと、用意したフォームを開く は、Excelだと、UserForm3.Show、AccessのVBAでは DoCmd.OpenForm "Form3" でしたが、Visual Basic 2010では Dim f As New Form3 f.Owner = Me f.Show のようにすると書かれていたので、この通り記述しましたが、これだと『インスタンスの管理ができていない』事になるのでしょうか? VBAだとインスタンス気にしないもので、勘違いしているかもしれません。