VBA Excel – 简化为了使用IF语句

我有一个comboboxGSMListType )具有不同的variables“A”,“A – K”,“B”,“C”等…链接到一个列表框AvailableNumberList )在combobox中的select。 combobox有32个不同的variables,它们在32张不同的页面上调用。 以下是代码示例。

  • “A”收集表单A_Regular中的数据并将其项目添加到列表框中
  • “A – K”收集表A_K中的数据,并将其项目添加到列表框中
  • “B”收集表B_Regular中的数据,并将其项目添加到列表框中
  • “C”收集表C_Regular中的数据,并将其项目添加到列表框等等…

有没有办法简化下面提到的代码? 该表是function齐全,但代码是一团糟。

Private Sub GSMListType_Change() Dim TypeLookup As Double 'If listing has changed, clear AvailableNumberList and insert new data If GSMListType.ListIndex > -1 Then AvailableNumberList.Clear If GSMListType.Value = "A" Then TypeLookup = Application.WorksheetFunction.CountIf(A_Regular.Range("A:E"), GSMListType.Value) With AvailableNumberList For k = 2 To TypeLookup + 1 .AddItem A_Regular.Range("A" & k).Value Next k End With ElseIf GSMListType.Value = "A - K" Then TypeLookup = Application.WorksheetFunction.CountIf(A_K.Range("A:E"), GSMListType.Value) With AvailableNumberList For k = 2 To TypeLookup + 1 .AddItem A_K.Range("A" & k).Value Next k End With ElseIf GSMListType.Value = "B" Then TypeLookup = Application.WorksheetFunction.CountIf(B_Regular.Range("A:E"), GSMListType.Value) With AvailableNumberList For k = 2 To TypeLookup + 1 .AddItem B_Regular.Range("A" & k).Value Next k End With ElseIf GSMListType.Value = "C" Then TypeLookup = Application.WorksheetFunction.CountIf(C_Regular.Range("A:E"), GSMListType.Value) With AvailableNumberList For k = 2 To TypeLookup + 1 .AddItem C_Regular.Range("A" & k).Value Next k . . . End With End If End If End Sub 

我不认为这通过任何实质性的措施来改善你的原始代码示例,但是通过减less重复的部分来完成整理。

Private Sub GSMListType_Change() Dim TypeLookup As Long, ws As Worksheet 'If listing has changed, clear AvailableNumberList and insert new data If GSMListType.ListIndex > -1 Then With GSMListType Select Case .Value Case "A" Set ws = A_Regular 'Sheets("A_Regular") ????? Case "A - K" Set ws = A_K Case "B" Set ws = B_Regular Case "C" Set ws = C_Regular Case Else 'do nothing End Select TypeLookup = Application.CountIf(ws.Range("A:E"), .Value) End With With AvailableNumberList .Clear For k = 2 To TypeLookup + 1 .AddItem ws.Range("A" & k).Value Next k End With End If Set ws = Nothing End Sub

我不确定您的工作表指定方法是指向各种工作表的某个模块范围的variables,所以我包含一个使用工作表名称的注释替代方法。