2013-02-15 2 views
1

У меня возникли проблемы с некоторыми вариантами выбора. У меня есть моя программа, работающая с именованными диапазонами. Я хочу, чтобы он заканчивался, если случай выбора не входит в ряд именованных диапазонов. Вот мой код, который работает правильно, когда пользователь выбирает правильные ячейки:VBA End, если пользователь выбрал ячейку, не входит в ряд именованных диапазонов

Private Sub WorkSheet_SelectionChange(ByVal Target As Range) 

If Not Intersect(Target, Range("ActionDisplay")) Is Nothing Then 
    Select Case Target.Column 
     Case 5: Call Find_Action_RPI_Info 
     Case 6: Call Find_Action_RPI_Info 
     Case 7: Call Find_Action_RPI_Info 
     Case 8: Call Find_Action_RPI_Info 
     Case 9: Call Find_Action_RPI_Info 
     Case 10: Call Find_Action_RPI_Info 
     Case 11: Call Find_Action_RPI_Info 
     Case 12: Call Find_Action_RPI_Info 
     Case Else 
    End Select 
End If 

If Not Intersect(Target, Range("ActionTotalDisplay")) Is Nothing Then 
    Select Case Target.Column 
     Case 13: Call Action_Total_RPI_Info 
     Case Else 
    End Select 
End If 

If Not Intersect(Target, Range("TotalDisplay")) Is Nothing Then 
    Select Case Target.Column 
     Case 5: Call CM_Action_Total_RPI_Info 
     Case 6: Call CM_Action_Total_RPI_Info 
     Case 7: Call CM_Action_Total_RPI_Info 
     Case 8: Call CM_Action_Total_RPI_Info 
     Case 9: Call CM_Action_Total_RPI_Info 
     Case 10: Call CM_Action_Total_RPI_Info 
     Case 11: Call CM_Action_Total_RPI_Info 
     Case 12: Call CM_Action_Total_RPI_Info 
     Case Else 
    End Select 
End If 

If Not Intersect(Target, Range("GroupTotal")) Is Nothing Then 
    Select Case Target.Column 
     Case 13: Call GroupDisplay 
    Case Else 
    End Select 
End If 


If Not Intersect(Target, Range("PastDue")) Is Nothing Then 
    Select Case Target.Column 
     Case 7: Call PastDueDisplay 
     Case 8: Exit Sub 
     Case 9: Call PastDueDisplay 
     Case 10: Exit Sub 
    Case Else 
    End Select 
End If 

If Not Intersect(Target, Range("PastDueTotal")) Is Nothing Then 
    Select Case Target.Column 
     Case 7: Call PastDueTotalDisplay 
     Case 8: Exit Sub 
     Case 9: Call PastDueTotalDisplay 
     Case 10: Exit Sub 
    Case Else 
    End Select 
End If 


End Sub 

Так в основном, если его не в каком-либо из указанных выше диапазонов, которые я хочу программу до конца. Я уверен, что есть лучшие способы делать то, что я пытаюсь, но я все это учу, поэтому я уверен, что он не идеален.

ответ

1

Вы можете попробовать что-то вроде этого (UNTESTED)

Private Sub WorkSheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Range("ActionDisplay")) Is Nothing Then 
     Select Case Target.Column 
      Case 5 To 12: Call Find_Action_RPI_Info 
     End Select 
    ElseIf Not Intersect(Target, Range("ActionTotalDisplay")) Is Nothing Then 
     If Target.Column = 13 Then Call Action_Total_RPI_Info 
    ElseIf Not Intersect(Target, Range("TotalDisplay")) Is Nothing Then 
     Select Case Target.Column 
      Case 5 To 12: Call CM_Action_Total_RPI_Info 
     End Select 
    ElseIf Not Intersect(Target, Range("GroupTotal")) Is Nothing Then 
     If Target.Column = 13 Then Call GroupDisplay 
    ElseIf Not Intersect(Target, Range("PastDue")) Is Nothing Then 
     Select Case Target.Column 
      Case 7, 9: Call PastDueDisplay 
     End Select 
    ElseIf Not Intersect(Target, Range("PastDueTotal")) Is Nothing Then 
     Select Case Target.Column 
      Case 7, 9: Call PastDueTotalDisplay 
     End Select 
    End If 
End Sub 
+0

Это очиститель спасибо. Somthing, я заметил часть: в конце для случая lastDue, эта часть теперь не fucntion. Он выписывает выходы. Случилось знать причину? это заставляет столбцы на 7, 9? – user2044180

+0

Если номер столбца os не 7 или 9, то он ничего не сделает и просто выйдет из подкаталога –

+0

Это должно быть что-то в моей проверке на проверку ошибок позже в моем коде. Я продолжаю копать. Я думаю, что это с моей проверкой проверки выбора, где я уверен, что пользователь выбирает одну ячейку. 'IF selection.cells.count> 1 then end', который может быть изгнан – user2044180

Смежные вопросы