如果在 VBA 的另一个下拉框中选择,则从下拉框中删除项目

猎人21188

我在 Powerpoint 中有一个用户表单,上面有 5 个页面(顶部的选项卡,您单击的每个页面都会将您带到同一用户表单中的一个新页面)。我在每一页上都有一个组合框下拉菜单。它们都是从同一位置填充的(vba 代码中的一个模块)。这是存储下拉选项列表的代码:

Sub HazardTypeSevere()

'List of items to include in the Severe dropdown.

Dim strlist As String
     'Put them in an Array declared as Public
     strlist = "Damaging Winds,Large Hail,Tornadoes"
     rayNames = Split(strlist, ",")

End Sub

在我的用户表单代码中,这是填充下拉列表的代码:

Private Sub HazardType2_DropButtonClick()
Call DropdownOptions.HazardTypeSevere

'List all the severe hazard type dropdown options in Hazard 2


'This is where I am trying to tell it to remove whatever is selected in the 
'HazardType1 dropdown from the HazardType2 dropdown.
If HazardType1 <> "" Then 'If anything is selected in the HazardType1 
'dropdown...
HazardType2.RemoveItem (HazardType1.Value) 'Remove the item that is 
'selected in HazardType1
End If

Dim L As Long

    If HazardType2.ListCount = 0 Then
        With HazardType2
        .Clear
        For L = 0 To UBound(rayNames)
            .AddItem rayNames(L)
        Next L
        .Value = rayNames(0)
        End With
    End If

End Sub

当我运行上面的代码时,我收到“无效参数”错误。'HazardType1.Value' 确实显示了在 HazardType1 下拉列表中选择的内容。

如果没有编写单独的项目列表来调用以填充下拉列表,我不确定这是否可行。但这是不可能的,因为下拉框中有很多选项。

感谢您查看此内容!

锡锅
Private Sub UserForm_Initialize()
 ComboBox1.List = Split(" ,1,2,3,4,5", ",")
 ComboBox2.List = Split(" ,1,2,3,4,5", ",")
 ComboBox3.List = Split(" ,1,2,3,4,5", ",")
 ComboBox4.List = Split(" ,1,2,3,4,5", ",")
 ComboBox5.List = Split(" ,1,2,3,4,5", ",")
End Sub

Private Sub ComboBox1_Change()
   ManageDropDowns (1)
End Sub

Private Sub ComboBox2_Change()
   ManageDropDowns (2)
End Sub

Private Sub ComboBox3_Change()
   ManageDropDowns (3)
End Sub

Private Sub ComboBox4_Change()
   ManageDropDowns (4)
End Sub

Private Sub ComboBox5_Change()
   ManageDropDowns (5)
End Sub

Sub ManageDropDowns(IDNum As Integer)
   '
   ' Presuming we have 5 Comboboxes
   ' This routine ensures there are initially 6 choices for each ComboBox - a blank empty choice and 5 values 1-5
   ' This will then ensure no 2 ComboBoxes can make the same choice from 1-5 (all can choose blank)
   '
   Dim UsedList As String, FullList As String, Left2Use As String
   Dim FullArray As Variant, UsedArray(1 To 5) As String

   UL1 = ""
   UL1 = UL1 & IIf(Trim(ComboBox2.Value) = "", "", "" & Trim(ComboBox2.Value) & ",")
   UL1 = UL1 & IIf(Trim(ComboBox3.Value) = "", "", "" & Trim(ComboBox3.Value) & ",")
   UL1 = UL1 & IIf(Trim(ComboBox4.Value) = "", "", "" & Trim(ComboBox4.Value) & ",")
   UL1 = UL1 & IIf(Trim(ComboBox5.Value) = "", "", "" & Trim(ComboBox5.Value) & ",")
   While Right(UL1, 1) = ","
      UL1 = Left(UL1, Len(UL1) - 1)
   Wend

   UL2 = ""
   UL2 = UL2 & IIf(Trim(ComboBox1.Value) = "", "", "" & Trim(ComboBox1.Value) & ",")
   UL2 = UL2 & IIf(Trim(ComboBox3.Value) = "", "", "" & Trim(ComboBox3.Value) & ",")
   UL2 = UL2 & IIf(Trim(ComboBox4.Value) = "", "", "" & Trim(ComboBox4.Value) & ",")
   UL2 = UL2 & IIf(Trim(ComboBox5.Value) = "", "", "" & Trim(ComboBox5.Value) & ",")

   UL3 = ""
   UL3 = UL3 & IIf(Trim(ComboBox2.Value) = "", "", "" & Trim(ComboBox2.Value) & ",")
   UL3 = UL3 & IIf(Trim(ComboBox1.Value) = "", "", "" & Trim(ComboBox1.Value) & ",")
   UL3 = UL3 & IIf(Trim(ComboBox4.Value) = "", "", "" & Trim(ComboBox4.Value) & ",")
   UL3 = UL3 & IIf(Trim(ComboBox5.Value) = "", "", "" & Trim(ComboBox5.Value) & ",")

   UL4 = ""
   UL4 = UL4 & IIf(Trim(ComboBox2.Value) = "", "", "" & Trim(ComboBox2.Value) & ",")
   UL4 = UL4 & IIf(Trim(ComboBox3.Value) = "", "", "" & Trim(ComboBox3.Value) & ",")
   UL4 = UL4 & IIf(Trim(ComboBox1.Value) = "", "", "" & Trim(ComboBox1.Value) & ",")
   UL4 = UL4 & IIf(Trim(ComboBox5.Value) = "", "", "" & Trim(ComboBox5.Value) & ",")

   UL5 = ""
   UL5 = UL5 & IIf(Trim(ComboBox2.Value) = "", "", "" & Trim(ComboBox2.Value) & ",")
   UL5 = UL5 & IIf(Trim(ComboBox3.Value) = "", "", "" & Trim(ComboBox3.Value) & ",")
   UL5 = UL5 & IIf(Trim(ComboBox4.Value) = "", "", "" & Trim(ComboBox4.Value) & ",")
   UL5 = UL5 & IIf(Trim(ComboBox1.Value) = "", "", "" & Trim(ComboBox1.Value) & ",")

   FullList = "1,2,3,4,5"
   FullArray = Split(FullList, ",")
   Left2Use = " ,"

   If IDNum <> 1 Then
      UsedList = UL1
      Left2Use = " "  ' Space
      For i = 0 To UBound(FullArray)
         iTxt = Trim("" & i + 1)
         If Not (InStr(1, UsedList, iTxt) > 0) Then
            ' Not Already Used - Add it to Left2Use
            Left2Use = Left2Use & "," & iTxt
         End If
      Next i
      ComboBox1.List = Split(Left2Use, ",")
   End If
   If IDNum <> 2 Then
      UsedList = UL2
      Left2Use = " "  ' Space
      For i = 0 To UBound(FullArray)
         iTxt = Trim("" & i + 1)
         If Not (InStr(1, UsedList, iTxt) > 0) Then
            ' Not Already Used - Add it to Left2Use
            Left2Use = Left2Use & "," & iTxt
         End If
      Next i
      ComboBox2.List = Split(Left2Use, ",")
   End If
   If IDNum <> 3 Then
      UsedList = UL3
      Left2Use = " "  ' Space
      For i = 0 To UBound(FullArray)
         iTxt = Trim("" & i + 1)
         If Not (InStr(1, UsedList, iTxt) > 0) Then
            ' Not Already Used - Add it to Left2Use
            Left2Use = Left2Use & "," & iTxt
         End If
      Next i
      ComboBox3.List = Split(Left2Use, ",")
   End If
   If IDNum <> 4 Then
      UsedList = UL4
      Left2Use = " "  ' Space
      For i = 0 To UBound(FullArray)
         iTxt = Trim("" & i + 1)
         If Not (InStr(1, UsedList, iTxt) > 0) Then
            ' Not Already Used - Add it to Left2Use
            Left2Use = Left2Use & "," & iTxt
         End If
      Next i
      ComboBox4.List = Split(Left2Use, ",")
   End If
   If IDNum <> 5 Then
      UsedList = UL5
      Left2Use = " "  ' Space
      For i = 0 To UBound(FullArray)
         iTxt = Trim("" & i + 1)
         If Not (InStr(1, UsedList, iTxt) > 0) Then
            ' Not Already Used - Add it to Left2Use
            Left2Use = Left2Use & "," & iTxt
         End If
      Next i
      ComboBox5.List = Split(Left2Use, ",")
   End If
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA:如果在中退出

来自分类Dev

如果在VBA中构建

来自分类Dev

变量 sumproduct 如果在 VBA 中

来自分类Dev

如果在Excel中重复则删除所有行-VBA

来自分类Dev

VBA如果在两列中包含两个条件

来自分类Dev

如果在Java中 如果在C ++中

来自分类Dev

如果在Java中 如果在C ++中

来自分类Dev

颜色字符串和括号(如果在vba中其值大于0)

来自分类Dev

如果在列中找不到字符串,則 VBA 錯誤處理

来自分类Dev

如果在另一个内存表中,则从内存表中删除

来自分类Dev

如果在Access VBA中创建的日期在15号之前或之后,则验证两个日期之间的月数

来自分类Dev

如果在iframe中删除html

来自分类Dev

如果在vba中包含特定字符串,如何遍历单元格并创建新行?

来自分类Dev

如果在vba中包含特定字符串,如何遍历单元格并创建新行?

来自分类Dev

如果在输入语句上选择

来自分类Dev

如果选择第二个下拉框,如何获取第一个下拉框的值

来自分类Dev

如果在Twig中嵌套

来自分类Dev

如果在Robot Framework中否则

来自分类Dev

如果在Netlogo环境中实现

来自分类Dev

如果在SQL中查询语句?

来自分类Dev

如果在树枝中声明

来自分类Dev

如果在Bash中声明

来自分类Dev

如果在方法或主体中声明?

来自分类Dev

如果在SQL Server中

来自分类Dev

如果在.map()中声明?

来自分类Dev

如果在Twig中嵌套

来自分类Dev

如果在SPIP中查询标签

来自分类Dev

如果在PHP中退出

来自分类Dev

如果在linq中声明