Excel, VBA, условное форматирование - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужна помощь. Я считаю, что VBA - единственный способ решить эту проблему, но я могу ошибаться.

На Листе 1 в моей книге у меня есть два столбца, которые содержат разные элементы. Например, в столбце B и столбце F содержатся различные позиции оборудования с пробелом рядом с ними для количества. Он служит контрольным списком. Кроме того, на листе 1 в верхней части страницы есть некоторые условно отформатированные флажки, которые выбираются для различных «блоков» (например: блок 1, блок 2, блок 3 и т. Д.)

На Листе 2 есть разные таблицы, названные для каждого поля, как указано выше, а в таблицах - разные элементы Эти предметы могут быть, а могут и не быть одинаковыми в столбце B & F на Листе 1.

Цель: я надеюсь научиться писать код, который говорит при выборе флажков условного форматирования рядом с различными полями на листе 1, тогда он будет подсвечивать элементы на листе 1, если он соответствует любому элементу в выбранном блоке из листа 2 .

**** Я обновил свой вопрос с помощью приведенного ниже кода.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range

' In order to run code on sheet without a button or enabling in a module
Set KeyCells = Range("A2")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is 
Nothing Then

' Display a message when one of the designated cells has been changed.


Dim i, j As Integer
Dim box As String
Dim c As Range 'Define two ranges so that we can loop through both sheets to 
check the boxes
Dim d As Range
Sheets(1).Range("B11:B30, F11:F30").Font.ColorIndex = 0 'Remove the cell styles to apply new ones
box = Sheets(1).Cells(2, 1) 'This refers to the checkbox -  **QUESTION:How to have "multiple" check boxes to select from and will  run the same code?**
For i = 1 To 10 'Loop to find the checked box in sheet2
    If Sheets(2).Cells(1, i) = box Then 'Check for checked box
        For Each c In Sheets(2).Range(Sheets(2).Cells(2, i), Sheets(2).Cells(6, i))
            For Each d In Sheets(1).Range("B11:B30, F11:F30")
                If c = d Then
                    Sheets(1).Cells(d.Row, d.Column).Font.ColorIndex = 3 'changes matching item to red font
                End If
            Next d
        Next c
    End If
Next i
End If
End Sub

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Пожалуйста, смотрите ниже для кода, который я до сих пор. Это вариант того, что я получил выше. Я разместил вопрос в строке 13.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range

' In order to run code on sheet without a button or enabling in a module
Set KeyCells = Range("A2")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is 
Nothing Then

' Display a message when one of the designated cells has been changed.


Dim i, j As Integer
Dim box As String
Dim c As Range 'Define two ranges so that we can loop through both sheets to check the boxes
Dim d As Range
Sheets(1).Range("B11:B30, F11:F30").Font.ColorIndex = 0 'Remove the cell styles to apply new ones
box = Sheets(1).Cells(2, 1) 'This refers to the checkbox -  **QUESTION: How to have "multiple" check boxes to select from and will  run the same code?**
For i = 1 To 10 'Loop to find the checked box in sheet2
    If Sheets(2).Cells(1, i) = box Then 'Check for checked box
        For Each c In Sheets(2).Range(Sheets(2).Cells(2, i), Sheets(2).Cells(6, i))
            For Each d In Sheets(1).Range("B11:B30, F11:F30")
                If c = d Then
                    Sheets(1).Cells(d.Row, d.Column).Font.ColorIndex = 3 'changes matching item to red font
                End If
            Next d
        Next c
    End If
Next i
End If
End Sub

Лист 1 Флажки - У меня есть условно отформатированные флажки, которые я могу изменить. Они были основаны на проверочном списке данных 0,1 для изменения заполнения. Но, возможно, мне придется это изменить.

Я ответил на свой вопрос. По сути, вы можете просто иметь несколько строк box1, box2 и т. Д. И писать один и тот же код для каждой строки. Не уверен, что это долгий путь, но он работает.

0 голосов
/ 19 ноября 2018

Исходя из того, что я понял из вашего вопроса, я написал код для форматирования цвета ячейки.Я дал комментарии вместе с кодом.

Sub format()
Dim i As Integer
Dim box As String
Dim c As Range 'Define two ranges so that we can loop through both sheets to check the boxes
Dim d As Range
Sheets(1).Range(Cells(4, 1), Cells(50, 50)).Interior.ColorIndex = xlNone 'Remove the cell styles to apply new ones
box = Sheets(1).Cells(1, 1) 'This refers to the checkbox
For i = 1 To 10 'Loop to find the checked box in sheet2
    If Sheets(2).Cells(1, i) = box Then 'Check for checked box
        For Each c In Sheets(2).Range(Sheets(2).Cells(2, i), Sheets(2).Cells(20, i))
            For Each d In Sheets(1).Range(Cells(4, 2), Cells(21, 21))
                If c = d Then
                    Sheets(1).Cells(d.Row, d.Column).Interior.ColorIndex = 6 'If true give yellow colour
                End If
            Next d
        Next c
    End If
Next i
End Sub

И это лист Excel, который я использовал Лист Excel

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