excel - 使用 HSL 函数时如何修复“未定义子或函数”
问题描述
我正在尝试使用 HSL 而不是 RGB 设置某些单元格的内部颜色。
从微软的这份文档来看,它非常简单: https ://docs.microsoft.com/en-us/office/client-developer/visio/hsl-function
语法很简单 HSL(** 色调 **, ** 饱和度 **, ** 亮度 ** )
那么,为什么我的 VBA 会告诉我 sub 或 function 没有定义?
这两行代码都会出现相同的错误:
Range("A1").Interior.Color = HSL(160, 240, 120)
Range("A1").Interior.ColorIndex = HSL(160, 240, 120)
解决方案
这是使用 Windows API 在 VBA 中的 RGB → HSL 之间转换的另一种方法。由于它是“经典 Windows”功能,因此它有几个特点。
RGB 转 HSLColorRGBToHLS
ColorRGBToHLS
是一个 Windows API 函数,因此它使用自 1980 年代以来一直沿用的过时颜色范围(最初用于一个名为MS Chart的早已失效的程序)。您可能熟悉在百分比和值之间转换 R/G/B 值255
。
- 但是,在这种情况下,转换必须是到/来自 的值
240
,而不是 255。- 只是为了在未来进一步混淆我们,他们使用符号 of
HLS
而不是更常见的HSL
(和十六进制颜色字符串0xBBGGRR
而不是#RRGGBB
)。
tl;博士
Option Explicit
Public Declare PtrSafe Sub ColorRGBToHLS Lib "shlwapi.dll" (ByVal clrRGB As Long, _
wHue As Integer, wLuminance As Integer, wSaturation As Integer)
Function rgb_to_hsl(r As Integer, g As Integer, b As Integer)
Dim h As Integer, s As Integer, l As Integer
ColorRGBToHLS RGB(r, g, b), h, l, s
h = 360 * (h / 239)
s = 100 * (s / 240)
l = 100 * (l / 240)
rgb_to_hsl = "hsl(" & h & "," & s & "%," & l & "%)"
End Function
...和一个演示:
Sub test()
Debug.Print rgb_to_hsl(255, 180, 63) 'returns "hsl(36,100%,62%)"
End Sub
顺便说一句,API 也有一个ColorHLSToRGB
功能。
80 年代对于计算机书呆子来说是一个疯狂(经常令人困惑)的时代。有趣的事实:比尔盖茨嫁给了他雇用的第一位女程序员。
推荐阅读
- python - OSError:[WinError 127] 尝试加载通过更改环境修复的 DLL [Python] 时
- google-bigquery - 如何将“2020 年 8 月 7 日”转换为 2020 年 7 月 8 日
- asp.net - bootstrp的Visual Studio .exe文件完成后开始一次又一次下载
- memory-management - 我们可以在 puppeteer 中打开多少个并行浏览器选项卡?
- python-3.x - 如果列中的值与前一行相同以保持序列增加,是否有 Python 函数对列中的值 +1?
- java - 角度日期和时间格式
- r - 处理从 R 到 Tableau 的数据帧返回的最佳方法是什么
- python - Python 多张表导出为 csv
- java - 我以编程方式确定 Java 中的操作系统?
- javascript - 如何使用 useEffect 挂钩停止自动重新渲染组件?