如何在Excel中用VBA批量生成“照相机“图片

什么?你不知道照相机是什么??那参见我这篇文章吧

Excel做数据海报

需求描述

目前的状况是这样的,我有1个总表,26个子表.26个子表是按照总表的某个字段拆分出来的.然后我需要生成26个子表的照相机图片
在这里插入图片描述

VBA

Private Sub pictureSheet()    
    Dim Sht As Worksheet
    Dim iSht As Worksheet
    Dim iCnt%,eRow%,eCol%
    
    IMG_NAME = "img"    '用于存放图片的工作表
    iCnt = 1            '图片编号.不需要图片名称的可以忽略
    
    Set iSht = ActiveWorkbook.Sheets(IMG_NAME)
    
    For Each Sht In ActiveWorkbook.Sheets
        If Sht.Name <> "总表" And Sht.Name <> "base" And Sht.Name <> "img" Then '这里排除不需要生成图片的表名
            If Sht.Visible = xlSheetVisible Then    '这里是防止报错中断的时候,接着前面的图继续生成而做的措施
                With Sht
                    eCol = .Cells(2,.Columns.Count).End(xlToLeft).Column
                    eRow = .Cells(.Rows.Count,1).End(3).Row
                    .Activate
                    Application.Wait Now + TimeValue("00:00:01")        '因为调用剪切板的时候Excel经常会报错,故需休眠1秒,下面两处同理
                    .Range(.Cells(1,1),.Cells(eRow,eCol)).CopyPicture
                    Application.Wait Now + TimeValue("00:00:01")
                    iSht.Select
                    Application.Wait Now + TimeValue("00:00:01")
                    iSht.Paste
                    Selection.Name = iCnt
                    Selection.Formula = "='" & Sht.Name & "'!" & .Range(.Cells(1,1),.Cells(eRow,eCol)).Address
                    Application.CutCopyMode = False
                    iCnt = iCnt + 1
                End With
            End If
        End If
    Next
End Sub

通过这段代码可以将26张图片自动存放在img工作表,并按生成时间自动编号.

实际过程中经常会报错,这时候就需要你手动调整了

在WPS中使用VBA(Visual Basic for Applications)编写批量导入图片的程序,你可以按照以下步骤操作: 1. **开启宏功能**:首先,在WPS表格或演示文稿中,点击“开发者”选项卡(如果没显示,需要在文件菜单中选择“选项”,启用“开发工具”)。 2. **创建新模块**:在“开发工具”区域中,找到“宏”按钮并单击,然后在弹出的窗口中输入宏名称(如“ImportImages”),接着会自动生成一个新的模块。 3. **编写VBA代码**: - 使用`Application.GetOpenFilename`函数让用户选择需要导入的图片文件,例如: ```vba Dim imgPath As String imgPath = Application.GetOpenFilename("所有文件(*.*)", , "选择图片") If imgPath <> False Then ' 图片路径已获取到,接下来可以插入图片 End If ``` - 使用`Sheets(1).Shapes.PasteSpecial`或者`ActiveSheet.Shapes.PasteSpecial`将图片粘贴到当前工作表的指定位置。例如: ```vba Sheets(1).Shapes.PasteSpecial Link:=False, DataType:=8 ' 8表示PictType.Picture ``` 4. **循环处理**:为了批量导入,你可能需要在一个For-Next循环中处理用户多次选择的图片,每次迭代都重复上述过程。 5. **错误处理**:记得添加适当的错误处理机制,比如检查是否成功选择了图片,以及插入图片过程中可能出现的问题。 ```vba Sub ImportMultipleImages() Dim imgPaths() As Variant imgPaths = Application.GetOpenFilename("所有文件(*.*)", , "选择多张图片", MultiSelect:=True) For i = LBound(imgPaths) To UBound(imgPaths) On Error GoTo ErrorHandler Dim imgPath As String imgPath = imgPaths(i) If Not IsError(imgPath) Then Sheets(1).Shapes.PasteSpecial Link:=False, DataType:=8 Debug.Print "图片 " & i + 1 & " 已导入至第 1 张工作表" Else Debug.Print "无法导入图片 " & i + 1 & ": " & Err.Description End If Next i Exit Sub ErrorHandler: MsgBox "发生错误:" & Err.Description, vbCritical End Sub ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但老师

要是看起来爽 求打赏一耳光

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值