2016-01-09 100 views
0

我在A1中放置了一個下拉菜單作爲「汽車」和「自行車」,一旦我選擇「汽車」或「自行車」,它應顯示sheet5中各個品牌的汽車和自行車列表。從下拉列表中選擇應顯示結果

從下拉列表中選擇「汽車」或「自行車」後,我必須運行一個宏。

但是,一旦我從下拉菜單中選擇任何一個,結果應該顯示而不是運行宏模塊。

下面我用模塊

Sub validation() 

    Dim MyList(2) As String 
    MyList(0) = "Cars" 
    MyList(1) = "Bikes" 
    MyList(2) = "" 

    With Range("A1").validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ 
      Operator:=xlBetween, Formula1:=Join(MyList, ",") 
    End With 

    If Range("A1") = "Cars" 
     Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17") 
     'the above line copies car brand names from sheet5 
    ElseIf Range("A1") = "Bikes" Then 
     Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11") 
     'the above line copies car brand names from sheet5 
    End If 
End Sub 

回答

0

你的代碼設置數據驗證細胞A1,但它實際上並沒有放任何東西A1,因此既列表複製。

你需要另一個,事件宏,監視更改單元格A1 進行復制。將這個在表代碼區

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A1 As Range 
    Set A1 = Range("A1") 
    If Intersect(A1, Target) Is Nothing Then Exit Sub 

    Application.EnableEvents = False 
     If Range("A1") = "Cars" Then 
      Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17") 
     ElseIf Range("A1") = "Bikes" Then 
      Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11") 
     End If 
    Application.EnableEvents = True 
End Sub 

編輯#1:

這個版本將避免警告消息,並試圖粘貼之前清理目標區域:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A1 As Range 
    Set A1 = Range("A1") 
    If Intersect(A1, Target) Is Nothing Then Exit Sub 

    Application.EnableEvents = False 
     Sheets("Sheet1").Range("B9:E17").Clear 
     If Range("A1") = "Cars" Then 
      Sheets("Sheet5").Range("Carsbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E17") 
     ElseIf Range("A1") = "Bikes" Then 
      Sheets("Sheet5").Range("Bikesbrand").Copy Destination:=Sheets("Sheet1").Range("B9:E11") 
     End If 
    Application.EnableEvents = True 
End Sub 
+0

感謝您的更正,但是由於汽車數據爲10個單元,自行車數據爲8個單元,因此如果選擇了自行車,則最後2個汽車單元保持相同。因此,我在下面的「行(」9: 10「)。EntireRow.Hidden = True」如下。但是如果我們選擇其他下拉菜單,它會問你是否要替換現有數據 如果Range(「A1」)=「Bike」Then Row(「8:10」)。EntireRow.Hidden = False –

+0

@SrinivasMantri容易避免Excel的警告....我會**編輯**我的回答 –

+0

@SrinivasMantri請參閱我的**編輯#1。** –

-2

如果我正確地理解了你,你希望宏在單元格A1中的選項被選中後立即運行自己?

+0

是的,這是我的要求 –