折腾了一天,大概总结下
希望实现的效果,添加相应图片,然后打印PDF。添加前删除之前添加过的图片。
折腾了一天是因为图片的大小,以及是利用AddPicture方法添加,还是用图像控件添加。
Addpicture方法:这个方法相当于Excel里的插入图片,缺点是必须指定插入图片的位置和图片尺寸,这点非常之麻烦。
插入的位置:用range.select选中,然后用selection.height, width来判断插入的坐标,这个就度娘了很久,再次感谢各路大神
插入图片的尺寸:必须输入,还不能默认。(如果谁知道能以默认大小插入图片,还请告知)。不能默认,就首先需要知道图片的大小
这一段代码是用来获取图片的宽,感兴趣的可以研究研究,高就不说了,一样。这段代码的出处我已经找不到了,这是我修改过的,原作者勿怪。
HWString是通过系统找出来的图片的“尺寸”的字符串,然后split找出宽(和高)
Function getPicWidth(picPath) As Single
Set objShell = CreateObject("Shell.Application")
rPath = Replace(picPath, Dir(picPath, vbDirectory), "")
Set oFolder = objShell.Namespace(rPath)
'Dim arr(40) As String
Dim HWstring As String
For i = 0 To 35
If oFolder.getdetailsof(oFolder.Items, i) = "尺寸" Then
Set ofile = oFolder.Items.Item(Dir(picPath))
HWstring = oFolder.getdetailsof(ofile, i)
Exit For
End If
Next i
'MsgBox (HWstring)
ar = Split(HWstring, "x")
zuo = CSng(Mid(ar(0), 2, Len(ar(0))))
'MsgBox (zuo)
getPicWidth = zuo
End Function
网上有朋友说直接用AddPicture方法加入图片然后用range.select查看,我想说真的不行,不知道EXCEL怎么回事,有时候小图片加入后不是图片原来的大小,而大一点的图片却是,这点非常不理解。大家可以试一试。
以上是成功用AddPicture加入图片并准确控制加入位置和大小的方法。需要注意的是上面代码获取的图片大小是像素,需要换成磅
磅和像素的换算:(摘自网络)
磅:pt
像素:px
px=pt*96/72;
pt=px*72/96;
其中96为磅的英寸值(每英寸几个点的数量),一般叫:dbi
======================================
好了,以上是研究成果,现在来看烦了我一下午的图像控件!!!!
图像控件,ActiveX image control,用起来确实不错。对了,忘了说了,用AddPicture方法无法实现自动剪裁,比如图片超过指定大小,就只显示左上角指定大小的一部分。我没发现AddPicture能做到这点。但image控件却可以。我曾以为image控件灰常强大,但我错了。
在用for循环中,image控件只能被正确Load一次,看以下代码
For i = 1 to 3
If i=1 then
Sheet1.Image1.Picture=LoadPicture("C:\1.jpg")
Elseif i=2 then
Sheet1.Image1.Picture=LoadPicture("C:\2.jpg")
Elseif i=3 then
Sheet1.Image1.Picture=LoadPicture("C:\3.jpg")
End if
'打印的代码
Next i
OK以上代码很简单,1到3,每次打印不同的图片,而且可以很方便的控制大小,位置等等,但最后发现打印出来的全是第一张图片,最后打印完后,显示的是第三张图片。我折腾了一下午硬是没弄清楚。最后发现图像控件在一个sub里只能被load一次,不管你设置多少次Picture的值,其显示的只是第一个。而且也无法判断是否正确加载。我要疯了。早知道还是用AddPicture了!!!
各位看官可以试一试,我也在ExcelHome发了贴
http://club.excelhome.net/thread-970087-1-1.html
联系客服