Только ссылка Формат одной ячейки в диапазоне на другую ячейку в другом диапазоне - PullRequest
0 голосов
/ 11 марта 2019

У меня лист Excel, состоящий из 2 диапазонов (одинакового размера), как показано на рисунке. Пример изображения . Теперь я хочу связать форматирование каждой ячейки в верхнем диапазоне с каждой соответствующей ячейкой в ​​нижнем диапазоне. Я пробовал вставлять в качестве опции связанного изображения, но это не полезно в соответствии с моими потребностями. До сих пор я нашел следующий код VBA:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Clr

Clr = Me.Range("A1").Interior.Color
Me.Range("A5").Interior.Color = Clr
End Sub

Что нормально при использовании для отдельной ячейки. Но когда я изменил его на весь диапазон следующим образом:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Clr

    Clr = Me.Range("A1:B3").Interior.Color
    Me.Range("A5:B7").Interior.Color = Clr
End Sub

Это больше не работает должным образом. Пожалуйста помоги мне с этим. Любая модификация / новые методы будут высоко оценены. Также не хочу использовать петли, так как это всего лишь образец листа, а мой настоящий лист намного больше.

1 Ответ

1 голос
/ 11 марта 2019

Я собираюсь значительно упростить свой ответ, потому что я не знаю, как вы хотите его применить, но я бы сделал это, скопировав и вставив специальные форматы.

Public Sub CopyPasteSpecialFormats()
    Range("rngSrcData").Copy
    Range("rngFirstCellToCopyTo").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Добавьте приведенный выше код в модуль или метод изменения или каким-либо другим способом, которым вы хотите его вызвать.

Example

На изображении выше, я создалименованный диапазон с именем rngSrcData в ячейках A1: E5 .Я также создал именованный диапазон в верхней левой ячейке, который представляет место назначения для специальной операции вставки.Имя этого диапазона: rngFirstCellToCopyTo , и на показанном изображении он определен в ячейке A7 .

Затем я запускаю макрос и дублирую форматирование ячеек..

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

В качестве альтернативы, вы можете написать несколькоVBA, чтобы найти матрицу, из которой вы хотите скопировать.Самое приятное в пункте назначения заключается в том, что вам нужно беспокоиться только о верхней левой ячейке, поэтому вам не нужно слишком задумываться об этом.

Как я уже говорил, я принял решение довольнопросто.Если вы хотите принудительно форматировать ячейку каждый раз, когда меняется лист, это тоже будет работать ...

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Range("rngSrcData").Copy
    Range("rngFirstCellToCopyTo").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

    Target.Select

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

... это немного неуклюже, но делает свою работу.Вы также должны учитывать, что все ваши стандартные функции отмены будут в таком случае недействительными.Это то, что вам нужно учитывать.

Обновление отдельной ячейки также возможно, но вам потребуется больше логики, чтобы определить смещение для измененной ячейки.Кроме того, измененное событие срабатывает не для всех, а только для изменений данных ячейки, а не для формата.

Надеюсь, это поможет.

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