返回列表 上一主題 發帖

[發問] 如何將表單內的multipage增設物件類別呢?

[發問] 如何將表單內的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

謝謝各位大大!

mPage2.rar (11.56 KB)

回復 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
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 12# GBKEE


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

TOP

感謝   前輩提供~看過受益良多!!!

TOP

回復 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
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

回復 6# stillfish00
謝謝二位大大的

TOP

回復 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()
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

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

TOP

回復 5# dechiuan999

  1. 表單已Dim mPg() As New myClass
  2. 不需再 Set mPg(1) = New myClass
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 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 時這樣寫才有用吧。

TOP

        靜思自在 : 一個缺口的杯子,如果換一個角度看它,它仍然是圓的。
返回列表 上一主題