ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5236|回复: 3

[求助] VBA读取图片文件名问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-7-21 19:51 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 落梅花 于 2014-7-21 21:54 编辑

这是我多年前在网上得到的一段批量插入图片的VBA,插入图片后能自动画线,并在下一行自动给图片编号,效果如下图:
000.jpg
现在要求在显示“图片01、图片02……”的地方显示的是该图片原来的文件名称(只显示名称,不显示文件名的后缀和路径),求哪位大师帮忙修改一下,不胜感激!另,本人用的是WORD2010,希望2010版本下能正常使用。
=============================================

Sub 插入图片() ' ' 将选定图片插入到word文件的表格中,并自动编号,通过ConQtyInEachRow定义一行显示图片的数量
    Dim picOpenDialog As FileDialog, filePath As String, currentRow As Integer, TotalRow As Integer, CurrentColumns As Integer, TotalColumns As Integer, CurrentPic As Integer, totalPic As Integer, ConQtyInEachRow As Integer
    ConQtyInEachRow = 2 '通过这里修改一行显示的数量
    ConFileNameStr = "图片" '在这里修改产品编号后缀
   On Error Resume Next '忽略错误
  Set picOpenDialog = Application.FileDialog(msoFileDialogFilePicker)
    With picOpenDialog
    .Filters.Clear '清除所有文件筛选器中的项目
    .Filters.Add "JPG文件", "*.jpg", 1 '所有JPEG文件
    .Filters.Add "BMP文件", "*.bmp", 2 'BMP文件
    .Filters.Add "所有文件", "*.*", 3 '针对所有文件
    .AllowMultiSelect = True '允许多项选择
       If .Show = -1 Then
    totalPic = .SelectedItems.Count '行数
        If totalPic Mod ConQtyInEachRow = 0 Then '获得行数,注意行数在图片数量被ConQtyInEachRow整除的情况下
    TotalRow = Int((totalPic / ConQtyInEachRow)) * 2
    Else
    TotalRow = (Int(totalPic / ConQtyInEachRow) + 1) * 2
    End If
TotalColumns = ConQtyInEachRow '可以修改要求的列数
    Selection.Collapse Direction:=wdCollapseStart
    Set mytable = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=TotalRow, NumColumns:=TotalColumns, DefaultTableBehavior:=wdWord8TableBehavior, AutoFitBehavior:=wdAutoFitFixed) '建立表格,表格固定尺寸
    mytable.Style = "网格型"
    CurrentColumns = 0 '从第一列开始
    currentRow = 1 '从第 n一行开始
        For Each vrtSelectedItem In .SelectedItems
            filePath = vrtSelectedItem '当前文件名
            CurrentPic = CurrentPic + 1 '当前图片加1,用于编号
            If CurrentPic < 10 Then
            filenamestr = ConFileNameStr + "0" + CStr(CurrentPic)
            Else
            filenamestr = ConFileNameStr + CStr(CurrentPic)
            End If

            If CurrentColumns = ConQtyInEachRow Then '需要重启一行
            CurrentColumns = 1 '从第一列开始重新开始
            currentRow = currentRow + 2 '到下一行,注意要间隔一行
            Else
            CurrentColumns = CurrentColumns + 1
            End If

            '插入图片
            mytable.Cell(Row:=currentRow, Column:=CurrentColumns).Range.InlineShapes.AddPicture FileName:=filePath, LinkToFile:=False, SaveWithDocument:=True
            '下一行加入文件名
            mytable.Cell(Row:=currentRow + 1, Column:=CurrentColumns).Range.InsertAfter filenamestr

        Next vrtSelectedItem
    End If
    End With

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-22 00:25 | 显示全部楼层
感谢 zhanglei1371 原创并分享的代码!http://club.excelhome.net/thread-1048572-1-1.html
完美解决我整理图片中的难题!非常感谢!

TA的精华主题

TA的得分主题

发表于 2014-7-24 15:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-8-1 11:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 00:02 , Processed in 0.019752 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表