- ベストアンサー
VBAでタブのページを削除する方法とは?
- フォームにタブコントロールを置いて、6つのページを作成し、3から6ページをVBAで削除する方法について教えてください。
- 「ページを削除する」というVBAコードがわかりません。具体的なコードを教えてください。
- デザインビューでないとページを削除できない場合、どのような対応が必要ですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 解決に至ったのでしたら何よりです。 > 自分でウィザードを作成することが出来るのですか? はい、可能です。 ただ、必ずしも簡単ではありませんが(汗)、ある意味、こういった 「普段のデータベース用のプログラムではやらないこと」をやるのは いろいろと勉強になります。 (なので、igetanmzztさんもそういったことをされているのかなと 思った次第です) こちらのサイトが、非常にわかりやすいかと思いますので、もしも 興味をお持ちでしたら、参考までに: http://www.tsware.jp/study/indexv2.htm
その他の回答 (2)
- DexMachina
- ベストアンサー率73% (1287/1744)
> 「ページを削除する」というVBAコードがわかりません。 自前でフォームウィザードを作られているのか、『困り度』が『暇なときにでも』に されているところをみると単純に興味があってなのかもしれませんが、本当に 「削除」が必要なのか、ちょっと気になったので・・・(汗) タブコントロールのページには、それぞれ個別に「Visible」プロパティがあり、 これで表示/非表示の切替が可能です。 また、これを使用して動的に切り替えるのであれば、削除と違って、デザイン ビューにする必要もありませんし、同一フォームからの実行も可能です。 '対象フォーム上に設置した『コマンド1』コマンドボタンから3ページ目以降を '非表示にする想定のコード Private Sub コマンド1_Click() 'エラー発生時に「エラー処理」の行に飛ばすための宣言 On Error GoTo エラー処理 Dim oTab As TabControl, oPages As Pages, i As Integer Const cTabName As String = "タブ0" '対象タブの名前 Const cRemain As Long = 2 '残すページ数 '対象タブコントロールのPagesコレクションを変数に格納 Set oTab = Me.Controls(cTabName) Set oPages = oTab.Pages '指定したページ以降を不可視化 For i = 2 To (oPages.Count - 1) oPages(i).Visible = False Next 終了処理: '念のため、明示的に変数を解放 Set oPages = Nothing Set oTab = Nothing '通常時に「エラー処理」を実行させないための処理 Exit Sub エラー処理: 'エラー発生時はその内容をMsgBoxで表示の上、「終了処理」に移動 MsgBox Err.Number & ":" & Err.Description Resume 終了処理 End Sub ・・・以上、です。 なお、独自ウィザードを作成されているのであれば、コントロール全般に対して Call Application.DeleteControl(フォーム名, コントロール名) で削除が可能ですので、併せて参考まで。 (なお、こちらについては、nicotinismさんご紹介のPages.Removeと同様に デザインビューへの切替が必要です)
お礼
困り度についてはものすごく困っているわけではなく 知ってる人がいればいいな、解決できればいいな、と言う意味でした。 実はタブが30枚くらいってそのうち28枚を削除したいのです。 削除ではなく非表示にも出来るのですね。うまく出来ました! ちなみに 「独自ウィザードを作成されているのであれば」 の意味がよくわからないのですが、 自分でウィザードを作成することが出来るのですか?
- nicotinism
- ベストアンサー率70% (1019/1452)
ヘルプに載ってるのは 『Page オブジェクトは、フォーム (フォーム: Access のデータベース オブジェクトの 1 つ。フォームでは、アクションを実行するコントロールや、フィールドのデータを入力、表示、または編集するためのコントロールを配置することができます。)のデザイン ビュー (デザイン ビュー: データベース オブジェクトのデザインを表示するビュー。テーブル、クエリ、フォーム、レポート、およびマクロで使用できます。デザイン ビューでは、新しいデータベース オブジェクトの作成や、既存のオブジェクトのデザイン変更を行うことができます。)でのみ、タブ コントロールの Pages コレクションから削除できます。』 『Pages コレクションのインデックスは 0 で始まります。タブ コントロールの左端ページのインデックスは 0 です。左端ページのすぐ右側のページのインデックスは 1 です。以降も同様です。』 また、自身を自身中のコードでデザインモードで開いて変更は出来ません。 なので、別のフォームや標準モジュールから こんな風でしょうか。 Sub delPage() Dim myForm As String Dim frm As Form Dim i As Long myForm = "フォーム1" DoCmd.OpenForm myForm, acDesign Set frm = Forms(myForm) For i = frm!タブ0.Pages.Count - 1 To 2 Step -1 frm!タブ0.Pages.Remove (i) Next DoCmd.Close acForm, myForm, acSaveYes Set frm = Nothing End Sub
お礼
「自身を自身中のコードで デザインモードで開いて変更は出来ません。」 と言うのは、フォームモジュールでは変更できないという事ですね。 添付のコード、うまく出来ました!ありがとうございました。
お礼
ありがとうございました。