Board logo

標題: [發問] 如何將表單內的multipage增設物件類別呢? [打印本頁]

作者: dechiuan999    時間: 2013-10-25 13:15     標題: 如何將表單內的multipage增設物件類別呢?

各位大大好:

  小弟在表單內的增設MULTIPAGE
有PAGE1及PAGE2並在USERFORM_INITIALIZE
增設此物件類別時,出現錯誤內容如下

執行階段錯誤-2147024809(80070057)
找不到指定物件,請問應如何修正
USERFORM1_INITIALIZE內的語法呢?

語法如下:

物件類別

Option Explicit

Public WithEvents mTxt As MSForms.TextBox
Public WithEvents mCmd As MSForms.CommandButton
Public WithEvents mPage As MSForms.MultiPage

Private Sub mCmd_Click()
   
    MsgBox mCmd.Name
   
End Sub

表單

Option Explicit
Dim mTb() As New myClass
Dim mCd() As New myClass
Dim mPg() As New myClass
Dim co1 As New Collection
Dim co2 As New Collection

Private Sub UserForm_Initialize()   
    Dim i As Long
    Dim j As Long
    Dim k As Long
   
    ReDim mTb(1 To 2)
    For i = 1 To 2
        Set mTb(i) = New myClass
        Set mTb(i).mTxt = Me.Controls("Textbox" & i)
        co1.Add mTb(i).mTxt
    Next
   
    ReDim mCd(1 To 6)
    For j = 1 To 6
        Set mCd(j) = New myClass
        Set mCd(j).mCmd = Me.Controls("CommandButton" & j)
        co2.Add mCd(j).mCmd
    Next
   
    ReDim mPg(0 To 1)
    For k = 0 To 1
        Set mPg(1) = New myClass   '語法錯誤
        Set mPg(1).mPage = Me.Controls("MultiPage" & k)
    Next            
End Sub

謝謝各位大大!
作者: stillfish00    時間: 2013-10-25 13:49

回復 1# dechiuan999
1.  Set mPg(k) = New myClass,你把k寫成1了
2.  UserForm上只有一個MultiPage物件,即MultiPage1,
      "PDF檔"和"AZLB檔"這兩個分頁是 MultiPage1 底下的 Page 物件,
      例如分頁"PDF檔"可用 : MultiPage1.Page1 或 MultiPage1.Page(0) 表示
作者: dechiuan999    時間: 2013-10-25 14:41

回復 2# stillfish00


    大大您好:

小弟試著將語法改成如下
也是不行呢?

ReDim mPg(1 To 2)
   
Set mPg(1) = New myClass
Set mPg(1).mPage = UserForm1.MultiPage1.Pages(0)
        
Set mPg(2) = New myClass
Set mPg(2).mPage = UserForm1.MultiPage1.Pages(1)

另小弟想在物件類別增列
Private Sub mPage_Change()
       
End Sub
內容為當使用者選取
page時能得知是
page1的名稱pdf檔
或是
page2的名稱azlb檔
是否可請大大能提供修正的
語法讓小弟學習multipage
在物件類別如何運作


謝謝您!
作者: stillfish00    時間: 2013-10-25 15:43

本帖最後由 stillfish00 於 2013-10-25 15:44 編輯

回復 3# dechiuan999
你要知道使用者選取時是哪一個分頁,可以在change判斷
Private Sub MultiPage1_Change()
  msgbox MultiPage1.Pages(MultiPage1.Value).Caption
End Sub
作者: dechiuan999    時間: 2013-10-25 17:35

本帖最後由 dechiuan999 於 2013-10-25 17:38 編輯

回復 4# stillfish00


    謝謝大大的說明
小弟是了解在一段模組內
如何操作multipage
。但小弟是想試著在類別模組
內來操作multipage
。因此,小弟也在類別模組
裡宣告
Public WithEvents mPage As MSForms.MultiPage
但不知如何來操作mpage此物件對象。

謝謝大大!
作者: stillfish00    時間: 2013-10-25 19:56

本帖最後由 stillfish00 於 2013-10-25 20:04 編輯

回復 5# dechiuan999
我知道你要的是
myClass
  1. Option Explicit

  2. Public WithEvents mTxt As MSForms.TextBox
  3. Public WithEvents mCmd As MSForms.CommandButton
  4. Public WithEvents mPage As MSForms.MultiPage

  5. Private Sub mPage_Change()
  6.   MsgBox mPage.Pages(mPage.Value).Caption
  7. End Sub
複製代碼
Userform
  1. Private Sub UserForm_Initialize()
  2.    
  3.     Dim i As Long
  4.     Dim j As Long
  5.     Dim k As Long
  6.    
  7.     ReDim mTb(1 To 2)
  8.     For i = 1 To 2
  9.         Set mTb(i) = New myClass
  10.         Set mTb(i).mTxt = Me.Controls("Textbox" & i)
  11.         co1.Add mTb(i).mTxt
  12.     Next
  13.    
  14.     ReDim mCd(1 To 6)
  15.     For j = 1 To 6
  16.         Set mCd(j) = New myClass
  17.         Set mCd(j).mCmd = Me.Controls("CommandButton" & j)
  18.         co2.Add mCd(j).mCmd
  19.     Next
  20.    
  21.     ReDim mPg(1 To 1)
  22.     For k = 1 To 1
  23.         Set mPg(k) = New myClass
  24.         Set mPg(k).mPage = Me.Controls("MultiPage" & k)
  25.     Next
  26. End Sub
複製代碼
但是應該是 Userform 上有很多個 MultiPage 時這樣寫才有用吧。
作者: GBKEE    時間: 2013-10-26 17:11

回復 5# dechiuan999

[attach]16480[/attach]
  1. 表單已Dim mPg() As New myClass
  2. 不需再 Set mPg(1) = New myClass
複製代碼

作者: stillfish00    時間: 2013-10-27 12:36

本帖最後由 stillfish00 於 2013-10-27 12:37 編輯

回復 7# GBKEE
宣告這邊是多了,但我覺得先
Dim mPg() As myClass
後面再
Set mPg(1) = New myClass
顯式地創建實體會比較好,也可以明確知道Class_Initialize()被觸發位置
作者: GBKEE    時間: 2013-10-27 14:03

回復 8# stillfish00
  1. 樓主的附檔表單頂端已Dim mPg() As New myClass
  2. 可不需再重複 Set mPg(1) = New myClass
複製代碼
  1. 如果附檔表單頂端只是Dim mPg() As myClass
  2. 當然是需再 Set mPg(1) = New myClass
  3. 那附檔表單頂端只須是Dim mPg()
複製代碼

作者: dechiuan999    時間: 2013-10-29 08:42

本帖最後由 dechiuan999 於 2013-10-29 08:43 編輯

回復 6# stillfish00
謝謝二位大大的
作者: GBKEE    時間: 2013-10-29 16:40

回復 10# dechiuan999
  1. Private Sub mPage_Change()
  2.     Select Case mPage.Value
  3.     Case 0
  4.          EmailForm1.TextBox2.SetFocus
  5.     Case 1
  6.         EmailForm1.TextBox4.SetFocus
  7.     End Select
  8. End Sub
複製代碼

作者: ui123    時間: 2013-10-29 19:18

感謝   前輩提供~看過受益良多!!!
作者: dechiuan999    時間: 2013-10-30 14:18

回復 12# GBKEE


    謝謝版主大大。
小弟對物件類別總是不得
其門而入,對自已提問的問題
也常有不知所云。請版主大大見諒。
小弟仍有不了解之處是
已將textbox增設了物件類別
Public WithEvents mTxt As MSForms.TextBox
Public Property Set Tb(setTb As MSForms.TextBox)
    Set mTxt = setTb
End Property
此用途又為何呢?
作者: GBKEE    時間: 2013-11-2 14:04

回復 14# dechiuan999
一般模組
  1. Option Explicit
  2. Dim A As New Class1
  3. Sub Ex()
  4.     ActiveSheet.[A1] = "THE TEST"
  5.     With A
  6.         Set .sPage = ActiveSheet
  7.         MsgBox .XX.[A1].Text
  8.     End With
  9. End Sub
複製代碼
物件類別模組
  1. Option Explicit
  2. Public XX As Object
  3. Public Property Set sPage(setPage As Object)
  4.     Set XX = setPage
  5.     MsgBox XX.Name
  6. End Property
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)