Replace()不适用于Shell图像尺寸字符串中的问号

问题描述 投票:7回答:1

我正在尝试通过在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

我具有将空字符串替换为?的步骤,但显然不起作用。这真让我发疯。

有人知道为什么会这样以及如何解决这个问题吗?

excel vba shell windows-7
1个回答
11
投票

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

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

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

的对等
Replace(tmpDim, Chr(63), "")

您需要

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

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

© www.soinside.com 2019 - 2024. All rights reserved.