2016-08-02 26 views
0

我對VBA比較陌生,現在正在進行學習。我正在調整另一個項目的代碼以適應我的需求,並且遇到問題。如何清除組合框的行源,但保留選定的值

我有一個用戶窗體,它有一個由高級過濾器填充的combox框。我需要在下一行數據中使用此過濾器,所以我試圖清除組合框的行源,但保留選定的值。

ASales1_Change代碼中的所有內容都按預期工作。我得到了這個組合框的列表,以及我想要的第二個組合框。但我需要清除ASales2中的行源,以便將信息添加到第二行

以下是我對用戶表單的銷售訂單框架的第一行中框的代碼。

Private Sub ASales1_Change() 

On Error Resume Next 
Sheets("Products").Range("L4").Value = ASales1.Value 

'run advanced filter to change productlist named range 
Adv 

'clear values for product and quantity 
For X = 2 To 3 
Me.Controls("ASales" & X).Value = "" 
Next 

'set productlist as rowsource for second control 
Me.ASales2.RowSource = "ProductList" 


On Error GoTo 0 

End Sub 


Private Sub ASales3_Change() 
On Error Resume Next 

Me.ASales2.RowSource = "" 

On Error GoTo 0 
End Sub 

Image of userform set up

+0

'.rowsource =「SELECT * FROM產品列表,其中的ProductID = '就像那樣,不知道組合中有什麼獨特的字段,但是說它是ID,設置一個變量爲它的值,然後使用這個變量來構建標準,或者將它改爲值列表,並且只需添加選擇.AddI然後在使用tables/queries/sql時將其切換回 –

+1

在刪除RowSource之前創建一個String變量來存儲ComboBox值,然後在最後將ComboBox值設置爲該String變量?但是這不允許人們回去,如果你只是「鎖定」它('.Locked = True')? – PatricK

回答

0

可以通過存儲ASales2的選定ValueString可變實現這一點,請參見下面的代碼:

Private Sub ASales3_Change() 
    On Error Resume Next 
    Dim ASales2_Selected as String 

    ASales2_Selected = ASales2.Value 
    ASales2.RowSource = "" 

    ASales2.AddItem ASales2_Selected 'so the Item is added to the ComboBox 
    ASales2.Value = ASales2_Selected 'To show the value in the ComboBox 

    On Error GoTo 0 
End Sub 
+0

我把它寫成完全符合您的要求,並且在sales3中輸入數字後,sales2的價值就會消失。 – Seder

+0

@Seder你能更好地解釋你想做什麼,因爲這是我從你發佈的內容中解釋出來的。報價:「但我需要清除來自ASales2的行源」這是發生了什麼,報價「,但保留選定的值」。 – DragonSamu

+0

我確實需要清除行源,但仍然在ASales2中顯示值,並且它看起來像代碼應該做我想要的。但是,當我爲ASales3輸入一個值時,ASales2的組合框會完全清除並不顯示任何內容。 – Seder