Страницы: 1
RSS
При перемещении/копировании строк через VBA меняются правила условного форматирования
 
Добрый вечер. Уже третий час мучаюсь с этой проблемой. Никак не получилось решить, поэтому прошу вас о помощи.
При перемещении несколько строк, можно ли как то сделать так чтобы не менялись правила условного форматирования? (приложил скрин)
Есть ли способ исправить это?

Вот код: (Я новичок в VBA, поэтому код не идеален. Но сам код работает)
Код
Private Sub переместитьвверх_Click()

    
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim endRow As Long
    Dim selectedIndex As Long
    
    selectedIndex = список.ListIndex
    If selectedIndex <= 0 Then Exit Sub
    

    For i = 1 To Склад.Cells(Rows.count, "A").End(xlUp).row
        If Склад.Cells(i, "A") = ">" Then
            selectedIndex = selectedIndex - 1
            If selectedIndex < 0 Then Exit For
        End If
    Next i
    

    If i > 1 Then

        endRow = i + 1
        Do While endRow <= Склад.Cells(Rows.count, "A").End(xlUp).row And Склад.Cells(endRow, "A") <> ">"
            endRow = endRow + 1
        Loop
        endRow = endRow - 1
        

        j = i - 1
        Do While j > 1 And Склад.Cells(j, "A") <> ">"
            j = j - 1
        Loop
        

        For k = i To endRow
            Склад.Rows(k).Cut
            Склад.Rows(j).Insert Shift:=xlDown
            j = j + 1
        Next k
    End If


    UpdateList
End Sub

Изменено: Ayubov28 - 11.07.2024 17:49:52
 
После запуска этого кода, правила меняются на эти (скрин приложил)
 
Никто не знает? Все еще пробую разные варианты, но не получается у меня
 
Цитата
Ayubov28 написал:
Никто не знает?
Никому не охота файл-пример делать и воспроизводить в нем Вашу проблему. По картинкам тут редко лечат
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Никто не знает?
При удалении/вставке строк Excel автоматически меняет формулы с учётом изменений. Соответственно, если есть желание, чтобы формулы в УФ не менялись, надо бросить вставлять/удалять строки, и начать читать значения/формулы в массив, обрабатывать массив и потом сливать его на лист.
 
И/Или отказаться от УФ и закрашивать ячейки макросом, если уж их используете
Согласие есть продукт при полном непротивлении сторон
 
удалил все правила с листа, потом добавил после обработки кода заново, работает как надо. Но вот только насчет оптимизации не уверен.
Код
' в начале кода
Склад.Range("A:D").FormatConditions.Delete
Код
' в конце кода
Склад.Range("A:D").FormatConditions.Add Type:=xlExpression, Formula1:="=$A1 = "">"""
    Склад.Range("A:D").FormatConditions(Склад.Range("A:D").FormatConditions.count).SetFirstPriority
    Склад.Range("A:D").FormatConditions(1).Borders(xlLeft).LineStyle = xlNone
    Склад.Range("A:D").FormatConditions(1).Borders(xlRight).LineStyle = xlNone
    Склад.Range("A:D").FormatConditions(1).Borders(xlTop).LineStyle = xlNone
    Склад.Range("A:D").FormatConditions(1).Borders(xlBottom).LineStyle = xlNone
    With Склад.Range("A:D").FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 49407
        .TintAndShade = 0
    End With
    Склад.Range("A:D").FormatConditions(1).StopIfTrue = False
Страницы: 1
Наверх