我似乎听不懂第二句话:
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 endstrBoardSize是表的大小,以前是
Dim strBoardSize as string发布于 2015-11-08 22:41:47
根据这个页面,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这个其他条款解释了GetKeyState的输入是什么,以及它们对按位运算符的影响。
希望这能帮点忙..。
发布于 2015-11-09 00:37:21
GetKeyState是https://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx中描述的Windows函数。它返回一个整数,并如前所述,“如果高阶位为1,则键被关闭;否则,则为up。”(在这里,感兴趣的键是鼠标右键,由常量vbKeyRButton指定。)
&H 8000是一个只有高阶位集的整数,因此And操作返回0或&H 8000。&H 8000是用于高阶位的掩码(在白话中)。
CBool函数将0转换为False,将任何非零值转换为True,因此,如果按下键,则返回True。
发布于 2015-11-08 22:41:25
CBool的字面意思是“转换为布尔型”(它是一个强制转换),因为GetKeyState和&H 8000不是布尔型,它需要转换或转换。
If Not CBool(GetKeyState(vbKeyRButton) And &H8000)因此,对于您的代码来说,这意味着:
If vbKeyRButton AND &H8000 are both false then ...剩下的代码,
If IsEmpty(strBoardSize)这将检查字符串strBoardSize是否为空。所以,如果strBoardSize是空的,转到下一行代码,否则结束If语句,然后转到there(但是这里什么都没有)
https://stackoverflow.com/questions/33599782
复制相似问题