zoukankan      html  css  js  c++  java
  • VBA-Track 添加图片

    Dim s$, fNm$ '定义公共变量:关键词s和文件名结果fNm
    
    Sub FindFile()
    Dim Arr, i&, pth$, ML, MT, MW, MH, shp
    Arr = [a1].CurrentRegion
    With Cells(2, 2)
        MW = .Width
        MH = .Height
    End With
    For i = 2 To UBound(Arr)
        s = Arr(i, 1)
        If s = "" Then Exit Sub
        pth = ThisWorkbook.Path & "公司图片"
        
        fNm = ""
        Call FindFileName(pth)
        If fNm = "" Then GoTo 100
        With Cells(i, 2)
            ML = .Left
            MT = .Top
            For Each shp In ActiveSheet.Shapes
                If shp.Type = 13 Then
                    If shp.TopLeftCell.Address = .Address Then
                        shp.Delete: Exit For
                    End If
                End If
            Next
            ActiveSheet.Shapes.AddShape(msoShapeRectangle, ML, MT, MW, MH).Select
            Selection.ShapeRange.Fill.UserPicture fNm
        End With
    100:
    Next
    End Sub
    Sub FindFileName(pth)
        If fNm <> "" Then Exit Sub '找到以后就结束递归过程(如果要找到全部则这一句注释掉)
        Set fso = CreateObject("Scripting.FileSystemObject") '设置fso对象
        Set fld = fso.GetFolder(pth) '设置fso对象的父文件夹fld
        Set fsb = fld.SubFolders '设置fso对象文件夹下的子文件夹fsb
        For Each fd In fsb '遍历所有子文件夹
            For Each f In fd.Files '遍历每个子文件夹中的所有文件
                If InStr(f.Name, s) Then fNm = fd.Path & "" & f.Name: Exit Sub
                '找到符合关键词的文件后退出(或者可以存入数组内然后继续查找所有符合的文件)
            Next
            Call FindFileName(fd.Path) '该子文件夹遍历结束时,继续递归进入该文件夹的子文件夹搜寻……
        Next
    End Sub
    Public Sub Q()
    '开始插入图片
    
    Application.ScreenUpdating = False
    Dim PicName$, pand&, k&, PicPath, i, p, n, PicArr, TitleRow
    Dim PicNameCol, PicPath2, PicPath3, TPnameCol, TPCol
    
        Set PicNameCol = Application.InputBox("请选择图片名称所在列,只能选择单列单元格!", Title:="图片名称所在列", Type:=8)
    
            '选择的图片名称所在列
    
        PicCol = PicNameCol.Column '取图片名称所在列列列标
    
        Set TPnameCol = Application.InputBox("请选择图片需要放置的列,只能选择单列单元格!", Title:="图片所在列", Type:=8)
    
            '选择的图片所在列
    
        TPCol = TPnameCol.Column '取图片所在列列列标
    
        
    
        TitleRow = Val(Application.InputBox("请输入标题行的行数")) '用户设置总表的标题行数
    
        If TitleRow < 0 Then MsgBox "标题行必须大于等于零,请重新确认? ": Exit Sub
    
        
    
        With Application.FileDialog(msoFileDialogFolderPicker)
    
            .AllowMultiSelect = False '禁止多选文件夹
    
           If .Show Then PicPath = .SelectedItems(1) Else: Exit Sub
    
        End With
    
        If Right(PicPath, 1) <> "" Then PicPath = PicPath & ""
    
        PicArr = Array(".jpg", ".jpeg", ".bmp", ".png", ".gif") '假定图片格式有5种
    
        For i = TitleRow + 1 To Cells(Rows.Count, PicCol).End(3).Row
    
            PicPath2 = PicPath
    
            PicName = Cells(i, PicCol).Value
    
            If Len(PicName) <> 0 Then '如果PicName不为空
    
                PicPath3 = PicPath2 & PicName
    
                pand = 0
                For p = 0 To UBound(PicArr)
                    If Len(Dir(PicPath3 & PicArr(p))) Then '如果picpath路径下存在PicName图片
                        ActiveSheet.Shapes.AddPicture PicPath3 & PicArr(p), True, True, _
                        Cells(i, TPCol).Left, Cells(i, TPCol).Top, _
                        Cells(i, TPCol).Width, Cells(i, TPCol).Height
    
                        pand = 1
    
                        n = n + 1
                    End If
    
                Next
    
                If pand = 0 Then k = k + 1
                End If
        Next
        Application.ScreenUpdating = True
    
        If k <> 0 Then
            MsgBox "图片插入完成!共有" & k & "张图片未找到,请重新确认源文件! "
        Else
            MsgBox "所有图片插入完成!"
        End If
    End Sub
    

      

      

      

  • 相关阅读:
    问题:https与http有什么区别啊?
    Android应用开发是否应避免使用枚举?
    AppStore 内购验证的方法
    vs2017环境下编译log4cpp-1.1.3
    iphone开发笔记
    系统界面跳转设置[转]
    常用宏OC
    git忽略文件
    第三方开源库学习
    [转]iOS开发总结之代码规范
  • 原文地址:https://www.cnblogs.com/MeiT/p/14853832.html
Copyright © 2011-2022 走看看