7

我试图通过在 VBA 中使用 Shell 对象来获取位图的高度。

这是代码的相关部分(bmp是自定义类的成员,并且.Width是定义为整数的属性。)

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.

我有一个?用空字符串替换的步骤,但它不起作用。我怎样才能摆脱问号字符?

4

1 回答 1

11

您看到的问号实际上不是问号。Asc() 函数将返回值 63,但 AscW() 可能会返回 8206,即 unicode 从左到右的标记。

我相信 VBA 使用两字节宽的字符存储字符串。Asc 函数将仅返回 0-255 的值,并且对于超出该范围的任何内容似乎返回 63。

这就是为什么你的Replace(tmpDim, "?", "")不起作用。您正在尝试等效于

Replace(tmpDim, Chr(63), "")

你需要

Replace(tmpDim, ChrW(8206), "")

(假设 ? 是从左到右的标记,在我的测试中是)

于 2013-08-13T18:48:33.447 回答