Страницы: 1
RSS
Макрос срабатывает при изменении ячеек на всем листе, а не в прописанном диапазоне
 
Добрый вечер, господа.

Такой проблем у меня. Не могу понять почему этот макрос срабатывает при изменении на всем листе, а не в прописанном в коде диапазоне (A9:A10000).
В итоге при любом изменении на листе срабатывает макрос.
Код
Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Intersect(Range("A9:A10000"), Target) Is Nothing Then

    del_space ' - тут все нормально, этот код никак не воздействует

  End If


If Not Intersect(Target, Columns(1)) Is Nothing Then
    Dim arrA(), I&, J&, splitA
    On Error Resume Next
    arrA = Range("A9:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
    With CreateObject("Scripting.Dictionary")
        For I = 1 To UBound(arrA)
            splitA = Split(arrA(I, 1))
            For J = 0 To UBound(splitA)
                If Not IsEmpty(splitA(J)) Then
                    iTemp = .Item(splitA(J))
                End If
            Next
        Next
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        Range("B9:C9").Resize(UBound(.Keys) + 1) = Application.Transpose(.Keys)
    End With
    With Me.Sort
        .SortFields.Add Key:=Range("B:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Apply
    End With
End If


Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub






Предварительно большое спасибо за помощь!
 
Макрос
 
Karataev, Без End if не будет работать.
               Даже если эту строку убрать (она в принципе лишняя), то будет все так же:

Код
If Not Intersect(Target, Columns(1)) Is Nothing Then

P.S Не понимаю такой фигни, уже второй или третий раз так. Я не исправил код по вашему образцу в своем изначальном коде. Ничего не изменилось, все так же работает.

Потом копирую Ваш и работает. Хотя код абсолютно идентичен. Что за черти?)

P.S Теперь вроде нормально, Спасибо!

Изменено: Fsociety_ - 02.07.2019 22:53:56
 
У конструкции If .. End If несколько способов написания. Об этом написано в любом справочнике по VBA.

Цитата
Fsociety_ написал:
Даже если эту строку убрать (она в принципе лишняя), то будет все так же:
Макрос
Изменено: Karataev - 02.07.2019 22:54:26
 
Цитата
Fsociety_ написал:

If Not IsEmpty(splitA(J)) Then
Почему 'IsEmpty'?
Это условие всегда будет равно 'Not False'.
Посмотрите пожалуйста:
Код
Sub abc_xyz()
    Dim splitA, i As Long, indx As Long
    
    splitA = Split(" asf asfa asf asf asf asf ")
    indx = UBound(splitA)
    
    For i = 0 To indx
        Debug.Print "splitA(" & i & ") = " & Chr(34) & splitA(i) & Chr(34)
        Debug.Print "IsEmpty(splitA(" & i & ")) = " & IsEmpty(splitA(i))
        Debug.Print "TypeName(splitA(" & i & ")) = " & TypeName(splitA(i))
        Debug.Print "----------------------------"
    Next
End Sub

'IsEmpty' используется не для этого.
Страницы: 1
Наверх