Копирование строк с листа в условном формате и использование CF нового листа

#excel #vba

#excel #vba

Вопрос:

У меня есть макрос на vba, который вырезает строку из листа A и вставляет ее на лист B. Лист A и лист B имеют условное форматирование, но отличаются.

Это то, что делает мой макрос

 Sub MoveToSent()
Dim A As Long
Dim B As Long
Dim C As Long

'Define sheets to use
Dim wsOrigin As Excel.Worksheet, _
    wsDestiny As Excel.Worksheet, _
    xRg As Excel.Range
 
Set wsOrigin = Worksheets("FOLLOWING")
Set wsDestiny = Worksheets("SENT")

'Number or rows of sheets
A = wsOrigin.UsedRange.Rows.Count
B = wsDestiny.UsedRange.Rows.Count

If B = 3 Then
    If Application.WorksheetFunction.CountA(wsDestiny.UsedRange) = 0 Then B = 0
End If
'Select column F, from 4 (first data row) till last number
Set xRg = wsOrigin.Range("F4:F" amp; A)
On Error Resume Next

Application.ScreenUpdating = False
For C = 1 To xRg.Count
    If Not Len(Trim(xRg(C).Value)) = 0 Then
        'xRg(C).EntireRow.FormatConditions.Delete
        xRg(C).EntireRow.Range("A" amp; C amp; ":H" amp; C).Copy Destination:=wsDestiny.Range("A" amp; B   1)
        xRg(C).EntireRow.Delete
        If Not Len(Trim(xRg(C).Value)) = 0 Then
            C = C - 1
        End If
        B = B   1
    End If
Next
Application.ScreenUpdating = True

End Sub
 

Я попытался использовать FormatConditions.Удалить, как вы можете видеть, но это удаляет formatcondition настолько сложно, что при вставке на новый лист не применяется новый предполагаемый FC.

Что я делаю не так?

Спасибо!!

Комментарии:

1. Вам нужно будет удалить FC из вставленных строк, а затем применить новый CF к этим вставленным строкам. Попробуйте записать макрос, чтобы увидеть, как применяется необходимый FC.

2. Спасибо, я пойду в этом направлении.

Ответ №1:

Хорошо, итак, основываясь на том, что предложил Тим, я занялся этим:

Вставка с листа A на лист B

 Set rgDestiny = wsDestiny.Range("A" amp; B   1 amp; ":H" amp; B   1)
'Delete CF from origin
rgDestiny.FormatConditions.Delete
'And add new CF 
Set cond1 = rgDestiny.FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($G" amp; B   1 amp; "));ESFECHA($G" amp; B   1 amp; "))")
Set cond2 = rgDestiny.FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($F" amp; B   1 amp; "));($B$1 - UTILITIES!$E$4) >= $F" amp; B   1 amp; ")")
Set cond3 = rgDestiny.FormatConditions.Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($F" amp; B   1 amp; "));($B$1 - UTILITIES!$E$3) >= $F" amp; B   1 amp; ")")
With cond1
    .Interior.ColorIndex = 50
    .Font.Color = vbWhite
End With
With cond2
    .Interior.ColorIndex = 22
    .Font.Color = vbBlack
End With
With cond3
    .Interior.ColorIndex = 45
    .Font.Color = vbBlack
End With
 

Удаление строки с листа A

Поступая таким образом, я добавляю 3CF для каждой строки, что довольно близко к тому, что я хочу (я бы предпочел иметь только 3 CF вместо 3 * rownum, но неважно).

Надеюсь, это поможет всем, кто столкнется с такой же проблемой! Потратил немало часов на поиск в Google и не нашел никакого способа скопировать данные с листа, вставить и применить другие CF, чем у них, поэтому обходным путем является удаление CF, который у них есть, и добавление их вручную через VBA.