2012-09-12 93 views
1

我已經創建了一個包含兩個複選框的用戶窗體。我希望能夠做不同的事情,取決於每個框是否被選中。但是,無論我做什麼,它都會告訴我複選框的原始值(false和false)。這裏是連接到單擊CommandButton1的代碼:如何使用VBA從Excel用戶窗體讀取複選框的值

Private Sub CommandButton1_Click() 

ReadData 

End Sub 

這裏READDATA:

Sub ReadData() 

Dim myForm As UserForm 
Set myForm = UserForms.Add("ComplaintEntryForm") 

Debug.Print (myForm!CheckBox1.Name) 
Debug.Print (myForm!CheckBox1.Value) 
Debug.Print (myForm!CheckBox2.Name) 
Debug.Print (myForm!CheckBox2.Value) 

End Sub 

無論怎麼複選框被選中,立即窗口始終會顯示此:

VBA.UserForms.Add("ComplaintEntryForm").Show 
CheckBox1 
False 
CheckBox2 
False 

我有整個操作的截圖,但它不會讓我上傳它,因爲我是一個新用戶。

回答

1

試試這個方法來加載和顯示形式(這正好處於正常模塊):

Sub main() 

Dim myForm As ComplaintEntryForm 

Set myForm = New ComplaintEntryForm 
myForm.Show 
Set myForm = Nothing 

End Sub 

在用戶窗體自己的模塊,添加如下內容:

Private Sub CheckBox1_Change() 

readData 

End Sub 

Private Sub CheckBox2_Change() 

readData 

End Sub 

Private Sub UserForm_Initialize() 

Me.CheckBox1.Value = True 
Me.CheckBox2.Value = False 

End Sub 

Private Sub readData() 

Debug.Print Me.CheckBox1.Name 
Debug.Print Me.CheckBox1.Value 
Debug.Print Me.CheckBox2.Name 
Debug.Print Me.CheckBox2.Value 

End Sub 

我初始化將這兩個複選框設置爲Initialize事件中的特定值。這意味着我們確信表格將在

+0

開始的狀態嘿,非常感謝你的迴應;那完美的作品。我只是想避免在UserForm自己的模塊中輸入太多的代碼,因爲我正在創建UserForm,而我知道如何將代碼添加到UserForm的唯一方法是這樣的: With TempForm.CodeModule .InsertLines 1,「Sub CommandButton1_Click()」 。插入行2,「'做東西」 。插入行3,「結束小分隊」 結束 這是一個痛苦,尤其是引用。但事實證明,我只需要18行,所以這沒問題。非常感謝您的幫助! – user1664313

相關問題