Vba 在Excel单元格中创建组合框
我想创建一个选择或下拉列表或组合框(无论你想叫它什么) 我不想使用UserForm,因为它在单元格上显示一个窗口,我希望它在单元格中示例(见图)Vba 在Excel单元格中创建组合框,vba,excel,combobox,Vba,Excel,Combobox,我想创建一个选择或下拉列表或组合框(无论你想叫它什么) 我不想使用UserForm,因为它在单元格上显示一个窗口,我希望它在单元格中示例(见图) 我想在组合框中选择PERRO时,单元格显示数字1,如果是GATO单元格显示数字2,如果是VACA单元格显示数字3。除了QHarr在评论中提供的链接,您可以尝试完全VBA解决方案,每次用户选择想要的单元格时,代码都会显示验证列表 为此,您必须: 删除并在每个单元格选择处放回验证规则 用列表中的索引替换列表项 因此,您需要同时处理工作表\u选择更改(
我想在组合框中选择PERRO时,单元格显示数字1,如果是GATO单元格显示数字2,如果是VACA单元格显示数字3。除了QHarr在评论中提供的链接,您可以尝试完全VBA解决方案,每次用户选择想要的单元格时,代码都会显示验证列表 为此,您必须:
- 删除并在每个单元格选择处放回验证规则
- 用列表中的索引替换列表项
工作表\u选择更改()
和工作表\u更改()
事件处理程序
在“工作表代码”窗格中放置以下代码
Option Explicit
Dim animals As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then ' if selected cell is the wanted one (change "$B$2" to any wanted address
Dim element As Variant
Dim position As Long
For Each element In animals 'loop through validation list
position = position + 1 'update index position
If element = Target.Value Then 'if current loop element matches cell content
Application.EnableEvents = False 'prevent subsequent sheet change (deleting and writing cell content) fire this event again and start an infinite loop
Target.Validation.Delete 'remove data validation
Target.Value = position ' write the element index position
Application.EnableEvents = True 'restore proper event handling
Exit For
End If
Next
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2" Then ' if selected cell is the wanted one (change "$B$2" to any wanted address
With Target
If hasValidation(.Cells) Then
.ClearContents 'clear any previous cell content
Else
animals = Array("Perro", "Gato", "Vaca", "Cerdo") 'set the validation list
.ClearContents 'clear any previous cell content
With .Validation 'set validation rules
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(animals, ",")
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End With
End If
End Sub
Function hasValidation(rng As Range) As Boolean
On Error Resume Next
hasValidation = rng.SpecialCells(xlCellTypeSameValidation).Cells.Count = 1
End Function
你有三个选择
With ComboBox
.AddItem "perro"
.AddItem "gato"
.AddItem "vaca"
.AddItem "cerdo"
End With
您可以创建一个带有条件的结果单元格
Select Case Combobox.value
Case "perro": range("a1")=1
Case "gato": range("a1")=2
Case "vaca": range("a1")=3
Case "cerdo": range("a1")=4
End Select
对于初学者来说,这很容易。如果您想将其“放在”单元格中,这就是数据验证。不确定是否可以从给定列表中返回项的索引。这可能是以下内容的重复:获取下拉列表中所选项的数量中的位置参见Doug Glancy的答案您可能只需要使用数据验证下拉列表和查找Excel函数,如
=Match(A1,{“PERRO”、“GATO”、“VACA”},0)
@Slai这在同一个单元格中如何工作?我真的很感兴趣,因为我想不出办法。有一个带有匹配公式的帮助列来返回索引,并将数据验证单元格设置为白色字体,这是我所能想到的最好办法。@QHarr我猜1、2、3在另一个公式中使用了。谢谢,第二个选项帮助我轻松地解决了问题。