[英]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.