VBA Excel. Конвертация цвета из Long в RGB

    Конвертация цвета из числового значения Long в RGB формат из кода VBA Excel с помощью пользовательской функции ColorLongToRGB. Примеры.

    Функция ColorLongToRGB

    Пользовательская функция ColorLongToRGB по своему действию является обратной для встроенной в VBA Excel функции RGB, которая значения цветов по системе RGB переводит в значения типа Long.

    Для конвертации цвета из Long в RGB нам понадобится функция Windows API CopyMemory (копирование блока памяти из одного расположения в другое), которую следует объявить в разделе Declarations стандартного модуля:

    Это вариант для 64-разрядных версий VBA Excel, для 32-разрядных платформ из объявления следует убрать ключевое слово PtrSafe и, возможно, тип данных LongPtr заменить на Long.

    Параметры функции CopyMemory:

    • Destination — указатель на начальный адрес места назначения скопированного блока;
    • Source — указатель на начальный адрес копируемого блока памяти;
    • Длина — размер копируемого блока памяти в байтах.

    Кроме того, нам понадобится переменная пользовательского типа данных, которую следует объявить в разделе Declarations:

    Элементы пользовательского типа данных myRGB:

    • r — интенсивность красного цвета;
    • g — интенсивность зеленого цвета;
    • b — интенсивность синего цвета.

    Код функции ColorLongToRGB, предназначенной для конвертации цвета из Long в RGB:

    d — числовое значение цвета типа Long.

    В данном случае, числовое значение цвета типа Long распознается как массив из четырех байтов, значение первого из которых соответствует интенсивности красного цвета, второго — интенсивности зеленого цвета, третьего — интенсивности синего цвета. Четвертый байт может содержать значение альфа-канала (информация о прозрачности рисунка), который в Excel не используется.

    Функция ColorLongToRGB с помощью функции Windows API CopyMemory копирует массив из первых трех байтов числового значения цвета в три элемента пользовательского типа данных myRGB (r, g, b).

    Конвертация цвета в RGB

    Код функции ColorLongToRGB в сборке с объявлением функция Windows API CopyMemory и пользовательского типа данных myRGB:

    Пример 1

    Проверка работоспособности пользовательской функции ColorLongToRGB:

    Результат работы кода:

    Пример 2

    Есть таблица, первый столбец которой заполнен произвольными цветами:

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

    Код VBA Excel для решения данной задачи:

    Результат работы кода:

    Пример 3

    Пример функции ColorLongToRGBA c альфа-каналом в сборке с объявлением функция Windows API CopyMemory и пользовательского типа данных myRGBA:

    Элемент a пользовательского типа данных myRGBA — это альфа-канал, который содержит информацию о прозрачности рисунка.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    Добавить комментарий

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