2014-10-05 93 views
0

我有一个组合框GSMListType)具有不同的变量“A”, “A - K”, “B”, “C”,等。链接到列表框AvailableNumberList),其根据组合框中的选择调用来自不同工作表的单元格。 组合框有32个不同的变量,它们调用32张不同的纸张。以下是代码示例。VBA的Excel - Simplifiying对于要起作用的IF语句

  • “A”收集在片A_Regular的数据,并添加其项目到列表框
  • “A - K”收集在片A_K的数据,并添加其项目到列表框
  • “B “收集在表B_Regular的数据,并增加了其项目到列表框
  • ‘C’收集在表C_Regular的数据,并增加了其项目到列表框 等等...

有一种简化b的方法elow提到的代码?该表格功能齐全,但代码混乱。

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 

回答

1

我不认为这提高了任何实质性的措施你原来的代码示例,但它通过减少重复的部分不整洁的事情了。

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

我不知道您的工作表指定方法的一些模块级变量指向不同的工作表,所以我包括使用工作表名称(一个或多个)一个注释替代。