Достаточно долго игрался с дизайном документов по части цветовых решений. Потом все это надоело и решил что в большинстве случаев достаточно выделить сущности и итоги. Не без помощи местных шаманов узнал кодирование цветов у всемогущего Excel’я тема здесь
Скрытый текст
К сожалению вариант предложеный Михаилом не сработал ибо остаток от деления страрших цифр (синего) сбивают значение младших (зеленого). Аналогично пара зеленый, красный.
Написал простенький макрос. Нашел его очень удобным, вот и решил поделиться. Выделяем данные которые нужно выделить (извините за тафтологию) и запускаем его. Макрос проходится по ячейкам и делает заливку немного темнее при этом максимально сохраняет оттенок цвета. Повторными прогонами можно затемнить еще и еще. Отмена не предусмотрена. Константу darker (0.9) можно поменять на свое усмотрение, даже увеличить выше единицы (будет осветлять).
Код
Sub darker_X_percent()
Const darker = 0.9
If MsgBox("Сделать цвет ячеек немного темнее? Количество обрабатываемых ячеек " & Selection.Count & ". Вы уверены?", vbQuestion + vbDefaultButton2 + vbYesNo, "Внимание") = vbYes Then
Dim change_area As Range
Application.StatusBar = ("Проводится замена цвета в " & Selection.Count & " ячейках...")
For Each change_area In Selection
Colour = change_area.Interior.Color
B = Int(Colour / 65536)
G = Int((Colour - B * 65536) / 256)
R = (Colour - B * 65536 - G * 256)
' +0.5 чтобы при отбрасывании дробной части округлить по стандартным правилам
B = Int(B * darker + 0.5)
G = Int(G * darker + 0.5)
R = Int(R * darker + 0.5)
Colour = R + G * 256 + B * 65536
change_area.Interior.Color = Colour
Next
MsgBox "Замена произведена.", vbInformation + vbOKOnly, "Ура!"
Application.StatusBar = False
End If
End Sub
Однако, не увлекайтесь. Миллион миллион алых, розовых, голубых и синих существенно утяжелят документ.
Товарищи, нужна помощь по программному изменению заливки ячеек. Имеется таблица, колонки которой раскрашены в разные цвета (характеристики номенклатуры, цех, склад, приход, расход, остатки). В связи с разрастанием асортимента продукция получина иерархическую структуру. Соответственно хочется промежуточные итоги разных уровней закрасить теми же цветами, но меньшей насыщенности. Попытки разобраться с принципом кодирования цветов увенчались провалом. Если оранжевый это R-255,G-192, B-0, то -5% это R-242,G-182, B-0, то -15% это R-217,G-163, B-0,
Код
Sub Orang()
Range("a36").Interior.Color = 49407 'чистый оранж
Range("a37").Interior.Color = 46834 '-5%
Range("a38").Interior.Color = 41945 '-15%
Range("a39").Interior.Color = 37055 '-25%
End Sub
Связи никакой. Есть ли способ пересчитать конкретный цвет на уменьшение или увеличение яркости? Хотелось бы выделить область, нажать кнопочку и макрос пройдясь по всем ячейкам уменьшит яркость цвета к примеру на 5%. При необходимости повторяем и получаем 10%, 15%. (пусть не совсем, вместо 20 будет 18,55, или около того за счет того что для последующего базой будет не оригинал 100, а только 95, да еще с округлением)
Вложенное если. Своя функция для EXCEL’a.xls Здравствуйте, жители и гости Планеты. Возникла проблема использования вложенного Если() Сначала написал по классике индекс+поискпоз, но эта связка не дает 100% необходымый результат. Использовать макрос имеет свои неоспоримые преимущества, но и недостатки есть серьезные. Написана пользовательская функция, которая ищет заданое значение в справочном диапазоне и возвращает из второго массива значение соответствующее найденому. Может кому пригодится. Может кто ускорит ее работу.
Скрытый текст
Код
Function autoclas(typ As String, types_arr As Range, clases_arr As Range) As String''1 аргумент - значение'2 аргумент - массив, где нужно найти первый'3 аргумент - массив, из которого нужно взять соответствующий результат'Dim i, j As Integerj = UBound(types_arr())For i = 1 To jIf types_arr(i) = typ Then autoclas = clases_arr(i) Exit For
ремонт на планету.xls(55.5 КБ) Формат данных: Участок, единица оборудования, дата/время начала и завершения ремонта. Данные за год, 170 единиц оборудования, около 5000 записей На других листах просчитываются простои по причинам с разбивкой по месяцам и единицам оборудования (не привожу в примере)
Часто господа аксакалы (6 человек) пишут не правильно даты, задваивают записи, пишут перекрестные простои (еще идет текущий ремотн, а линия ставится на косервацию) Нужна помощь это отследить. Если сумма простоя за месяц превышает длительность месяца, ошибка находится, а так только вручную рисовать. Самым подходящим есть график Ганта, но он не позволяет "закрашивать" обльше одной области в ряду, да и его надо с бубуном плясать.
Более того, в перспективе нужно оценить адекватность простоев оборудования и выпуска продукции по оборудованию по дням. кроме как визуально график на ум приходит двумерная матрица коеффициентов использования рабочего времени по суткам.
PS если простой большпе месяца, он закрывается и открывается снова. Оговорено ранее для того чтоб легче считать время простоя на протяжении месяца.
Макросом из личной книги программно обрабатываю данные. На выходе сводная таблица. Дальше программно форматирую и хочу создать кнопки для отображения/скрытия подробностей
Код
Sub Create_Buttons_And_Module_for_buttons()
Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
Dim sModuleName As String, sFullName As String
Dim sProcLines As String
Dim lLineNum As Long
'добавляем новый стандартный модуль в активную книгу
Set objVBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
' не получилось задать имя objVBComp.Name = ("Buttons_For_Pivot"
'получаем ссылку на коды модуля
Set objCodeMod = objVBComp.CodeModule
'узнаем количество строк в модуле
'(т.к. VBA в зависимости от настроек может добавлять строки деклараций)
lLineNum = objCodeMod.CountOfLines + 1
'текст всставляемой процедуры
sProcLines = "Sub Pivot_Big()" & vbCrLf & _
"ActiveSheet.PivotTables(""СводнаяТаблица"".PivotFields(""Название склада"".ShowDetail = True" & vbCrLf & _
"End Sub" & vbCrLf & _
"Sub Pivot_Small()" & vbCrLf & _
"ActiveSheet.PivotTables(""СводнаяТаблица"".PivotFields(""Название склада"".ShowDetail = False" & vbCrLf & _
"End Sub"
'вставляем текст процедуры в тело нового модуля
objCodeMod.InsertLines lLineNum, sProcLines
ActiveSheet.Buttons.Add(0, 29, 75, 15).Select
Selection.OnAction = "Pivot_Small"
Selection.Characters.Text = "Свернуть"
ActiveSheet.Buttons.Add(76, 29, 75, 15).Select
Selection.OnAction = "Pivot_Big"
Selection.Characters.Text = "Развернуть"
End Sub
Код работает: создается модуль, вставляется его код, создаются кнопки, но кнопкам назначается макрос из личной книги PERSONAL.XLSB!Pivot_Small и PERSONAL.XLSB!Pivot_Big
Назначил вручную, запустив макрорекордер, указал, макросы для кнопок в текущей книге. Кнопки работают, но вновь созданным задается из личной. Подскажите где грабли?
Должно быть сохранено в рабочей книге так как она отправляется другим пользователям. Привязки к имени файла желательно избежать, пользователь может сохранить файл под другим именем.
Господа, делаю учет ремонтов. Есть связаные выпадающие списки через умные таблицы. 1 Категория (производство1, произв2, ... ,произв5, вспомогательное, энергосистема, охрана) 2 Название оборудования (около 70 позиций, названия не повторяются, однородные единицы разделены по номерам/моделям) 3 Причина ремонта / дефектный узел / плановое ТО. По п.3 есть несколько универсальных типа сбой питания и плановое ТО, основная масса по 5-7 пунктов на однородное оборудовае дублируются, между производствами не повторяются.
Подскажите как можно организовать чтоб не делать 70 таблиц/списков на каждую единицу ообрудования.
Имеется таблица глупо созданная моим предшественником с кучей информации. В конце каждого месяца делается баланс с тремя десятками формул такого рода "=' цех произ_'!AH$518+' цех перем_'!AH$249+'НФС '!AH$316" Для нового баланса нужно скопировать таблицу, а ссылаться на каждое значение одной строкой ниже. Подскажите как сделать оперативно без ручного перебора формул.