2016-09-27 45 views
-1

因此,我有一個宏,用戶可以根據用戶選擇的值執行操作。目前選擇是由於簡單的數據驗證(用戶只能從列表中選擇項目)。選擇完成後,用戶按下button1並執行一個code1宏。VBA excel - 在其他代碼中使用組合框中的值

代替數據驗證的我想用戶首先按提到button1,然後選擇從combobox1列表appeard作爲userform1一個項目,然後使用該值在代碼。

我發現了一些簡單的編碼組合框和用戶窗體。這工作本身,但我不知道如何實現這個我code1

這是我發現的組合框和用戶窗體代碼

Private Sub ComboBox1_Click() Unload UserForm1 End Sub Private Sub ComboBox1_AfterUpdate() Dim fruit As String fruit = ComboBox1.Value End Sub Private Sub Userform_Initialize() Dim fruits As Variant ReDim fruits(4) fruits = Array("banana", "mango", "orange", "berry") ComboBox1.ColumnCount = 1 ComboBox1.List() = fruits End Sub

code1只是需要從數據的單元格的值驗證和做它的東西。我喜歡它從組合框代替價值。把ComboBox1.Valuefruit而不是worksheets("Sheet1").range("a1").value在我的code1沒有幫助。

我不知道如何將這些代碼合併在一起。

你能幫忙嗎?

+0

讓我澄清一下,你想要一個按鈕,當被點擊時顯示一個窗體與組合框,並且當它的選定的代碼執行該代碼的值的時候? – jsanchezs

+0

如果你的'Sub code1()'不在'Userform(Code)'窗口中,你可以通過'UserForm1.ComboBox1.Value'得到組合框的值。 – Tyeler

+0

@Tyeler - 一旦表格被卸載,價值將不再可用 – YowE3K

回答

0

在你UserForm1代碼模塊中有你當前設置,除了擺脫變量fruit聲明的代碼,即

Option Explicit 
Private Sub ComboBox1_Click() 
    Unload UserForm1 
End Sub 
Private Sub ComboBox1_AfterUpdate() 
    fruit = ComboBox1.Value 
End Sub 
Private Sub Userform_Initialize() 
    Dim fruits As Variant 
    ReDim fruits(4) 
    fruits = Array("banana", "mango", "orange", "berry") 
    ComboBox1.ColumnCount = 1 
    ComboBox1.List() = fruits 
End Sub 

在你的主代碼模塊(模塊?)包括代碼,例如:

Option Explicit 

Public fruit As String 

Sub code1() 
    UserForm1.Show 
    MsgBox "You selected " & fruit 
End Sub 

Sub Button1_Click() 
    code1 
End Sub 

通過您的代碼模塊中聲明fruit(如Public),您的用戶窗體將能夠更新它的值,並且您的宏將能夠讀取該值。

+0

@ YowE3K它的工作。順便說一句,我如何在這裏格式的職位,所以我可以有一個像你這樣的彩色字體灰色字段的VBA代碼? – mm90

+0

@ mm90 - 格式化代碼的最簡單方法是粘貼代碼,確保其前後至少有一個空白行,然後突出顯示整個部分並按下Ctrl-K。 (它只是把它移到右邊,這樣每行的起始處至少有4個空格,所以更困難的方法是手動插入4個空格。)並附上小片段(在註釋等),以便它們看起來像'this'只是在他們之前和之後加上''標記。 – YowE3K