分享

利用Excel VBA批量添加图片并打印成PDF

 昵称QAb6ICvc 2013-06-08

利用Excel VBA批量添加图片并打印成PDF

分类: Excel Vba 139人阅读 评论(0) 收藏 举报

折腾了一天,大概总结下

希望实现的效果,添加相应图片,然后打印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./thread-970087-1-1.html

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多