[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マルチページの特定のページを削除する』(原人ザボーガー)
こんばんは、よろしくお願いいたします。
先日の↓の質問の続きのような質問です。
[[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.