折腾了一天,大概总结下 希望实现的效果,添加相应图片,然后打印PDF。添加前删除之前添加过的图片。
折腾了一天是因为图片的大小,以及是利用AddPicture方法添加,还是用图像控件添加。
Addpicture方法:这个方法相当于Excel里的插入图片,缺点是必须指定插入图片的位置和图片尺寸,这点非常之麻烦。 插入的位置:用range.select选中,然后用selection.height, width来判断插入的坐标,这个就度娘了很久,再次感谢各路大神 插入图片的尺寸:必须输入,还不能默认。(如果谁知道能以默认大小插入图片,还请告知)。不能默认,就首先需要知道图片的大小 这一段代码是用来获取图片的宽,感兴趣的可以研究研究,高就不说了,一样。这段代码的出处我已经找不到了,这是我修改过的,原作者勿怪。 HWString是通过系统找出来的图片的“尺寸”的字符串,然后split找出宽(和高) Function getPicWidth(picPath) As Single
网上有朋友说直接用AddPicture方法加入图片然后用range.select查看,我想说真的不行,不知道EXCEL怎么回事,有时候小图片加入后不是图片原来的大小,而大一点的图片却是,这点非常不理解。大家可以试一试。
以上是成功用AddPicture加入图片并准确控制加入位置和大小的方法。需要注意的是上面代码获取的图片大小是像素,需要换成磅 磅和像素的换算:(摘自网络) 磅:pt px=pt*96/72; pt=px*72/96; ====================================== 好了,以上是研究成果,现在来看烦了我一下午的图像控件!!!! 图像控件,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./thread-970087-1-1.html
|
|
来自: 昵称QAb6ICvc > 《vba应用》