2012-09-08 35 views
0

我正在製作一系列用戶表單,進行問卷調查。每個用戶窗體包含一對選項按鈕/複選框。該程序正常工作。 但是,當我再次啓動程序(不退出Excel)時,按照與前一用戶相同的方式填充單選按鈕和複選框。完成表單後清除單選按鈕

我與每個用戶窗體初始化試圖調用模塊:

Option base 0 

Sub clearBtns() 
Dim optBtn(10) As Variant 
optBtn(0) = "optA" 
optBtn(1) = "optB" 
optBtn(2) = "optC" 
optBtn(3) = "optD" 
optBtn(4) = "optE" 
optBtn(5) = "chkA" 
optBtn(6) = "chkB" 
optBtn(7) = "chkC" 
optBtn(8) = "chkD" 
optBtn(9) = "chkE" 
optBtn(10) = "chkF" 

Dim cnt As Integer 
For cnt = 0 To 10 
    If Not optBtn(cnt) Is Nothing Then 
    optBtn(cnt).Value = False 
    End If 
Next cnt 

End Sub 

不幸的是,這並不工作(錯誤424,所需的對象)。它可能與這部分有關:

If Not optBtn(cnt) Is Nothing Then 

必須有一個更簡單的方法來做到這一點。 對於額外的信息:完成每一個表格後,我用:

Me.Hide 
form_x.Show 

最後一種形式是不同的,有:

Unload Me 

也許有一個問題?

對於進一步的解釋:

Option Base 0 

Public Sub clearBtns() 

Dim optBtn(10) As Variant 
optBtn(0) = "optA" 
optBtn(1) = "optB" 
optBtn(2) = "optC" 
optBtn(3) = "optD" 
optBtn(4) = "optE" 
optBtn(5) = "chkA" 
optBtn(6) = "chkB" 
optBtn(7) = "chkC" 
optBtn(8) = "chkD" 
optBtn(9) = "chkE" 
optBtn(10) = "chkF" 

Dim formArray(27) As Variant 
formArray(0) = "page1_1" 
formArray(1) = "page1_2" 
formArray(2) = "page1_3" 
formArray(3) = "page2_1" 
formArray(4) = "page2_2" 
formArray(5) = "page2_3" 
formArray(6) = "page3_1" 
formArray(7) = "page3_2" 
formArray(8) = "page3_3" 
formArray(9) = "page4_1" 
formArray(10) = "page4_2" 
formArray(11) = "page4_3" 
formArray(12) = "page5_1" 
formArray(13) = "page6_1" 
formArray(14) = "page6_2" 
formArray(15) = "page6_3" 
formArray(16) = "page7_1" 
formArray(17) = "page7_2" 
formArray(18) = "page7_3" 
formArray(19) = "page8_1" 
formArray(20) = "page8_2" 
formArray(21) = "page8_3" 
formArray(22) = "page9_1" 
formArray(23) = "page9_2" 
formArray(24) = "page9_3" 
formArray(25) = "page10_1" 
formArray(26) = "page10_2" 
formArray(27) = "page10_3" 

Dim cnt As Integer 
Dim fCnt As Integer 

For fCnt = 0 To 27 
    For cnt = 0 To 10 
    On Error Resume Next 
     formArray(fCnt).Controls(optBtn(cnt)).Value = False 
    Next cnt 
Next fCnt 

End Sub 

上面的代碼不起作用。

Public Sub clearBtns() 

Dim optBtn(10) As Variant 
optBtn(0) = "optA" 
optBtn(1) = "optB" 
optBtn(2) = "optC" 
optBtn(3) = "optD" 
optBtn(4) = "optE" 
optBtn(5) = "chkA" 
optBtn(6) = "chkB" 
optBtn(7) = "chkC" 
optBtn(8) = "chkD" 
optBtn(9) = "chkE" 
optBtn(10) = "chkF" 

Dim cnt As Integer 

    For cnt = 0 To 10 
    On Error Resume Next 
     page1_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page1_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page1_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page2_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page2_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page2_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page3_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page3_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page3_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page4_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page4_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page4_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page5_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page6_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page6_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page6_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page7_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page7_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page7_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 
    For cnt = 0 To 10 
    On Error Resume Next 
     page8_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 
    For cnt = 0 To 10 
    On Error Resume Next 
     page8_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page8_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page9_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page9_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 
    For cnt = 0 To 10 
    On Error Resume Next 
     page9_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page10_1.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page10_2.Controls(optBtn(cnt)).Value = False 
    Next cnt 
cnt = 0 

    For cnt = 0 To 10 
    On Error Resume Next 
     page10_3.Controls(optBtn(cnt)).Value = False 
    Next cnt 

On Error GoTo 0 

End Sub 

上面的代碼工作,但它需要更多的代碼,是非常低效的。

+1

爲什麼你只是隱藏這些形式的所有選項按鈕?你能不能卸下它們? – whytheq

回答

4

必須有這樣做的更簡單的方法。對於額外的信息:完成 每個表單後,我用:

Me.Hide 
form_x.Show 

最後一種形式是不同的,有:

Unload Me 

而是對所有的形式使用Unload使用Hide的。 Userform_Initialize方法將只有當表單被實際初始化時調用 - 當您顯示以前隱藏的表單時,不會發生這種情況。

所以,當你做這些形式類似

form1.show 'initialize called 
'stuff that changes the form attributes 
form1.hide 
form1.show 'initialize NOT called 

您必須要麼使用Unload或移動你的代碼到每個用戶窗體的UserForm_Activate方法(這可能會導致你的其他問題,這取決於如何,這些都是實際上正在使用)。

+0

謝謝,它的工作! – bzoei

1

我假設你的數組:「OPTA」,「optB」等都是控制實際名稱。發生此錯誤的原因是optBtn(cnt)不引用對象,而只引用數組中的字符串值。與此代碼

For cnt = 0 To 10 
    If Not optBtn(cnt) Is Nothing Then 
    optBtn(cnt).Value = False 
    End If 
Next cnt 

此基礎上實現你似乎在想什麼,將這段代碼

On Error Resume Next 
For cnt = 0 To 10 
    Me.Controls(optBtn(cnt)).Value = False 
Next cnt 
On Error GoTo 0 
+0

「Me.Controls」到底是什麼?我想我必須用「UserForm」或類似的東西來替換「Me」,因爲這個代碼在模塊中? (我收到一條錯誤消息,說明我無法使用關鍵字'我') – bzoei

+0

如果我放置表單名稱(即form1)而不是「我」,它就可以工作。但是,當我把所有的表單名稱放在一個數組中,並把數組(x)而不是「我」不起作用。這是爲什麼?沒有數組我必須使用更多的代碼。 – bzoei

+0

對不起,我認爲你所有的代碼都在用戶表單中。如果你想爲你的表單使用一個數組,你需要使用像formArray(index).Controls(controlsArray(Index)).value = False這樣的格式。 –

0

這將重置(取消)在「Userform2Clear」

Dim opt as Control 
For Each opt In Userform2Clear.Controls 
    If TypeName(opt) = "OptionButton" Then opt = False 
Next