2011-09-20 114 views
0

從數據驗證列表開始,我喜歡它位於希望顯示數據的單元格中。嘗試組合框和活動X組合框,並不喜歡他們不居住在單元格中。這與Access非常不同。這就是我試圖完成:Excel 2010中的數據驗證列表,組合框或活動X組合框?

我命名的範圍(員工)爲A4:C100,3列,標題TitleMI,和LN上一個名爲「的Emp」表。

我的表單位置是C6。我希望能夠顯示3列,並結束三列中的數據。例如,軍官J. Doe。

目前我正在使用數據驗證列表將數據輸入到Doe,J.,Officer的一列中並且它可以正常工作。該列表可能很長,我將需要按字母順序排列。

這是最好的方式還是我混淆與組合框和活動X組合框?

+0

爲什麼不能訪問?而通過驗證你的意思是你想要你的表單在C6(單元格?用戶表單?)移動數據並將其恰當地放入列表中?對它進行排序? – Brad

+0

它必須在Excel中。在Excel中,您可以使用數據驗證創建一個列表。它在想要列表的單元格中放入向下的箭頭。它是有限制的,所以範圍只能是一列。組合框和/或活動X組合框不在我希望列表出現的單元格中。你可以附上例子嗎?新的論壇。 –

+0

您可以使用代碼編輯您的問題。只要確保你使用了代碼標籤'{}'或'''。如果你使用表單控件而不是activeX控件,你可以很好地控制組合框的填充方式。因爲它是在一個工作表中,而不是一個用戶,因爲它具有95%的常規組合框功能。雖然他們不是真正駐留在單元格內,但可以強制解決問題並將其鎖定在單元格上。 – Brad

回答

0

在下拉列表中顯示所有3列的組合的唯一方法是連接第4列中的數據,例如使用下面的公式單元格D4

=A4&" "&B4&" "&C4 

...那麼你能說出的範圍D4:D100。您可能希望隱藏此列出於表達原因

實際上,您可能會希望避免命名整個範圍,因爲底部單元格可能爲空白/滾動比嚴格必要的尷尬。我會推薦dynamic ranges

下一個擴展練習可能是開發你的公式,以允許例如缺少中間名,例如

=A4&" "&IF(B4<>"",B4&" ","")&C4 

上面假定您可以手動對數據進行排序。如果數據未被手動分類,則需要使用VBA例如確保列D完成並且每次用戶離開Sheet(「Emp」)時創建命名範圍。可以嵌入在下面的代碼的Emp片...

Private Sub Worksheet_Deactivate 

For n = 4 to 100 
    If Cells(n, 1) <> "" Then 
    Cells(n, 4) = Cells(n, 1) & " " & Cells(n, 2) & " " & Cells(n, 3) 
    End If 
Next n 

Range(Cells(4,4),Cells(100,4)).Sort Key1:=Cells(4,4), Order1:=xlAscending, Header:=xlNo 

LastRow = 4 

Do Until Cells(LastRow + 1, 4) = "" 
LastRow = LastRow + 1 
Loop 

ActiveWorkbook.Names.Add Name:="Employee", RefersTo:=Range(Cells(4,4),Cells(LastRow,4)) 

End Sub 

表達用於分揀/添加可通過記錄宏和消除代碼作爲本expert Excel support video中找到的區域名稱。您的數據驗證將引用「員工」,即第四列中創建的範圍名稱

上面提出了許多假設,例如所有員工在第一列中都有數據,並且您需要添加邏輯測試,如果你不總是有所有三列的數據

這也可能是,當用戶點擊您的窗體的單元格C6時,您可能更喜歡創建員工範圍,因爲這可能會更健壯。我在使用Worksheet_Deactivate時的假設是'Employee'可能在電子表格中的其他地方使用

+0

嗨Ed - 我試過concatenate,然後我的查找公式無法正常工作。我在Emp表中填充了兩個單元格。這個論壇可以發送附件嗎? –

+0

嗨,編輯 - 當我的問題得到解答時,我沒有收到電子郵件。 –

0

就像這樣。將這段代碼放在你的工作表中,其中組合框是

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim topY As Integer, leftX As Integer 

    topY = ComboBox1.top 
    leftX = ComboBox1.left 

    Dim c As Range 
    Set c = Cells(5, 5) 
    c.Left = topY 
    c.Top = leftX 
    c.Width = ComboBox1.Width 
    c.Height = ComboBox1.Height 

End Sub 

如果你移動東西,它應該保持鎖定。或者你可以在你的Private Sub Worksheet_SelectionChange(ByVal Target As Range)活動中嘗試。