2014-10-09 2 views
1

경우 내가 대신 두 번 이상 붙여 넣기의 정의 폼에 다른 하위의 기능에 통합 할에 하나 개의 서브에서 케이스 결과를 호출. 어떻게해야합니까?엑셀 VBA : 나는 아래에 언급 한 다른

  • GSMListType는 AvailableNumberList가

    Sub WsSelector() 
          Dim WSLookup as WorkSheet 
          With GSMListType 
          Select Case .Value 
           Case "A" 
            Set WSLookup = A_Regular 
           Case "A - K" 
            Set WSLookup = A_K 
           Case "A - MOT" 
            Set WSLookup = A_MOT 
            Case "B" 
            Set WSLookup = B_Regular 
           Case "C" 
            Set WSLookup = C_Regular 
           Case "D" 
            Set WSLookup = D_Regular 
           Case "D - DATA" 
            Set WSLookup = D_DATA 
           Case "D - MOT" 
            Set WSLookup = D_MOT 
           Case "E" 
            Set WSLookup = E_Regular 
           Case "F" 
            Set WSLookup = F_Regular 
           Case "G" 
            Set WSLookup = G_Regular 
           Case "H" 
            Set WSLookup = H_Regular 
           Case "I" 
            Set WSLookup = I_Regular 
           Case "J" 
            Set WSLookup = J_Regular 
           Case "J - DATA" 
            Set WSLookup = J_DATA 
           Case "K" 
            Set WSLookup = K_Regular 
           Case "L" 
            Set WSLookup = L_Regular 
           Case "M" 
            Set WSLookup = M_Regular 
           Case "N" 
            Set WSLookup = N_Regular 
           Case "O" 
            Set WSLookup = O_Regular 
           Case "P" 
            Set WSLookup = P_Regular 
           Case "P - MOT" 
            Set WSLookup = P_MOT 
           Case "Q" 
            Set WSLookup = Q_Regular 
           Case "R" 
            Set WSLookup = R_Regular 
           Case "S" 
            Set WSLookup = S_Regular 
           Case "T" 
            Set WSLookup = T_Regular 
           Case "U" 
            Set WSLookup = U_Regular 
           Case "V" 
            Set WSLookup = V_Regular 
           Case "W" 
            Set WSLookup = W_Regular 
           Case "X" 
            Set WSLookup = X_Regular 
           Case "Y" 
            Set WSLookup = Y_Regular 
           Case "Z" 
            Set WSLookup = Z_Regular 
          End Select 
         End With 
    

    전술 한 코드가 다른 서브로 반입한다

최종 서브 중 하나 이하 포함하는리스트 박스가

  • 콤보 상자를 인 위의 코드 :

    Private Sub GSMListType_Change() 
        Dim TypeLookup As Long, WSLookup As Worksheet 
        'If listing has changed, clear AvailableNumberList and insert new data 
        If GSMListType.ListIndex > -1 Then 
    
    Call SheetSelector 
    
    TypeLookup = Application.CountIf(WSLookup.Range("A:E"), GSMListType.Value) 
    
         With AvailableNumberList 
          .Clear 
          For k = 2 To TypeLookup + 1 
           .AddItem WSLookup.Range("A" & k).Value 
          Next k 
         End With 
        End If 
        Set WSLookup = Nothing 
    End Sub 
    
  • +0

    미안하지만 서브 우퍼에 복사하여 붙여 넣지 않아도 여러 하위에 'WsSelector'를 옮기라고 요청하고 있습니까? – BradyK

    +0

    @BradyK 예, 정확하게. –

    답변

    2

    원하는 워크 시트 개체의 이름을 반환하는 함수로 WsSelector 하위 변경할 수 있습니까?

    Function WsSelector(sTYP As String) 
        Select Case sTYP 
         Case "A" 
          WsSelector = A_Regular.Name 
         Case "A - K" 
          WsSelector = A_K.Name 
         Case "A - MOT" 
          WsSelector = A_MOT.Name 
         Case "Etc..." 
          'Etc... 
          'Etc... 
         Case Else 
          WsSelector = vbNullString 
        End Select 
    End Function 
    

    이제 선택한 워크 시트를 설정할 때이 기능을 호출 할 수 있습니다.

    Private Sub GSMListType_Change() 
        Set WSLookup = Sheets(WsSelector(GSMListType.Value)) 
        'lots of code here 
        Set WSLookup = Nothing 
    End Sub