【问题标题】:Excel VBA Combo Box Macro for Changing List Items用于更改列表项的 Excel VBA 组合框宏
【发布时间】:2016-08-05 02:57:10
【问题描述】:

我在工作表“表格”上创建了一个名为 IntervieweeName 的列表: IntervieweeName named list on Sheet2

在“评估”表上,我创建了一个组合框,其中 ListFillRange 为 IntervieweeName。如果与选定的 IntervieweeName 列表项对应的列中存在“是”,则组合框的目的是让工作表根据条件自动筛选。以下是“评估”表中的相关数据: Yes/No columns for Sheet "Assessment"

为了完成过滤,我创建了这个宏,它可以正常工作。

Private Sub cboIntervieweeName_Change()
    Dim IntervieweeName As String

    IntervieweeName = Me.cboIntervieweeName

    If IntervieweeName = "None" Then
        Selection.AutoFilter
    End If
    If IntervieweeName = "Chuck Fox" Then
        ActiveSheet.Range("B6:BL119").AutoFilter _
            field:=17, _
            Criteria1:="Yes", _
            VisibleDropDown:=True
    End If
     If IntervieweeName = "Rob Copeland 1" Then
        ActiveSheet.Range("B6:BL119").AutoFilter _
            field:=19, _
            Criteria1:="Yes", _
            VisibleDropDown:=True
    End If
     If IntervieweeName = "Rob Copeland 2" Then
        ActiveSheet.Range("B6:BL119").AutoFilter _
            field:=21, _
            Criteria1:="Yes", _
            VisibleDropDown:=True
    End If   
  If IntervieweeName = "Rob Copeland 3" Then
        ActiveSheet.Range("B6:BL119").AutoFilter _
            field:=23, _
            Criteria1:="Yes", _
            VisibleDropDown:=True
    End If
End Sub

我还创建了一个按钮宏来将组合框列表项重置为 0,即无。

Private Sub resetIntervieweeName_Click()
    cboIntervieweeName.ListIndex = 0
End Sub

这对于一个实例来说非常有用,但我的团队希望在未来的项目中使用它。如何修改工作表和/或宏以适应在 IntervieweeName 列表中更改名称而无需修改宏?

这是我的第一个宏。总菜鸟。任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: excel vba filter combobox macros


    【解决方案1】:

    由于您没有提供任何字段-列的关系,因此不可能有太多通用代码。

    您当前的代码可以简化为:

    Option Explicit
    
    Private Sub cboIntervieweeName_Change()
        Dim lField As Long
        Select Case Me.cboIntervieweeName.Value
            Case "Chuck Fox":       lField = 17
            Case "Rob Copeland 1":  lField = 19
            Case "Rob Copeland 2":  lField = 21
            Case "Rob Copeland 3":  lField = 23
            Case Else
                Selection.AutoFilter
                Exit Sub
        End Select
        ActiveSheet.Range("B6:BL119").AutoFilter field:=lField, Criteria1:="Yes", VisibleDropDown:=True
    End Sub
    

    【讨论】:

      【解决方案2】:

      您可以在用户窗体代码窗格中放置什么

      Option Explicit
      
      Private Sub cboIntervieweeName_Change()
          Dim lField As Long
          Dim dataRng As Range, IntervieweeNameRng As Range, found As Range
      
      
          With Worksheets("Assessment")
              Set dataRng = .Range("B6:BL119") '<== here set your "data" range, included first header row above the actual "data"
              Set IntervieweeNameRng = .Range("B5:BL5") '<== here set your "Assessment" sheet range where to search for combobox IntervieweeName selected
          End With
      
          If cboIntervieweeName.ListIndex > -1 Then
      
              Set found = IntervieweeNameRng.Find(What:=Me.cboIntervieweeName.Value, LookAt:=xlWhole, LookIn:=xlValues, MatchCase:=True)
              If found Is Nothing Then
                  dataRng.AutoFilter  'clear possible previous .Autofilter
              Else
                  lField = found.Column
                  With dataRng
                      .AutoFilter 'clear possible previous .Autofilter
                      .AutoFilter field:=lField, Criteria1:="Yes", VisibleDropDown:=True
                  End With
              End If
          Else
              dataRng.AutoFilter  'clear possible previous .Autofilter
          End If
      
      End Sub
      
      
      Private Sub resetIntervieweeName_Click()
          cboIntervieweeName.ListIndex = -1
      End Sub
      

      这样你可以修改IntervieweeName命名范围的范围和值,并且仍然有cboIntervieweeName组合框“更改”事件处理程序过滤器“评估”表

      我还修改了您的 resetIntervieweeName_Click 例程,以便“清除”cboIntervieweeName 组合框文本,将其 .ListIndex 属性设置为 1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-01
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2014-07-28
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多