Excel vba для вставки условного формата, если ячейка в Sheet1 не совпадает с той же ячейкой в ​​Sheet2 - PullRequest
0 голосов
/ 05 октября 2018

Я пытался запрограммировать это так, что когда я создаю рабочую книгу, которая сохраняется как файл xlsx, vba в рабочей книге, я копирую данные из копий с условным форматированием на лист1 новой рабочей книги.Мне нужно, чтобы она имела формулу A1 <> Sheet2! A1, тогда шрифт текста красный.а затем следующая ячейка будет B1 <> Sheet2 "B1 текстовый шрифт красного цвета.

Мне нужно, чтобы это было скопировано в активный диапазон. Я пробовал этот код, но он не работает для меня. Потратил2 недели пытаюсь найти ответы на это без радости.

Application.CutCopyMode =False

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=A1<>Sheet2!A1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

With Selection.FormatConditions(1).Font
    .Color =-16776961
    .TintAndShade =0
EndWith

Selection.FormatConditions(1).StopIfTrue =False
Selection.Copy
Range("A1:S200").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте заменить весь ваш код следующим:

Dim newCondition As FormatCondition 'Red text if Sheet1 cell doesn't match Sheet2 cell.
Dim conditionFormula As String      'Formula for the format condition

' Compare each cell using indirect addressing of the current row and column. Result is
' true if the sheet cells don't match, false if they do.
conditionFormula = "=(INDIRECT(ADDRESS(ROW(),COLUMN(),1,1,""Sheet1"")) <>" & _
                   "  INDIRECT(ADDRESS(ROW(),COLUMN(),1,1,""Sheet2"")))"

' Create the condition and get a pointer to it.
Set newCondition = Range("A1:S200").FormatConditions.Add( _
                                    Type:=xlExpression, _
                                    Formula1:=conditionFormula)

' Add the formatting, priority, stop rule to the condition.
With newCondition
    .SetFirstPriority
    With .Font
        .Color = -16776961  ' Red
        .TintAndShade = 0
    End With
    .StopIfTrue = False
End With

' Clear the pointer
Set newCondition = Nothing

Естественно, объявление строки conditionFormula необязательно, но мне нравится писать код, который легко прочитать и понять позже.У меня было слишком много раз, когда я возвращался позже и задавался вопросом, что # @% * &!Я пытался сделать.

Обратите внимание, что вы могли бы использовать ActiveSheet.UsedRange вместо Range("A1:S200").Это гарантирует, что вы всегда получите все ячейки с данными.

Наконец, я не полностью определил метод Range() в моем коде.Поэтому Excel будет угадывать, какой лист вы хотите использовать.Возможно, было бы лучше уточнить, о какой книге и листе вы говорите.Так, например, когда вы создаете новую книгу, сделайте что-то вроде этого:

Dim newWorkbook As Workbook

Set newWorkbook = Workbooks.Open(.... whatever you do here...)

Затем вы можете заменить Range("A1:S200") на

newWorkbook.Worksheets(1).Range("A1:S200")

или даже

newWorkbook.Worksheets(1).UsedRange

Надеюсь, все это поможет.Извините за длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...