2014-10-05 91 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

我不知道您的工作表指定方法的一些模塊級變量指向不同的工作表,所以我包括使用工作表名稱(一個或多個)一個註釋替代。