2011-12-12 58 views
0

假設我有一個包含形狀(方形,圓形,三角形)和顏色(紅色,藍色,綠色)的目錄。每種產品都有獨特的代碼(SR =紅色方塊,TB =藍色三角形等)。 在列A中,用戶可以分別輸入目錄號,在列B和C中分別輸入形狀和顏色。僅當一個單元格爲空時創建下拉列表

我想要的是,如果用戶鍵入目錄號,然後自動填寫B和C(我知道該怎麼做),或者,如果用戶沒有輸入貓。號碼,然後B和C有下拉菜單供他選擇。

我一直在試圖創建一個函數來做到這一點,但我一直未能成功。

這是我一直在做:

Function DropDown(Clave As String) 
    If Len(Clave) =0 Then 
     With ActiveCell.Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
       xlBetween, Formula1:="=Shapes" 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputTitle = "" 
      .ErrorTitle = "" 
      .InputMessage = "" 
      .ErrorMessage = "" 
      .ShowInput = True 
      .ShowError = True 
     End With 
    Else 
     'Code that finds the shape depending on Clave input 
    End If 
End Function 

到目前爲止,我已經成功地創建一個功能,如果用戶輸入貓。數字,那麼下拉菜單中只有一個元素具有正確的選項,但下拉菜單中的單元格是空的,直到用戶選擇菜單,這完全違背了目的。如果下拉菜單可以自動選擇唯一的選擇,或者作爲缺陷,則可以解決這個問題。

EDIT

上面的代碼能夠產生一個下拉如果輸入是空的,則問題是,一個彈出窗口立刻顯示數據不一致(至極是顯而易見的,因爲它顯示功能=DropDown(A1))。另一個問題是,如果用戶選擇其中一個選項,該功能將從單元中被擦除,並且功能會丟失。

我一直在想這個問題的解決方案,仍然無濟於事。一個想法是運行一個宏來檢查文檔中的所有下拉列表,如果列表中只有一個選項,宏將自動選擇它。事情是我想在飛行這樣做,這意味着如果用戶輸入貓。沒有。下拉選項被選中,但是如果他刪除它,則下拉列表變爲空白。

EDIT 2

我一直在想,我可以使用事件轉換器,其依賴於貓。號細胞,解決問題。例如,假設A1是Cat。沒有細胞。如果爲空,則在B1和C1中,宏代碼將檢測空單元格,並分別爲形狀和顏色創建下拉菜單。當用戶在單元格中鍵入內容時,事件轉換器會檢測到它,並且宏將填充代碼信息,因爲它檢測到A1不再爲空。

你們認爲什麼?我真的可以在這裏使用一些輸入。

+0

形狀命名範圍是指什麼? – vasek1

+0

'形狀= {「Square」; 「三角形」; 「Circle」}' – Pragabhava

+0

是的,你對Edit 2所做的是我可能會做的 – vasek1

回答

1

我最終做了我所建議的編輯2

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Target.Worksheet.Range("A1")) Is Nothing Then 
     If Range("A1") = "" Then 
      Range("B1") = "" 
      With Range("B1").Validation 
       .Delete 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
        xlBetween, Formula1:="=Shapes" 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .InputTitle = "" 
       .ErrorTitle = "" 
       .InputMessage = "" 
       .ErrorMessage = "" 
       .ShowInput = True 
       .ShowError = True 
      End With     
      Range("C1") = "" 
      With Range("C1").Validation 
       .Delete 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
        xlBetween, Formula1:="=Colors" 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .InputTitle = "" 
       .ErrorTitle = "" 
       .InputMessage = "" 
       .ErrorMessage = "" 
       .ShowInput = True 
       .ShowError = True 
      End With 
     Else 
      Range("B1").Validation.Delete 
      Range("C1").Validation.Delete 
      Range("B1") = 'Code that searches the correct shape depending on A1. 
      Range("B1") = 'Code that searches the correct color depending on A1. 
     End If 
    End If 
End Sub 

有沒有人有更好的解決方案?

相關問題