要求解释单行VBA代码

时间:2018-09-23 15:47:58

标签: excel-vba

以下代码将颜色值转换为3D RGB阵列

Function Decimal2RGB(color_val)
    Decimal2RGB = Array(color_val \ 256 ^ 0 And 255, color_val \ 256 ^ 1 And 255, color_val \ 256 ^ 2 And 255)
End Function

另一个类似的子项

Sub Sample()
    Dim Col As Long

    '~~> RGB to LONG
    Col = RGB(255, 111, 254)

    Debug.Print Col

    '~~> LONG To RGB
    R = Col Mod 256
    G = (Col \ 256) Mod 256
    B = (Col \ 256 \ 256) Mod 256

    Debug.Print R
    Debug.Print G
    Debug.Print B
End Sub

我的问题是“ And”运算符在第一个子例程中做什么?

第一个子句的执行示例:{=Decimal2RGB(258)}产生{2, 1, 0}

1 个答案:

答案 0 :(得分:3)

正如吉普(Jeeped)所说,And是VBA中的按位运算符。
因此And 255屏蔽了所有高于第8位的位。例如:

455dec -> 111000111  
255dec -> 011111111  
And    -> 011000111 -> 199dec