[[20150914234154]] 『マルチページの特定のページを削除する』(原人ザボーガー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マルチページの特定のページを削除する』(原人ザボーガー)

 こんばんは、よろしくお願いいたします。

 先日の↓の質問の続きのような質問です。

[[20150903011516]] 『テキストファイル保存で文字化けが起きる』

 ↓のようにユーザーフォームのマルチページにページとテキストボックスを追加しています。

 各ページにはテキストボックス一つしか配置していません。
 また、ページ内のテキストボックスにはイベントを割り付けていません。

 いまやろうとしているのは、不要になったページを削除する、ということです。
 ネット検索しても、VBAヘルプで調べても、ページ内のコントロールの削除方法は出てくる
 のですが、ページ自体の削除に関する記述は出てきません。

 複数あるページの内、特定のページを削除、ということは出来るのでしょうか?
 ご存知の方、ご教示お願いいたします。

 Private Sub CommandButton1_Click()
  Dim ctrl As Object
  Dim pg As Object
  With Me.MultiPage1
    Set pg = .Pages.Add
    With pg
     Set ctrl = .Controls.Add("Forms.TextBox.1")
     With ctrl
      .Top = 0
      .Left = 0
      .Height = Me.MultiPage1.Height - 20
      .Width = Me.MultiPage1.Width - 10
      .MultiLine = True
      .ScrollBars = fmScrollBarsBoth
      .Value = Now 'ここをテキストファイル内容取得に変更
     End With
    End With
  End With
 End Sub 

 ’ユーザーフォーム起動時マルチページにテキストボックスを追加
 Private Sub UserForm_Initialize()
  Dim ctrl As Object
  Dim pg As Object
  With Me.MultiPage1
    Set pg = .Page1
    With pg
     Set ctrl = .Controls.Add("Forms.TextBox.1")
     With ctrl
      .Top = 0
      .Left = 0
      .Height = Me.MultiPage1.Height - 20
      .Width = Me.MultiPage1.Width - 10
      .MultiLine = True
      .ScrollBars = fmScrollBarsBoth
      .Value = Now
     End With
    End With
  End With
 End Sub

< 使用 Excel:Excel2007、使用 OS:WindowsVista >


 マルチページには、各ページを集めた Pagesコレクションがありますよね!!
 このPagesコレクションには、Removeメソッドがあります。これを使えば、ページの削除ができます。

 調べてみてください。

(ichinose ) 2015/09/15(火) 04:26


 ichinoseさん、ご回答ありがとうございます。

 教えていただきましたキーワードを検索したら↓がヒットしました。

http://vbafrs.com/common/doc/main.php?contentsno=201004

 ここの記述を参考に↓のようにしたらアクティブなページを削除できました。
 ありがとうございました。

 If Me.MultiPage1.Pages.Count = 1 Then Exit Sub
 Me.MultiPage1.Pages.Remove Me.MultiPage1.Value
(原人ザボーガー) 2015/09/15(火) 07:32

 >Pagesコレクションには、Removeメソッドがあります。
 ちょっとしたバグ発見 FrameやMultipageには、有名なバグがありますが、今回のバグ(バグだと思う)は
 回避策はありますが・・・。

 MultiPage1.Pages.Remove メソッドの引数は、Pagesコレクションの位置(Index)又は、Pageオブジェクト名
 を指定することができます。インデックスとキーで操作できる 一般的なコレクションの機能なのですが・・。

 この時、
 Removeメソッドでインデックス指定する場合は、問題ないのですが、キー(オブジェクト名)で削除する場合に
 問題が発生します。

 MultiPage1.Pages.Remove 1  'インデックス指定は問題なし

 MultiPage1.Pages.Remove "Page1"  ’キー(オブジェクト名)指定の場合、条件により不具合

 Pageオブジェクトで   

 Pages("Page1").Name=Pages("Page1").Caption  の場合は、

 MultiPage1.Pages.Remove "Page1"  で、正しく処理されます

 Pages("Page1").Name<>Pages("Page1").Caption  の場合は、

 MultiPage1.Pages.Remove "Page1"  で、正しくページが削除されません。

 詳しく記述すると この条件下で最初に  MultiPage1.Pages.Remove "Page1" を実行すると、

 エラーにはなりませんが、ページが削除されません。Pagesコレクションからは、削除されているのですが、
 その実態が削除されません。 コレクションから削除され、実態は削除されない、この現象から
 オートメーションエラーなどが発生することもありますし、ないのにあるのですから、
 この矛盾がエラーになります。

 オブジェクトをメンバーにするコレクションだとありそうなエラーですけど・・・。

(ichinose ) 2015/09/17(木) 14:04


 ichinoseさんご回答ありがとうございます。

 最初、ページやコントロールの指定をオブジェクト名で行ってたのですが、
 ページの削除や追加を繰り返していくと不具合が起きてきたので、ページ
 やコントロールの指定をインデックスなどで指定するように変えました。
(原人ザボーガー) 2015/09/17(木) 19:16

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.