Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Быстрое оформление цветами., Готовое решение для упрощения оформления документов.
 
Достаточно долго игрался с дизайном документов по части цветовых решений.
Потом все это надоело и решил что в большинстве случаев достаточно выделить сущности и итоги.
Не без помощи местных шаманов узнал кодирование цветов у всемогущего 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 (54 КБ)

Вложенное если. Своя функция для EXCEL’a.xls
Здравствуйте, жители и гости Планеты.
Возникла проблема использования вложенного Если()
Сначала написал по классике индекс+поискпоз, но эта связка не дает 100% необходымый результат.
Использовать макрос имеет свои неоспоримые преимущества, но и недостатки  есть серьезные.
Написана пользовательская функция, которая ищет заданое значение в справочном диапазоне и возвращает из второго массива значение соответствующее найденому.
Может кому пригодится.
Может кто ускорит ее работу.

Скрытый текст
Изменено: Formanter - 26.01.2015 16:48:28
График простоев оборудования, На подобии диаграммы Ганта
 
ремонт на планету.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 таблиц/списков на каждую единицу ообрудования.
Изменено: Formanter - 20.06.2013 21:35:42
Редактирование формул макросом
 
Имеется таблица глупо созданная моим предшественником с кучей информации.  
В конце каждого месяца делается баланс с тремя десятками формул такого рода "=' цех произ_'!AH$518+' цех перем_'!AH$249+'НФС '!AH$316"  
Для нового баланса нужно скопировать таблицу, а ссылаться на каждое значение одной строкой ниже. Подскажите как сделать оперативно без ручного перебора формул.
Страницы: 1
Наверх