![](/img/trans.png)
[英]How can I create a "two-column" drop-down box that is not an ActiveX Control, where I can programmatically populate this box and use it in Excel VBA?
[英]How can I create a drop-down box programmatically in Excel?
我有一個工作表,其中sheet1下拉了。 誰能告訴我如何在同一個電子表格的sheet3中下拉菜單,假設它具有名為sheet1,sheet2和sheet3的三個表。 該程序如下所示。
Range("A1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$B$1:$B$3"/*Guess i need to make some change in this*/
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
非常感謝
使用錨作為您返回的記錄集的插入點定義一個動態的命名范圍 。
然后,在您希望具有下拉菜單的單元格中,鍵入=(named range name)-下拉選項將是從數據庫查詢返回的任何內容。
例:
使用公式=OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B$1:$B$20),1)
將命名范圍定義為“ Options1” =OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B$1:$B$20),1)
設置數據庫查詢以將結果返回到單元格B1
選擇單元格A1並打開“驗證”對話框(“數據”>“驗證”)
選擇列表,然后輸入=Options1
作為源
可以通過使用編程方式完成上述操作
ActiveWorkbook.Names.Add Name:="Options1", RefersTo:="=OFFSET(Sheet1!$B$1,0,0,COUNTA(Sheet1!$B$1:$B$20),1)"
With Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Options1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
當您在使用基本Excel功能進行下拉菜單(數據>驗證,然后選擇允許:列表)的同時記錄宏時,可以查看生成的代碼並根據自己的喜好對其進行編輯。 之后,您可以重新使用代碼。
從$ B $ 1:$ B $ 3創建一個“命名范圍”,然后在公式中使用命名范圍。 如果不想使用命名范圍,請在公式中指定工作表名稱,如= Sheet1!$ B $ 1:$ B $ 3。
有關在工作簿中命名單元格的幫助,請參閱“在工作簿中命名單元格”幫助主題,並查看“命名單元格或單元格區域”部分。
如果用於填充下拉列表的數據存在於每個工作表中,則可以選擇每個工作表並添加驗證。 請參見下面的代碼。
Sub Dropdowns1()
With Worksheets("Sheet1").Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$B$1:$B$3"
End With
With Worksheets("Sheet3").Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$B$1:$B$3"
End With
End Sub
如果用於填充下拉列表的數據僅存在於sheet1上 ,則需要首先創建一個引用該數據的命名范圍,然后使用該命名范圍來填充下拉列表。
下面的代碼創建一個命名范圍MyList ,該范圍引用Sheet1上的范圍B1:B3 。 然后,它使用Sheet1和Sheet3上的命名范圍來填充下拉列表。
Sub Dropdowns2()
ActiveWorkbook.Names.Add Name:="MyList", RefersTo:="=Sheet1!$B$1:$B$3"
With Worksheets("Sheet1").Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=MyList"
End With
With Worksheets("Sheet3").Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=MyList"
End With
結束子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.