ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

死活搞不定这个图片导出

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-13 14:50 | 显示全部楼层 |阅读模式
其他都搞定了,就是没办法将当前工作表的图片保存到指定路径。




Sub CreateFolderAndWriteTxtFile()
    Dim fso As Object ' 如果没有添加Scripting Runtime引用,则使用Object
    Dim folderPath As String
    Dim newFolderName As String
    Dim fullFolderPath As String
    Dim ws As Worksheet
    Dim cell As Range
    Dim cellValue As String
    Dim filePath As String
    Dim txtFile As Integer
    Dim objShell As Object, f As Object, ph 'ph must be Variant
   Dim pic As Shape '声明一个Shape对象来引用图片



'生成TXT文件和导出图片

    ' 如果没有添加Scripting Runtime引用,则使用CreateObject
    Set fso = CreateObject("Scripting.FileSystemObject")

    ' 获取当前工作簿的活动工作表
    Set ws = ThisWorkbook.ActiveSheet

    ' 从单元格读取文件夹名称(假设在A1)
    Set cell = ws.Range("TXT文件名") ' 或者改为 "TXT文件名" 如果您有一个具体的命名单元格
    newFolderName = Trim(cell.Value) ' 使用Trim去除前后空格

    ' 获取工作簿所在的路径
    folderPath = ThisWorkbook.Path

    ' 构建完整的文件夹路径
    fullFolderPath = folderPath & "\" & newFolderName

    ' 创建文件夹
    On Error Resume Next ' 如果文件夹已存在,则忽略错误
    fso.CreateFolder fullFolderPath
    On Error GoTo 0 ' 恢复正常的错误处理

    ' 指定TXT文件的路径和名称
    filePath = fullFolderPath & "\" & "评论内容.txt"

    ' 尝试打开(或创建)TXT文件进行写入
    On Error Resume Next ' 如果文件已存在,则忽略错误并覆盖
    txtFile = FreeFile ' 获取一个未使用的文件号
    Open filePath For Output As #txtFile

    ' 从一个单元格读取内容
    cellValue = ws.Range("评论内容").Value ' 确保"评论内容"是有效的单元格引用

    ' 将单元格内容写入TXT文件
    Print #txtFile, cellValue

    ' 关闭文件
    Close #txtFile





'导出图片







    Dim shapesToExport() As Variant '数组用于存储要导出的图片引用
    shapesToExport = Array("D9", "F9", "D11", "F11", "D13") '假设图片引用已设置为上述单元格

    '创建一个新的 Shapes 集合,只包含需要导出的图片
    Dim shapeColl As New Collection
    For Each pic In ThisWorkbook.ActiveSheet.Shapes
        If Application.Index(shapeColl, Application.Match(pic.Name, shapesToExport, 0)) Is Nothing Then
            shapeColl.Add pic, pic.Name '只添加匹配的图片
        End If
    Next pic

    If Not shapeColl Is Nothing Then '确认有图片需要导出
        Dim savePath As String
        savePath = fullFolderPath & "\" & ".png" '修改为你需要保存的路径和文件名

        '遍历ShapeCollection并导出图片
        For Each pic In shapeColl
            pic.ExportAsPicture savePath & "\" & pic.Name & ".png", xlBitmap '每个图片单独保存,并保留原名
        Next pic

    End If























    ' 清理
    Set fso = Nothing
    Set ws = Nothing
    Set cell = Nothing

'将刚刚做的数据全部记录到数据库中
    ' 设置工作表引用
    Set wsData = ThisWorkbook.Sheets("数据库")
    Set wsSource = ThisWorkbook.Sheets("工作区") ' 数据在哪个子表

    ' 解密数据库(固定密码)
    wsData.Unprotect Password:="digua"

    ' 获取最后一行并计算新行号
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
    CurrentRow = lastRow + 1

    ' 读取源数据
    CurrentNum = wsSource.Range("序号").Value ' 假设序号在源数据的A2单元格


    ' 写入数据到数据库
    With wsData
        .Cells(CurrentRow, 1) = CurrentRow - 1 '
        .Cells(CurrentRow, 2) = wsSource.Range("TXT文件名").Value
        .Cells(CurrentRow, 3) = wsSource.Range("外放日期").Value
        .Cells(CurrentRow, 4) = wsSource.Range("接单对象").Value
        .Cells(CurrentRow, 5) = wsSource.Range("宝贝ID").Value
        .Cells(CurrentRow, 6) = wsSource.Range("图片张数").Value
        .Cells(CurrentRow, 7) = wsSource.Range("图片1").Value
        .Cells(CurrentRow, 8) = wsSource.Range("图片2").Value
        .Cells(CurrentRow, 9) = wsSource.Range("图片3").Value
        .Cells(CurrentRow, 10) = wsSource.Range("图片4").Value
        .Cells(CurrentRow, 11) = wsSource.Range("图片5").Value
        .Cells(CurrentRow, 12) = wsSource.Range("评论内容").Value
        .Cells(CurrentRow, 13) = wsSource.Range("刷单渠道").Value
        .Cells(CurrentRow, 14) = wsSource.Range("制单人").Value
        .Cells(CurrentRow, 15) = wsSource.Range("备注").Value
    ' 重新保护数据库
    wsData.Protect Password:="digua"
    End With

     '工作表界面更新
    Range("外放日期") = ""
    Range("接单对象").Value = ""
    Range("宝贝ID").Value = ""
    Range("图片张数").Value = ""
    Range("图片1").Value = ""
    Range("图片2").Value = ""
    Range("图片3").Value = ""
    Range("图片4").Value = ""
    Range("图片5").Value = ""
    Range("评论内容").Value = ""
    Range("刷单渠道").Value = ""
    Range("制单人").Value = ""
    Range("备注").Value = ""
    Range("交易编号").Value = ""


'做一个快捷查询

End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-13 14:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

  1. Sub CreateFolderAndWriteTxtFile()
  2.     Dim fso As Object ' 如果没有添加Scripting Runtime引用,则使用Object
  3.     Dim folderPath As String
  4.     Dim newFolderName As String
  5.     Dim fullFolderPath As String
  6.     Dim ws As Worksheet
  7.     Dim cell As Range
  8.     Dim cellValue As String
  9.     Dim filePath As String
  10.     Dim txtFile As Integer
  11.     Dim objShell As Object, f As Object, ph 'ph must be Variant
  12.    Dim pic As Shape '声明一个Shape对象来引用图片
  13.    
  14.    
  15.    
  16. '生成TXT文件和导出图片

  17.     ' 如果没有添加Scripting Runtime引用,则使用CreateObject
  18.     Set fso = CreateObject("Scripting.FileSystemObject")
  19.       
  20.     ' 获取当前工作簿的活动工作表
  21.     Set ws = ThisWorkbook.ActiveSheet
  22.       
  23.     ' 从单元格读取文件夹名称(假设在A1)
  24.     Set cell = ws.Range("TXT文件名") ' 或者改为 "TXT文件名" 如果您有一个具体的命名单元格
  25.     newFolderName = Trim(cell.Value) ' 使用Trim去除前后空格
  26.       
  27.     ' 获取工作簿所在的路径
  28.     folderPath = ThisWorkbook.Path
  29.       
  30.     ' 构建完整的文件夹路径
  31.     fullFolderPath = folderPath & "" & newFolderName
  32.       
  33.     ' 创建文件夹
  34.     On Error Resume Next ' 如果文件夹已存在,则忽略错误
  35.     fso.CreateFolder fullFolderPath
  36.     On Error GoTo 0 ' 恢复正常的错误处理
  37.       
  38.     ' 指定TXT文件的路径和名称
  39.     filePath = fullFolderPath & "" & "评论内容.txt"
  40.       
  41.     ' 尝试打开(或创建)TXT文件进行写入
  42.     On Error Resume Next ' 如果文件已存在,则忽略错误并覆盖
  43.     txtFile = FreeFile ' 获取一个未使用的文件号
  44.     Open filePath For Output As #txtFile
  45.       
  46.     ' 从一个单元格读取内容
  47.     cellValue = ws.Range("评论内容").Value ' 确保"评论内容"是有效的单元格引用
  48.       
  49.     ' 将单元格内容写入TXT文件
  50.     Print #txtFile, cellValue
  51.       
  52.     ' 关闭文件
  53.     Close #txtFile
  54.    
  55.    
  56.    
  57.    

  58. '导出图片


  59.    




  60.     Dim shapesToExport() As Variant '数组用于存储要导出的图片引用
  61.     shapesToExport = Array("D9", "F9", "D11", "F11", "D13") '假设图片引用已设置为上述单元格

  62.     '创建一个新的 Shapes 集合,只包含需要导出的图片
  63.     Dim shapeColl As New Collection
  64.     For Each pic In ThisWorkbook.ActiveSheet.Shapes
  65.         If Application.Index(shapeColl, Application.Match(pic.Name, shapesToExport, 0)) Is Nothing Then
  66.             shapeColl.Add pic, pic.Name '只添加匹配的图片
  67.         End If
  68.     Next pic

  69.     If Not shapeColl Is Nothing Then '确认有图片需要导出
  70.         Dim savePath As String
  71.         savePath = fullFolderPath & "" & ".png" '修改为你需要保存的路径和文件名
  72.         
  73.         '遍历ShapeCollection并导出图片
  74.         For Each pic In shapeColl
  75.             pic.ExportAsPicture savePath & "" & pic.Name & ".png", xlBitmap '每个图片单独保存,并保留原名
  76.         Next pic

  77.     End If





  78.   
  79.    
  80.   
  81.   
  82.   
  83.   
  84.   
  85.   
  86.   
  87.   
  88.   
  89.   
  90.   
  91.   
  92.   
  93.   
  94.   
  95.       
  96.     ' 清理
  97.     Set fso = Nothing
  98.     Set ws = Nothing
  99.     Set cell = Nothing
  100.      
  101. '将刚刚做的数据全部记录到数据库中
  102.     ' 设置工作表引用
  103.     Set wsData = ThisWorkbook.Sheets("数据库")
  104.     Set wsSource = ThisWorkbook.Sheets("工作区") ' 数据在哪个子表
  105.       
  106.     ' 解密数据库(固定密码)
  107.     wsData.Unprotect Password:="digua"
  108.       
  109.     ' 获取最后一行并计算新行号
  110.     lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
  111.     CurrentRow = lastRow + 1
  112.       
  113.     ' 读取源数据
  114.     CurrentNum = wsSource.Range("序号").Value ' 假设序号在源数据的A2单元格
  115.   
  116.       
  117.     ' 写入数据到数据库
  118.     With wsData
  119.         .Cells(CurrentRow, 1) = CurrentRow - 1 '
  120.         .Cells(CurrentRow, 2) = wsSource.Range("TXT文件名").Value
  121.         .Cells(CurrentRow, 3) = wsSource.Range("外放日期").Value
  122.         .Cells(CurrentRow, 4) = wsSource.Range("接单对象").Value
  123.         .Cells(CurrentRow, 5) = wsSource.Range("宝贝ID").Value
  124.         .Cells(CurrentRow, 6) = wsSource.Range("图片张数").Value
  125.         .Cells(CurrentRow, 7) = wsSource.Range("图片1").Value
  126.         .Cells(CurrentRow, 8) = wsSource.Range("图片2").Value
  127.         .Cells(CurrentRow, 9) = wsSource.Range("图片3").Value
  128.         .Cells(CurrentRow, 10) = wsSource.Range("图片4").Value
  129.         .Cells(CurrentRow, 11) = wsSource.Range("图片5").Value
  130.         .Cells(CurrentRow, 12) = wsSource.Range("评论内容").Value
  131.         .Cells(CurrentRow, 13) = wsSource.Range("刷单渠道").Value
  132.         .Cells(CurrentRow, 14) = wsSource.Range("制单人").Value
  133.         .Cells(CurrentRow, 15) = wsSource.Range("备注").Value
  134.     ' 重新保护数据库
  135.     wsData.Protect Password:="digua"
  136.     End With
  137.      
  138.      '工作表界面更新
  139.     Range("外放日期") = ""
  140.     Range("接单对象").Value = ""
  141.     Range("宝贝ID").Value = ""
  142.     Range("图片张数").Value = ""
  143.     Range("图片1").Value = ""
  144.     Range("图片2").Value = ""
  145.     Range("图片3").Value = ""
  146.     Range("图片4").Value = ""
  147.     Range("图片5").Value = ""
  148.     Range("评论内容").Value = ""
  149.     Range("刷单渠道").Value = ""
  150.     Range("制单人").Value = ""
  151.     Range("备注").Value = ""
  152.     Range("交易编号").Value = ""
  153.    
  154.    
  155. '做一个快捷查询

  156. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2024-8-14 10:41 | 显示全部楼层
参考这个帖子
导出单元格中图片到文件夹中-Excel VBA程序开发-ExcelHome技术论坛 -  https://club.excelhome.net/threa ... tml?_dsign=10bdf551

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-14 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
3190496160 发表于 2024-8-14 10:41
参考这个帖子
导出单元格中图片到文件夹中-Excel VBA程序开发-ExcelHome技术论坛 -  https://club.excelho ...

谢谢大佬,但是不是我想要的。我想要的是把当前工作表中嵌入单元格的图片导出到同目录的文件夹中。WPS得,你这个我试过了运行不了。估计是因为WPS不支持
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 18:51 , Processed in 0.040201 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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