免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1717|回复: 12
收起左侧

[技巧] word中插入照片或图片到表格

[复制链接]

2

主题

2070

铜板

17

好友

助理工程师

...&a

Rank: 5Rank: 5

积分
378
QQ
发表于 2023-7-5 13:57 | 显示全部楼层 |阅读模式
word中插入照片或图片到表格,并根据照片或图片名将照片或图名插入对应的照片或图片的上方或下方,该功能是用VBA代码来实现的,具体代码如下:
一、顶部显示代码如下:

Sub InsertPic()     '批量插入图片到Word文档
Dim CL, I&, Fn, ST&, RL&, SI
Dim W As Double, WW As Double
If Selection.Information(wdWithInTable) = True Then '在表格中则退出
    MsgBox "请选择非表格区域.", vbCritical + vbOKOnly, "警告..."    '如果选择的是表格区域,则警告并退出运行
    Exit Sub
End If

CL = InputBox("请输入插入图片的列数.", "输入...", "3")  '设置插入图片的列数,默认为3列
If Not VBA.IsNumeric(CL) Then   '判断输入值是否为数字
    If CL = "" Then Exit Sub
    MsgBox "必须输入数字.", vbCritical + vbOKOnly, "警告..."
    Exit Sub
End If

If Selection.Start = ActiveDocument.Content.End - 1 Then '如光标在文末
    Selection.TypeParagraph '在文末添加一空段
Else
    Selection.EndKey
End If

With ActiveDocument.PageSetup
    W = (.PageWidth - .LeftMargin - .RightMargin) / CL
End With

Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFilePicker)    '选择文件
    .InitialView = msoFileDialogViewList
    .Filters.Add "图片文件", "*.jpg,*.png,*.bmp", 1
    .AllowMultiSelect = True
    If .Show = -1 Then
    Selection.EndKey
    ST = .SelectedItems.Count
            RL = ((ST \ CL) + Sgn(ST Mod CL)) * 2

        Set SI = .SelectedItems
        Dim R&, C&, K&
        With ActiveDocument.Tables.Add(Selection.Range, RL, CL, 1, 1)    '新建表格
            .Borders.Enable = True     '默认不设置框线
                For Each Fn In SI   '开始循环
                    K = K + 1
                    R = (K - 1) \ CL + 1    '现在行
                    C = (K - 1) Mod CL + 1      '现在列
                       With .Cell(R * 2 , C).Range.InlineShapes.AddPicture(FileName:=Fn, SaveWithDocument:=True)
                        WW = .Width
                        .Width = W         '设置图片宽度
                        .Height = .Height * (W / WW)       '设置图片高度
                    End With
                   .Cell(R * 2-1, C).Range.Text = Basename(Fn)       '在图片下方写入图片名称
                Next Fn
        End With
    End If
End With
Selection.HomeKey   '光标回到首行
Application.ScreenUpdating = True
'MsgBox "ok", vbInformation + vbOKOnly, "提示..."
End Sub

Function Basename(FullPath) '取得文件名
Basename = Mid(FullPath, InStrRev(FullPath, "\") + 1)
Basename = Left(Basename, Len(Basename) - 4)
End Function

二、底部显示代码如下:

Sub InsertPic()     '批量插入图片到Word文档
Dim CL, I&, Fn, ST&, RL&, SI
Dim W As Double, WW As Double
If Selection.Information(wdWithInTable) = True Then '在表格中则退出
    MsgBox "请选择非表格区域.", vbCritical + vbOKOnly, "警告..."    '如果选择的是表格区域,则警告并退出运行
    Exit Sub
End If

CL = InputBox("请输入插入图片的列数.", "输入...", "3")  '设置插入图片的列数,默认为3列
If Not VBA.IsNumeric(CL) Then   '判断输入值是否为数字
    If CL = "" Then Exit Sub
    MsgBox "必须输入数字.", vbCritical + vbOKOnly, "警告..."
    Exit Sub
End If

If Selection.Start = ActiveDocument.Content.End - 1 Then '如光标在文末
    Selection.TypeParagraph '在文末添加一空段
Else
    Selection.EndKey
End If

With ActiveDocument.PageSetup
    W = (.PageWidth - .LeftMargin - .RightMargin) / CL
End With

Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFilePicker)    '选择文件
    .InitialView = msoFileDialogViewList
    .Filters.Add "图片文件", "*.jpg,*.png,*.bmp", 1
    .AllowMultiSelect = True
    If .Show = -1 Then
    Selection.EndKey
    ST = .SelectedItems.Count
            RL = ((ST \ CL) + Sgn(ST Mod CL)) * 2

        Set SI = .SelectedItems
        Dim R&, C&, K&
        With ActiveDocument.Tables.Add(Selection.Range, RL, CL, 1, 1)    '新建表格
            .Borders.Enable = True     '默认不设置框线
                For Each Fn In SI   '开始循环
                    K = K + 1
                    R = (K - 1) \ CL + 1    '现在行
                    C = (K - 1) Mod CL + 1      '现在列
                       With .Cell(R * 2-1 , C).Range.InlineShapes.AddPicture(FileName:=Fn, SaveWithDocument:=True)
                        WW = .Width
                        .Width = W         '设置图片宽度
                        .Height = .Height * (W / WW)       '设置图片高度
                    End With
                   .Cell(R * 2, C).Range.Text = Basename(Fn)       '在图片下方写入图片名称
                Next Fn
        End With
    End If
End With
Selection.HomeKey   '光标回到首行
Application.ScreenUpdating = True
'MsgBox "ok", vbInformation + vbOKOnly, "提示..."
End Sub

Function Basename(FullPath) '取得文件名
Basename = Mid(FullPath, InStrRev(FullPath, "\") + 1)
Basename = Left(Basename, Len(Basename) - 4)
End Function

饿

20

主题

1万

铜板

12

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2050
发表于 2023-7-5 14:44 | 显示全部楼层
怎么用?
回复

使用道具 举报

1

主题

6997

铜板

1

好友

工程师

Rank: 7Rank: 7Rank: 7

积分
592
QQ
发表于 2023-7-5 16:01 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

2万

铜板

6

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3612
发表于 2023-7-5 17:44 | 显示全部楼层
学习一下
回复

使用道具 举报

21

主题

9万

铜板

83

好友

地信学员

开开心心每一天

Rank: 12Rank: 12Rank: 12

积分
12813
发表于 2023-7-5 21:41 | 显示全部楼层
谢谢提供分享学习学习了
回复 支持 反对

使用道具 举报

1

主题

9347

铜板

13

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
855
发表于 2023-7-6 08:32 | 显示全部楼层
额,这得多大工作量啊,都上代码了。
回复 支持 反对

使用道具 举报

2

主题

2070

铜板

17

好友

助理工程师

...&a

Rank: 5Rank: 5

积分
378
QQ
 楼主| 发表于 2023-7-10 15:49 | 显示全部楼层
木叶飘 发表于 2023-7-6 08:32
额,这得多大工作量啊,都上代码了。

是的,在实际工作中发现需要插入的照片太多了
饿
回复 支持 反对

使用道具 举报

0

主题

1204

铜板

3

好友

助理工程师

Rank: 5Rank: 5

积分
190
发表于 2023-7-11 15:05 | 显示全部楼层
:zt:zt:zt:zt
回复 支持 反对

使用道具 举报

0

主题

3691

铜板

5

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1429
发表于 2024-4-19 09:06 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1224

铜板

1

好友

助理工程师

Rank: 5Rank: 5

积分
340
发表于 2024-8-9 15:06 | 显示全部楼层
word中插入照片或图片到表格
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表