標題:
[發問]
如何將表單內的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
Option Explicit
Public WithEvents mTxt As MSForms.TextBox
Public WithEvents mCmd As MSForms.CommandButton
Public WithEvents mPage As MSForms.MultiPage
Private Sub mPage_Change()
MsgBox mPage.Pages(mPage.Value).Caption
End Sub
複製代碼
Userform
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(1 To 1)
For k = 1 To 1
Set mPg(k) = New myClass
Set mPg(k).mPage = Me.Controls("MultiPage" & k)
Next
End Sub
複製代碼
但是應該是 Userform 上有很多個 MultiPage 時這樣寫才有用吧。
作者:
GBKEE
時間:
2013-10-26 17:11
回復
5#
dechiuan999
[attach]16480[/attach]
表單已Dim mPg() As New myClass
不需再 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
樓主的附檔表單頂端已Dim mPg() As New myClass
可不需再重複 Set mPg(1) = New myClass
複製代碼
如果附檔表單頂端只是Dim mPg() As myClass
當然是需再 Set mPg(1) = New myClass
那附檔表單頂端只須是Dim mPg()
複製代碼
作者:
dechiuan999
時間:
2013-10-29 08:42
本帖最後由 dechiuan999 於 2013-10-29 08:43 編輯
回復
6#
stillfish00
謝謝二位大大的
作者:
GBKEE
時間:
2013-10-29 16:40
回復
10#
dechiuan999
Private Sub mPage_Change()
Select Case mPage.Value
Case 0
EmailForm1.TextBox2.SetFocus
Case 1
EmailForm1.TextBox4.SetFocus
End Select
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
一般模組
Option Explicit
Dim A As New Class1
Sub Ex()
ActiveSheet.[A1] = "THE TEST"
With A
Set .sPage = ActiveSheet
MsgBox .XX.[A1].Text
End With
End Sub
複製代碼
物件類別模組
Option Explicit
Public XX As Object
Public Property Set sPage(setPage As Object)
Set XX = setPage
MsgBox XX.Name
End Property
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)