我正在尝试通过在VBA中使用Shell对象来获取位图的高度。
这里是代码的相关部分(bmp
是自定义类的成员,而.Width
是定义为Integer的属性。]
Set objImg = objShell.Namespace(subfs(sf)).ParseName(bmp.Name)
tmpDim = objShell.Namespace(subfs(sf)).GetDetailsOf(objImg, 162)
tmpDim = Replace(tmpDim, "?", "")
tmpDim = Replace(tmpDim, " pixels", "")
bmp.Width = CInt(tmpDim)
我正在获取
类型不匹配错误
在最后一行,因为tmpDim的值为?754
。作为参考,第二行之后的tmpDim值为?754 pixels
。
我有一个步骤用空字符串替换?
,但它不起作用。
您看到的问号实际上不是问号。 Asc()函数将返回63的值,但是AscW()将可能返回8206,即从左到右的unicode标记。
我相信VBA使用两字节宽的字符存储字符串。 Asc函数将仅返回0-255的值,对于超出该范围的任何值,似乎返回63。
这就是为什么您的Replace(tmpDim, "?", "")
不起作用。您正在尝试[]的对等
Replace(tmpDim, Chr(63), "")
您需要
Replace(tmpDim, ChrW(8206), "")
(假设?是从左到右的标记,在我的测试中是?)