フォームにコントロールをVBAで(コードから)追加したり、削除したり、
そんな操作をVBAから実行してみたくて、テスト/チャレンジしてみました。
AccessでフォームにコントロールをVBA(コード実行で)から追加
フォーム1の実行ボタンを押したら、
フォーム2のコントロール を 追加してみる
a.テキストボックスの追加
b.追加したテキストボックスにコントロールソースをセットしてみる
フォームをデザインモード
DoCmd.OpenForm "フォーム2", acDesign
acDesign で 開き
CreateControlでコントロールを追加してみました。
試行錯誤の動画 http://www.youtube.com/watch?v=qLKQ9UISxnQ
www.youtube.com
作成した、ソースコード
'コントロールを追加するテスト 'CreateControl の ヘルプからサンプルコードをコピーして作成。 'テストでテキストボックスを作成後、コントロールソースに=Now()で現在時刻の表示 Private Sub コマンド0_Click() 'デザインモードで開く DoCmd.OpenForm "フォーム2", acDesign 'CreateControl の ヘルプからコードをコピーして作成。 Dim ctlText As TextBox 'テキストボックスのコントロール Dim intDataX As Integer, intDataY As Integer ' 新しいコントロールの位置を設定します。 intDataX = 1000 intDataY = 2000 ' 既定サイズの非連結テキスト ボックスを、詳細セクションに作成します。 Set ctlText = CreateControl("フォーム2", acTextBox, , "", "", _ intDataX, intDataY) '上↑作成したテキストボックスのコントロールソースに値をセットしてみる ctlText.ControlSource = "=now()" 'コントロールソースのセット 'フォームを閉じる DoCmd.Close acForm, "フォーム2", acSaveYes '保存して閉じる End Sub
Access フォームのコントロールを削除する VBAコードで削除する
フォーム1の削除ボタンを押したら、
フォーム2のコントロールを消してみる
コントロールを消すには、
DeleteControl "フォーム名", "コントロール名"
で、消せました。
あとは、コントロールの数と名前の取り出しで、
数は Forms("フォーム2").Controls.Count
名前は、 Forms("フォーム2").Controls(n).Name
で取得できたので、組み合わせて使ってみました。
試行錯誤の動画 http://www.youtube.com/watch?v=-unZ87xIf7I
www.youtube.com
作成したソースコード
a.全て消す
DeleteControl "フォーム名", "コントロール名"
で、コントロールを消せたので、
Forms("フォーム2").Controls(n).Name
で、名前を取得して 使用しただけです。
'フォーム2 コントロールを全て消す テスト Private Sub コマンド1_Click() 'デザインモードで開く DoCmd.OpenForm "フォーム2", acDesign 'コントロールの数を知るには Forms("フォーム名").Controls.Count Dim n As Integer 'カウンター Dim strNAME As String For n = Forms("フォーム2").Controls.Count - 1 To 0 Step -1 '消すには、 DeleteControl "フォーム名", "コントロール名" strNAME = Forms("フォーム2").Controls(n).Name '対象のコントロール名 DeleteControl "フォーム2", strNAME Next 'フォームを閉じる DoCmd.Close acForm, "フォーム2", acSaveYes '保存して閉じる End Sub
b.コントロールの名前で判断して消す
頭2文字が 固定となっている コントロール以外をテストで削除してみた。
単純に、Forms("フォーム2").Controls(n).Nameで取りだした文字列を
Leftの2で2文字とって 比べただけでした。
'フォーム2 コントロールを全て消す テスト '.NAME の 頭2文字で判断して、削除するコントロールと残すコントロールを分けてみた Private Sub コマンド1_Click() 'デザインモードで開く DoCmd.OpenForm "フォーム2", acDesign 'コントロールの数を知るには Forms("フォーム名").Controls.Count Dim n As Integer 'カウンター Dim strNAME As String For n = Forms("フォーム2").Controls.Count - 1 To 0 Step -1 '消すには、 DeleteControl "フォーム名", "コントロール名" strNAME = Forms("フォーム2").Controls(n).Name '対象のコントロール名 If Left(strNAME, 2) <> "固定" Then '頭が固定 以外のコントロールを消す DeleteControl "フォーム2", strNAME End If Next 'フォームを閉じる DoCmd.Close acForm, "フォーム2", acSaveYes '保存して閉じる End Sub