我似乎无法理解第二行:
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
答案 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(但是你什么都没有)