Shell的图像尺寸字符串中的Replace()问号

问题描述 投票: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.