如何在VBA中生成对应C++ MAKEWORD(2,2)的Integer类型值?
在VBA中生成与C++ MAKEWORD(2,2)一致的Integer值
嘿,这个问题核心是先搞清楚C++里MAKEWORD宏的本质,然后在VBA里复刻这个逻辑就行啦!
先明白MAKEWORD(2,2)到底生成了什么
C++的MAKEWORD(a, b)宏的作用是:把第一个参数a作为低8位字节,第二个参数b作为高8位字节,拼接成一个16位的无符号整数。对于MAKEWORD(2,2)来说,计算逻辑就是:(2 << 8) | 2 → 也就是把2左移8位(得到512),再和2做位或运算,最终结果是十进制的514(十六进制0x0202)。
VBA中的实现方法
VBA里的Integer是16位有符号整数,而514在它的取值范围(-32768 ~ 32767)内,所以直接复刻这个位运算逻辑就可以:
方法1:直接计算
直接写一行代码得到结果:
Dim targetInt As Integer targetInt = (2 << 8) Or 2 ' 结果就是514,和MAKEWORD(2,2)一致
方法2:封装成通用函数
如果需要多次调用类似逻辑,可以封装一个和MAKEWORD功能完全一致的VBA函数:
Function MAKEWORD(ByVal lowByte As Byte, ByVal highByte As Byte) As Integer ' 高字节左移8位,再和低字节做位或,拼接成16位整数 MAKEWORD = (highByte << 8) Or lowByte End Function
调用的时候就和C++里一样方便:
Dim myInt As Integer myInt = MAKEWORD(2, 2) ' 得到的myInt就是514
验证一下
你可以在VBA里用Hex(myInt)查看十六进制值,会得到0202,和C++中MAKEWORD(2,2)的十六进制结果完全一致,说明数值是对的。
内容的提问来源于stack exchange,提问作者Bogey
相关产品推荐
相关产品推荐

