簡體   English   中英

Excel VBA組合框宏,用於更改列表項

[英]Excel VBA Combo Box Macro for Changing List Items

我在工作表“表”上創建了一個名為List的IntervieweeName: 在Sheet2上,名為IntervieweeName的列表

在工作表“評估”上,我創建了一個具有IntervieweeName的ListFillRange的組合框。 如果與所選IntervieweeName列表項相對應的列中存在“是”,組合框的作用是使工作表根據條件自動過濾。 這是工作表“評估”中的相關數據:工作表“評估”的是/否列

為了完成過濾器,我創建了此宏,它可以正常工作。

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列表中的名稱而不必修改宏?

這是我的第一個宏。 總菜鳥。 任何幫助表示贊賞,謝謝。

由於您沒有提供字段-字段的任何關系,因此沒有太多通用代碼。

您當前的代碼可以簡化為以下形式:

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

在這里,您可以在UserForm代碼窗格中放置的內容

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM