#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.