Vba Code select value из раскрывающегося списка Список заполняет некоторые ячейки цветом

Я новичок в VBA и немного борюсь с ним.
Я создаю отчет. В отчете у меня есть выпадающий список с цветами, скажем, Lilly, Rose Etc. Поэтому, когда я выбираю Rose, я хочу, чтобы некоторые определенные ячейки получали цвет. Я не хочу использовать условное форматирование, так как мне нужно сохранить таблицу как можно меньший размер. До сих пор я получил

Private Sub workbook_sheetchange(ByVal Sh As Object, ByVal Targer As Rang Select Case Range("B2") Case " Rose" Application.Goto Reference:="Header" With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = -0.249977111117893 .PatternTintAndShade = 0 End With Application.Goto Reference:="Row" With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = -0.249977111117893 .PatternTintAndShade = 0 End With Application.Goto Reference:="Fill" With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.599993896298105 .PatternTintAndShade = 0 End With End Select End Sub 

Спасибо за любую помощь!

вы можете после этого:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub '<--| exit if "changed" cell is not "B2" With Sh '<--| reference sheet with "changed" cell Select Case .Range("B2").Value '<--| act with respect to B2 cell current value Case "Rose" With .Range("Header").Interior '<--| reference the specific named range instead of using 'Application.GoTo' method and 'Selection' object .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = -0.249977111117893 .PatternTintAndShade = 0 End With With .Range("Row").Interior '<--| reference the specific named range instead of using 'Application.GoTo' method and 'Selection' object .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = -0.249977111117893 .PatternTintAndShade = 0 End With With .Range("Fill").Interior '<--| reference the specific named range instead of using 'Application.GoTo' method and 'Selection' object .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.599993896298105 .PatternTintAndShade = 0 End With End Select End With End Sub 

которые могут быть более эффективно реорганизованы на:

 Option Explicit Private Sub workbook_sheetchange(ByVal Sh As Object, ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub '<--| exit if "changed" cell is not "B2" With Sh '<--| reference sheet with "changed" cell Select Case .Range("B2") '<--| act with respect to B2 cell current value Case "Rose" FormatCell Union(.Range("Header"), .Range("Row"), .Range("Fill")), _ xlSolid, _ xlAutomatic, _ xlThemeColorAccent6, _ -0.249977111117893, _ 0 '<--| reference all listed named ranges and format their 'Interior' object with passed properties .Range("Fill").Interior.TintAndShade = 0.599993896298105 '<--| change only "Fill" named range 'Interior' 'TintAndShade' property End Select End With End Sub Sub FormatCell(cell As Range, pttrn As XlPattern, pttrnClrIndx As XlColorIndex, thmClr As XlThemeColor, tntAndShd As Single, pttrnTntAndShd As Variant) With cell.Interior .pattern = pttrn .PatternColorIndex = pttrnClrIndx .ThemeColor = thmClr .TintAndShade = tntAndShd .PatternTintAndShade = pttrnTntAndShd End With End Sub 

Почему вас беспокоит размер файла? Я создал книгу, которая работает именно так, как вам нужно, используя условное форматирование, а размер файла – 10,5 КБ !!!

Если вы действительно хотите это сделать в VBA:

1 – Определите, изменился ли B2, используя событие изменения рабочего листа

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("B2"), Range(Target.Address)) Is MsgBox "Cell B2 has been changed" End If End Sub 

2 – Протестируйте каждую ячейку в своих данных в раскрывающемся списке. Я предположил, что ваши данные находятся в диапазоне от A1 до A10 для этого примера.

 For Row = 1 To 10 If Range("A" & Row).Value = Range("B2").Value Then 'Colour your cell Else 'Clear the colour from your cell End If Next Row 

Надеюсь, вышесказанное дает вам начало.

Interesting Posts

Как распечатать всю строку листа excel после поиска определенной строки из этой строки?

Что действительно имеет свойство range .Rows Excel?

Как вернуть результаты функции в ячейку в Excel?

Excel: вычисление разницы во времени на основе значений max и min в других ячейках

Выберите несколько параметров, и значения выбора будут получены из Excel

vba для выбора диапазона, который записывается в ячейку

Кнопка «Отмена» должна выйти из

VBA – Возвращаемые значения из таблицы, которые соответствуют определенным критериям и выводят их на новый лист

Как получить и установить ширину столбца excel через c # excel interop

загрузить файл excel из Интернета с помощью vba

В Excel, как 2 имеют ячейки A1, 2, 3 и т. Д., Ссылаются на одну формулу, которая соответствует двум другим ячейкам в столбцах B & C в отношении 2 ячеек A1, 2, 3 и т. Д.

c # VS Express 2012 excel xml read and list

Индивидуальный экспорт PHP Excel

Удалить все строки с ошибками в столбце

Переменные переменные и суммы их в Excel VBA

Давайте будем гением компьютера.