
フォームにタブコントロールを置いて、ページを6つにして、コマンドボタンを置きました。
3から6ページをVBAで削除する事は可能でしょうか?
(1・2は残したいです)
「ページを削除する」というVBAコードがわかりません。
Private Sub コマンド7_Click()
Dim ctl As Control
For Each ctl In Forms(Me.Name).Controls
If ctl.ControlType = acPage Then
Debug.Print ctl.Name
'ここでページを削除したい
End If
Next ctl
End Sub
あと、もしかしてデザインビューでないと削除できないですか?
であれば、DoCmd.OpenForm Me.Name, acDesign
を追加しようと思っています。
ご回答よろしくお願いします。

No.3ベストアンサー
- 回答日時:
No.2です。
解決に至ったのでしたら何よりです。
> 自分でウィザードを作成することが出来るのですか?
はい、可能です。
ただ、必ずしも簡単ではありませんが(汗)、ある意味、こういった
「普段のデータベース用のプログラムではやらないこと」をやるのは
いろいろと勉強になります。
(なので、igetanmzztさんもそういったことをされているのかなと
思った次第です)
こちらのサイトが、非常にわかりやすいかと思いますので、もしも
興味をお持ちでしたら、参考までに:
http://www.tsware.jp/study/indexv2.htm
No.2
- 回答日時:
> 「ページを削除する」という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枚を削除したいのです。
削除ではなく非表示にも出来るのですね。うまく出来ました!
ちなみに
「独自ウィザードを作成されているのであれば」
の意味がよくわからないのですが、
自分でウィザードを作成することが出来るのですか?
No.1
- 回答日時:
ヘルプに載ってるのは
『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
「自身を自身中のコードで
デザインモードで開いて変更は出来ません。」
と言うのは、フォームモジュールでは変更できないという事ですね。
添付のコード、うまく出来ました!ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAのコントロールの種類...
-
ExcelVBAでListViewが使用できない
-
複数のコマンドボタン(VBAで)...
-
VBA ユーザーフォームの Keypre...
-
変数をコントロール型で使用す...
-
Labelコントロールの(左右)余...
-
VB6のユーザーコントロールの受...
-
【keybd_event】について
-
VBAでドラッグ・アンド・ドロップ
-
(VBA)スピンボタンの大量...
-
ユーザーフォームで動的(Me.Con...
-
WEBユーザーコントロール
-
サーバー上のブックを開けない...
-
ユーザーフォームにランプをつ...
-
OCXって何ですか?
-
ユーザーコントロールのイベン...
-
ASP.NET(C#)実体のないコントロ...
-
行方不明になるコントロール
-
Shapeコントロールの.NET移行方法
-
MSFlexGridのようなコントロール
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAのコントロールの種類...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
'ckbl' コントロールは作成され...
-
カメラスクロールするのを動画...
-
VBA ユーザーフォームの Keypre...
-
vb.netで画面のコントロールId...
-
エクセル・VBA CheckBoxのオブ...
-
chr関数の呼び出しで「プロ...
-
エクセルVBAでオプションボタン...
-
Groupboxの配下のコントロール...
-
エクセル コントロールツール...
-
Labelコントロールの(左右)余...
-
チェックボックスをオンにした...
-
Excel VBA で Richtextboxを使...
-
アクセス特有の書き方?
-
(VBA)スピンボタンの大量...
-
ActiveX DLL と ActiveXコント...
-
C# ユーザコントロール内のボタ...
-
Excel VBA 動的に作成したチェ...
おすすめ情報