2016-03-17 60 views
2

我有用戶窗體,用於顯示項目的狀態。這些項目經歷了3個階段的過程。對於每個流程都有一個複選框,一旦物品通過舞臺就可以進行檢查。點擊後,用戶會看到一個「你確定嗎?」提示。如果用戶在SQL表中選擇「是」(vbYes),則該進程被標記爲已完成。跳過檢查框單擊()函數[VBA]

當我想顯示已經通過一個或多個階段的項目時,就會出現問題。當表單被初始化時,我將相關階段複選框的值設置爲「True」。但是,這會激活複選框的點擊功能,這不是打算的。有沒有辦法跳過這個?

代碼示例(而不是實際的代碼)

Private Sub UserForm_Initialize() 
    'Check check boxes, where stages are completed 
    If stage_1_completed Then 
     chkStage1.value = True 
    End If 
    If stage_2_completed Then 
     chkStage2.value = True 
    End If 
    If stage_3_completed Then 
     chkStage1.value = True 
    End If 

End Sub 

'This part should only run, if the check box is clicked manually 
Private Sub chkStage1_Click() 
    If chkStage1.value = True Then 
     'Prompt user if sure? 
     promptAnswer = MsgBox("Are you sure?", vbYesNo, "Continue?") 

     'Mark stage 1 as processed if yes 
     If promptAnswer = vbYes Then 
      set_stage_completed (1) 
     End If 

    End If 
End Sub 

回答

1

一種方法是使用一個變量來存儲狀態:

Public EnableEvents As Boolean 

Private Sub UserForm_Initialize() 
    Me.EnableEvents = False 

    '' 
    ' initialize form here 
    '' 

    Me.EnableEvents = True 
End Sub 

Private Sub chkStage1_Click() 
    If Not Me.EnableEvents Then Exit Sub 

    '' 
    ' handle event here 
    '' 
End Sub 
+0

謝謝,這是一個非常簡單而有效的方法解決問題。 – Noceo