VBA Cbool是什么意思? (实际英语)

时间:2015-11-08 22:30:20

标签: excel vba excel-vba

我似乎无法理解第二行:

 If Not CBool(GetKeyState(vbKeyRButton) And &H8000)

你是否善良,请用简单的英语解释这是什么意思? 我能从中理解的是“如果没有”和“和” 我对所有VBA巫师都很有信心!请帮帮我!

完整代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not CBool(GetKeyState(vbKeyRButton) And &H8000) Then

    If IsEmpty(strBoardSize) Then
        Exit Sub
    End If
Else
End if
Sub end

strBoardSize是表的大小,之前是

Dim strBoardSize as string

3 个答案:

答案 0 :(得分:2)

根据这个page,CBool​​方法接受任何输入并尝试对值进行布尔比较。

所以,用英语:

If the value returned by (GetKeyState(vbKeyRButton) And &H8000) is not true, then:
   If IsEmpty(strBoardSize) Then
       Exit Sub
   End If
Else
End if

另一种看待这种情况的方法是:

Dim LCompare as Boolean
LCompare = CBool(GetKeyState(vbKeyRButton) And &H8000) 'Sets the value returned from CBool in LCompare
If Not LCompare Then
   If IsEmpty(strBoardSize) Then
       Exit Sub
   End If
Else
End if

这个other article解释了GetKeyState的输入是什么以及它们如何影响正在进行的按位运算符。

希望这有点帮助...

答案 1 :(得分:2)

GetKeyState是https://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx中描述的Windows API函数。它返回一个Integer,如上所述,“如果高位为1,则键为关闭;否则为向上。” (这里,感兴趣的键是鼠标右键,由常量vbKeyRButton指定。)

& H8000是一个只有高位设置的整数,因此And操作返回0或& H8000。 & H8000是高阶位的掩码(用白话)。

CBool​​函数将0转换为False,将任何非零值转换为True,因此,如果按下该键,则返回True,否则返回False。

答案 2 :(得分:1)

CBool​​字面意思是“转换为布尔值”(它是强制转换),因为GetKeyState和& H8000不是类型布尔值,需要转换或转换。

If Not CBool(GetKeyState(vbKeyRButton) And &H8000)

因此,对于您的代码,它意味着:

If vbKeyRButton AND &H8000 are both false then ...

对于其余代码,

If IsEmpty(strBoardSize)

检查String strBoardSize是否为空。 所以如果strBoardSize为空则转到下一行代码,否则结束if语句并继续执行else(但是你什么都没有)