I'm trying to get the height of a bitmap by using the Shell object in VBA.
Here is the relevant portion of code (bmp
is a member of a custom class, and .Width
is a property defined as an 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)
I'm getting a Type Mismatch error on the last line because the value of tmpDim is ?754
. For reference, the value of tmpDim after the second line is ?754 pixels
.
I have a step to replace the ?
with an empty string, but it does not work. How can I get rid of the question mark character?
The question mark you are seeing is not actually a question mark. The Asc() function will return a value of 63, but AscW() will probably return 8206, the unicode left-to-right mark.
I believe VBA stores strings using two-byte wide characters. The Asc function will only return a value of 0-255 and appears to return 63 for anything outside that range.
This is why your Replace(tmpDim, "?", "")
doesn't work.
You're trying the equivilent of
Replace(tmpDim, Chr(63), "")
You need
Replace(tmpDim, ChrW(8206), "")
(Assuming the ? is the left-to-right mark, which in my testing it is)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With