Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

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 по тематическим разделам со ссылками на все статьи.