ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何把Word 单元格中的内容批量移位

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-12-4 18:05 | 显示全部楼层 |阅读模式

在此向各位高手请教,帮忙解决一个难题:
如WORD文档中有多个表格,而在最后一个表格中, 从第一个单元格开始的连续若干格中,各有一张图片;而在次行的单元格中则有相对应的图片内容描述。

现在的问题是:当有时想在某处(第一张之后,最后一张图片之前)插入一张新的图片及其对应的描述时,需对欲插入点之后的每一对图片和描述进行多次“复制/粘贴”操作来进行移位,相应地,如果要删除某一张时,需要把其后的全部向前移动。如果图片张数多时(60多张)工作量非常大。

请问有无何种快速的方法可行(例如通过VBA或者宏)?
注: 此表格列数固定为3列, 有图片的单元格须连续,而行数根据图片数不定。
附情请参见所附WORD文档。

请各位高手不吝赐教,谢谢!

qZF0hGax.rar (185.4 KB, 下载次数: 11)
[此贴子已经被作者于2005-12-4 18:13:12编辑过]

TA的精华主题

TA的得分主题

发表于 2005-12-4 20:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

只将字和其对应的图片同时拖黑,再拖到目的地不行吗?

同时多选中几组也是可以移动嘀。

[此贴子已经被作者于2005-12-4 20:32:41编辑过]

TA的精华主题

TA的得分主题

发表于 2007-3-9 22:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vba如何实现呢?版主有办法吗?

TA的精华主题

TA的得分主题

发表于 2007-3-10 06:43 | 显示全部楼层
QUOTE:
以下是引用菊石泽露在2007-3-9 22:31:15的发言:
vba如何实现呢?版主有办法吗?

请参考:

http://club.excelhome.net/viewthread.php?tid=152717&px=0

我提示一下,用WORD特有的方法,即将图片链接到文件,这是一个域,将域读取到数组,再赋值到单元格即可。

TA的精华主题

TA的得分主题

发表于 2007-3-10 14:18 | 显示全部楼层

不会处理图片对象,只用移动单元格的方法试学着做了一个前移图片的宏,好像可以执行,至于运行速度等就无力考究了,请各位赐教。

Sub movepics()
'请首先将光标置于第一个需要前移图片的(空白)单元格。
On Error GoTo exit_1
Application.ScreenUpdating = False
Dim n As Integer, Rownum As Integer, Colnum As Byte
NP:  With Selection
        '判断光标是否在表格中
        If .Information(wdWithInTable) Then
            '要求插入点所在表格为3列且大于3行,并只选中一个单元格
            If .Tables(1).Rows.Count > 3 _
            And .Tables(1).Columns.Count = 3 And .Cells.Count = 1 Then
                Rownum = .Information(wdEndOfRangeRowNumber)
                Colnum = .Information(wdEndOfRangeColumnNumber)
                '判断插入点是否在表格最后两行,此处可能有误。
                If Rownum + 1 >= .Tables(1).Rows.Count And Colnum = 3 Then
                    Application.ScreenUpdating = True
                    MsgBox "已到表格末尾,共移动了" & n & "次。", vbOKOnly
                    Exit Sub
                End If
                '判断插入点是否处于表格第3列
                If Colnum Mod 3 <> 0 Then
                    .MoveRight unit:=wdCell, Count:=1
                    .MoveDown unit:=wdLine, Count:=1, Extend:=wdExtend
                    .Cut
                    .MoveLeft unit:=wdCell, Count:=1
                    .MoveDown unit:=wdLine, Count:=1, Extend:=wdExtend
                    .Paste
                    .MoveRight unit:=wdCell, Count:=2
                Else
                    .MoveDown unit:=wdLine, Count:=2
                    .MoveLeft unit:=wdCell, Count:=2
                    .MoveDown unit:=wdLine, Count:=1, Extend:=wdExtend
                    .Cut
                    .MoveUp unit:=wdLine, Count:=2
                    .MoveRight unit:=wdCell, Count:=2
                    .MoveDown unit:=wdLine, Count:=1, Extend:=wdExtend
                    .Paste
                    .MoveDown unit:=wdLine, Count:=1
                    .MoveLeft unit:=wdCell, Count:=2
                End If
                n = n + 1
                GoTo NP
            End If
        End If
    End With
exit_1: MsgBox "插入点或格式有误!", vbCritical
End Sub

TA的精华主题

TA的得分主题

发表于 2007-3-10 15:59 | 显示全部楼层

也尝试用range对象练习做了一个,请各位指点

Sub movepics2()
'请先将插入点置于第一个需要前移图片的(空白)单元格。
On Error goto exit_1
Application.ScreenUpdating = False
Dim n As Integer, Rownum As Integer, Colnum As Byte, myrange As Range
    '如果插入点位于表格内,且表格大于3行,则将该表格中插入点及其后的所有单元格设置为处理区域
    With Selection
        If .Information(wdWithInTable) Then
            If .Tables(1).Rows.Count > 3 And .Cells.Count = 1 Then
                Rownum = .Information(wdEndOfRangeRowNumber)
                Colnum = .Information(wdEndOfRangeColumnNumber)
                .MoveRight unit:=wdCharacter, Count:=.Tables(1).Columns.Count _
                    - Colnum + 1, Extend:=wdExtend
                .MoveDown unit:=wdLine, Count:=.Tables(1).Rows.Count _
                    - Rownum, Extend:=wdExtend
            End If
        End If
        Set myrange = .Range
    End With
    With myrange
    '在单数行的单元格中循环处理
    For i = 1 To .Cells.Count
        If .Cells(i).RowIndex Mod 2 = 1 Then
            '如果单元格位于最右列
            If .Cells(i).ColumnIndex = .Tables(1).Columns.Count And _
                .Cells(i).RowIndex + 1 < .Tables(1).Rows.Count Then
                '前移图片
                With myrange.Cells(i + .Tables(1).Columns.Count + 1).Range
                    .Select
                    .Cut
                End With
                .Cells(i).Range.Paste
                '前移图片说明文字
                With myrange.Cells(i + .Tables(1).Columns.Count * 2 + 1).Range
                    .Select
                    .Cut
                End With
                .Cells(i + .Tables(1).Columns.Count).Range.Paste
            '如果到达最后一个单元格(表格最后一行应完整)
            ElseIf .Cells(i).RowIndex + 1 >= .Tables(1).Rows.Count _
            And .Cells(i).ColumnIndex = 3 Then
                Application.ScreenUpdating = True
                MsgBox "已到表格末尾,共前移了" & n & "次。"
                Exit Sub
            '其他情况下
            Else
                '前移图片
                With myrange.Cells(i + 1).Range
                    .Select
                    .Cut
                End With
                .Cells(i).Range.Paste
                '前移说明文字
                With myrange.Cells(i + .Tables(1).Columns.Count + 1).Range
                    .Select
                    .Cut
                End With
                .Cells(i + .Tables(1).Columns.Count).Range.Paste
            End If
            n = n + 1
        End If
    Next i
    End With
exit_1: Application.ScreenUpdating = True
        MsgBox "操作或格式有误!", vbCritical
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 15:30 , Processed in 0.035625 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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