2017-03-29 48 views
1

我在I8中有一個下拉框,並且在I18中有一個依賴下拉框,正指向I8。如果在I8中選擇蘋果1,當我點擊該框時,我將在I18中列出1-10水果。假設我在I18的盒子中選擇了Fruit 9。那麼,問題是,我決定改變我的蘋果2的I8答案,水果1-5將出現在I18,但6-10不會。現在在I18中,水果9仍然被選中,我將不得不點擊來改變它。根據VBA中的依賴下拉框清除單元格

如果我在選擇apple1的時候選擇了水果6-10,並且決定將其更改爲apple2,我的i18將會變爲空白。

這裏是我的代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
On Error Resume Next 
If Target.Address = "$I$8" Then 
    If Target.Address = "6" Or "7" Or "8" Or "9" Or "10" Then 
    If Target.Validation.Type = 3 Then 
    Application.EnableEvents = False 
    Target.Offset(10, 0).ClearContents 
    End If 
    End If 
End If 

exitHandler: 
Application.EnableEvents = True 
Exit Sub 
End Sub 

回答

2

的幾個問題。請參閱重構代碼中的說明。

Private Sub Worksheet_Change(ByVal Target As Range) 

'On Error Resume Next ->> delete this, it will not allow you to see real errors in your code 

If Target.Address = "$I$8" Then 

    'you ask it define Target.Address = 6, etc. Wrong property. You need Target.Value (
    'think about it, you just checked for Address = $I$8, so how can it also be 6 - 10 
    'also if you do want to use IF, syntax is Target.Value = 6 or Target.Value = 7 ... not 6 or 7 or ... 

    Select Case Target.value 'used this as it more efficient 

      Case 6 to 10 

      If Target.Validation.Type = 3 Then 
       Application.EnableEvents = False 
       Target.Offset(10, 0).ClearContents 
      End If 

    End Select 

End If 

exitHandler: 
Application.EnableEvents = True 
Exit Sub 
End Sub 
+0

我做了您建議的更改@ScottHoltzman。但是,現在我的I18值總是被清除,不管Case值如何。建議? – Derrick

+0

*(+ 1)*我特別喜歡'Case ... sellect'的方法。通常,我會檢查'如果Target.Value> = 6和Target.Value <= 10 Then'。但是這並沒有考慮到Target.Value可能是一個字符串或Empty或一個錯誤值的可能性。使用'Case .... Select'你不關心,也不必確定'Target.Value'實際上是在我通常使用的'If'之前的'IsNumeric()'。這種方式更清潔,更簡單,更直接。 – Ralph

+0

@Derrick - 你是否逐行通過代碼來測試行爲與期望值? –