ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量插入子文件夹内的所有图片问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-13 00:26 | 显示全部楼层 |阅读模式
假设路径C:\testbatpic 下有 文件夹 abc,def,.....n个文件夹,abc文件夹下有图片 1.jpg,2,jpg.....n.jpg.
如何实现

1.在光标点批量插入这些图片,
2,在插入某个文件夹的所有图片之前,打出文件夹名称。即,打印文件夹名abc,然后在下一行执行插入操作,当最后abc文件夹最后一个图片插入完,后,打出下一个文件夹名称,然后执行插入。。。。。直到第 n个文件插入结束。
不清楚该怎么修改如下代码,来满足以上 需求。谢谢大神帮助。

Sub loopAllSubFolderSelectStartDirectory()

Dim FSOLibrary As Object
Dim FSOFolder As Object
Dim folderName As String

folderName = "C:\testbatpic"


Set FSOLibrary = CreateObject("Scripting.FileSystemObject")


LoopAllSubFolders FSOLibrary.GetFolder(folderName)


End Sub
Sub LoopAllSubFolders(FSOFolder As Object)

Dim FSOSubFolder As Object
Dim FSOFile As Object

For Each FSOSubFolder In FSOFolder.subfolders
    LoopAllSubFolders FSOSubFolder

Next

For Each FSOFile In FSOFolder.Files


Selection.InlineShapes.AddPicture (FSOFile.path)
Next

End Sub






TA的精华主题

TA的得分主题

发表于 2022-9-13 09:33 | 显示全部楼层
  1. Sub test1()
  2.   Dim sPath As String, oFolder As Object, oFile As Object, bFilesExists As Boolean
  3.   Dim Cel As Range, Shp As Shape, iRow As Integer, pCol As Integer
  4.   sPath = "c:\testbatpic"
  5.   If Dir(sPath, vbDirectory) = "" Then MsgBox "Not exists " & sPath: Exit Sub
  6.   ActiveSheet.Pictures.Delete
  7.   Application.ScreenUpdating = False
  8.   With ActiveCell
  9.     iRow = .Row - 1
  10.     pCol = .Column
  11.   End With
  12.   For Each oFolder In CreateObject("Scripting.FileSystemObject").GetFolder(sPath).SubFolders
  13.     bFilesExists = False
  14.     For Each oFile In oFolder.Files
  15.       If LCase(Right(oFile.Name, 4)) = ".jpg" Then
  16.         If Not bFilesExists Then
  17.           iRow = iRow + 1
  18.           Cells(iRow, pCol) = oFolder.Name 'oFolder.Path
  19.           bFilesExists = True
  20.         End If
  21.         iRow = iRow + 1
  22.         Set Cel = Cells(iRow, pCol)
  23.         Cel.Value = oFile.Name             'oFile.Path
  24.         Set Shp = ActiveSheet.Shapes.AddPicture(oFile.Path, msoFalse, msoCTrue, Cel.Left, Cel.Top, Cel.Width, Cel.Height)
  25.         Shp.Placement = xlMoveAndSize
  26.       End If
  27.     Next
  28.   Next
  29.   Set Cel = Nothing
  30.   Set Shp = Nothing
  31.   Application.ScreenUpdating = True
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-13 10:56 | 显示全部楼层

不好意思忘记说了,是在word下面,实现。但是上面代码似乎 连文件名也打印出来了,不需要打印文件名,只需要 打印 subfolder的名称

TA的精华主题

TA的得分主题

发表于 2022-9-13 11:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大罡 发表于 2022-9-13 10:56
不好意思忘记说了,是在word下面,实现。但是上面代码似乎 连文件名也打印出来了,不需要打印文件名,只 ...

呵呵呵,抢答出问题了算是顶一下吧。
word不会,23行与文件名有关。

TA的精华主题

TA的得分主题

发表于 2022-9-13 15:55 | 显示全部楼层
上传附件来看看吧,没有附件,说再多别人也没法理解你的意思的

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-21 17:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
简单粗暴有效地解决了问题。
  1. Sub InsertMulti_pic_with_subfoldername()
  2. '程序遍历定义的文件夹后,在空白word文档批量输出图片,并输出子文件夹名称,并将定义称标题样式 2022.09.21 by Dagang
  3.     Dim FSOLibrary As Object                                          
  4.     Dim FSOFolder As Object
  5.     Dim folderName As String
  6.     folderName = "D:\desktop folder\pic"             '定义一个要处理图片的路径
  7.     Set FSOLibrary = CreateObject("Scripting.FileSystemObject")
  8.     LoopAllSubFolders FSOLibrary.GetFolder(folderName)                '调用子程序并传参
  9.     ActiveDocument.Paragraphs(1).Range.Delete                         '删除首行分页符
  10. End Sub
  11. Sub LoopAllSubFolders(FSOFolder As Object)
  12.     Dim FSOSubFolder As Object
  13.     Dim FSOFile As Object
  14.     Dim rng As Word.Range
  15.     Set rng = Selection.Range
  16.   For Each FSOSubFolder In FSOFolder.subfolders                        '遍历预定义下的子目录
  17.       With Selection                                                   '输出字符串格式化
  18.            rng.Start = ActiveDocument.Content.End                      '定位到文档末尾
  19.            .InsertBreak Type:=wdPageBreak                              '插入一个分节符
  20.             rng.Start = ActiveDocument.Content.End                     '定位到文档末尾
  21.            .InsertBreak Type:=wdPageBreak
  22.            .EndKey unit:=wdStory
  23.            rng.Text = FSOSubFolder.name
  24.               Set rng = rng.Paragraphs(1).Range                         '定义的预修饰的范围
  25.                   rng.style = Word.WdBuiltinStyle.wdStyleHeading1       ' 将子文件夹名渲染成标题1样式
  26.                   rng.Collapse Word.WdCollapseDirection.wdCollapseEnd
  27.      End With
  28.      LoopAllSubFolders FSOSubFolder                                      '定义的预修饰的范围
  29.   Next

  30.   For Each FSOFile In FSOFolder.Files                                     '遍历所有文件
  31.       Selection.InlineShapes.AddPicture (FSOFile.path)                     '批量插入图片
  32.   Next
  33. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2022-9-21 19:37 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 22:17 , Processed in 0.035743 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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