アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームにタブコントロールを置いて、ページを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
を追加しようと思っています。

ご回答よろしくお願いします。

「VBAでタブのページを削除するには?アク」の質問画像

A 回答 (3件)

No.2です。


解決に至ったのでしたら何よりです。

> 自分でウィザードを作成することが出来るのですか?

はい、可能です。
ただ、必ずしも簡単ではありませんが(汗)、ある意味、こういった
「普段のデータベース用のプログラムではやらないこと」をやるのは
いろいろと勉強になります。
(なので、igetanmzztさんもそういったことをされているのかなと
 思った次第です)

こちらのサイトが、非常にわかりやすいかと思いますので、もしも
興味をお持ちでしたら、参考までに:
http://www.tsware.jp/study/indexv2.htm
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/12/21 23:39

> 「ページを削除する」という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と同様に
 デザインビューへの切替が必要です)
「VBAでタブのページを削除するには?アク」の回答画像2
    • good
    • 0
この回答へのお礼

困り度についてはものすごく困っているわけではなく
知ってる人がいればいいな、解決できればいいな、と言う意味でした。

実はタブが30枚くらいってそのうち28枚を削除したいのです。

削除ではなく非表示にも出来るのですね。うまく出来ました!

ちなみに
「独自ウィザードを作成されているのであれば」
の意味がよくわからないのですが、
自分でウィザードを作成することが出来るのですか?

お礼日時:2012/12/18 20:12

ヘルプに載ってるのは


『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
    • good
    • 0
この回答へのお礼

「自身を自身中のコードで
デザインモードで開いて変更は出来ません。」
と言うのは、フォームモジュールでは変更できないという事ですね。

添付のコード、うまく出来ました!ありがとうございました。

お礼日時:2012/12/18 20:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています