2017-02-21 18 views
0

У меня есть код для выполнения 2-х вещей: в первую очередь он сортирует элементы из списков данных, которые находятся в Листе 2 с «,» в желаемый диапазон ячеек, расположенных в Листе 1. Также, если пользователь выбирает один и тот же элемент, он удаляет его из выбранной ячейки.VBA excel Target.Address = Диапазон ячеек

Другой вариант кода - когда пользователь выбирает ячейки выпадающих списков (который находится в D2: F325, он должен увеличиваться на 100%, чтобы видеть элементы в списках (поскольку размеры его шрифта слишком малы, чтобы видеть)

в приведенном ниже коде работает почти идеально Потому, что масштабирование только тогда, когда я выбрать одну ячейку от требуемого диапазона:.

Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Count > 1 Then GoTo exitHandler 

If Target.Address = Range("XYZ").Address Then 
ActiveWindow.Zoom = 100 
[A5000] = "zoomed" 
ElseIf [A5000] = "zoomed" Then 
'Otherwise set the zoom to original 
ActiveWindow.Zoom = 70 
[A5000].ClearContents 
End If 

exitHandler: 
    Application.EnableEvents = True 
End Sub 


Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rngDV As Range 
Dim oldVal As String 
Dim newVal As String 
Dim strVal As String 
Dim i As Long 
Dim lCount As Long 
Dim Ar As Variant 
On Error Resume Next 
Dim lType As Long 
If Target.Count > 1 Then GoTo exitHandler 





lType = Target.Validation.Type 
If lType = 3 Then 
Application.EnableEvents = False 
newVal = Target.Value 
Application.Undo 
oldVal = Target.Value 
Target.Value = newVal 





    If oldVal = "" Then 
     'do nothing 
    Else 
     If newVal = "" Then 
      'do nothing 
     Else 
      On Error Resume Next 
      Ar = Split(oldVal, ", ") 
      strVal = "" 
      For i = LBound(Ar) To UBound(Ar) 
       Debug.Print strVal 
       Debug.Print CStr(Ar(i)) 
       If newVal = CStr(Ar(i)) Then 
        'do not include this item 
        strVal = strVal 
        lCount = 1 
       Else 
        strVal = strVal & CStr(Ar(i)) & ", " 
       End If 
      Next i 
      If lCount > 0 Then 
       Target.Value = Left(strVal, Len(strVal) - 2) 
      Else 
       Target.Value = strVal & newVal 
      End If 
     End If 
    End If 

End If 

exitHandler: 
Application.EnableEvents = True 
End Sub 

«XYZ» это имя ячейки D2 причины я попытался назвал это диапазон для выбора с этой функцией, но он не сработал.

Наконец, как Target.Adress можно выбрать весь диапазон D2: F325

Заранее спасибо

+0

У вас есть эта строка в начале вашего кода 'If Target.Count> 1 Затем GoTo exitHandler', если вы выберете более 1 ячейки, вы выйдете из' Sub' –

ответ

0
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.Count > 1 Then GoTo exitHandler 

If Not Application.Intersect(Target, Range("D2:F325")) Is Nothing Then 
    ActiveWindow.Zoom = 100 
    [A5000] = "zoomed" 
ElseIf [A5000] = "zoomed" Then 
'Otherwise set the zoom to original 
ActiveWindow.Zoom = 70 
[A5000].ClearContents 
End If 

exitHandler: 
    Application.EnableEvents = True 
End Sub 

Она работает довольно хорошо.

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