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)
(假设?是从左到右的标记,在我的测试中它是)