替换()不对Shell中的图像尺寸字符串中的问号起作用

Exc*_*lll 5 shell excel vba excel-vba windows-7

我试图通过在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)
Run Code Online (Sandbox Code Playgroud)

我在最后一行遇到类型不匹配错误,因为tmpDim的值是?754.作为参考,第二行之后的tmpDim的值是?754 pixels.

我有一个步骤来替换?空字符串,但它显然不起作用.这让我疯了.有谁知道为什么会发生这种情况以及如何解决这个问题?

And*_*ASM 10

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

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

这就是你Replace(tmpDim, "?", "")不能工作的原因.你正在尝试等效的

Replace(tmpDim, Chr(63), "")
Run Code Online (Sandbox Code Playgroud)

你需要

Replace(tmpDim, ChrW(8206), "")
Run Code Online (Sandbox Code Playgroud)

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