word(2010)使用VBA完成批处理操作-批量清除表格某单元格内容

word VBA 的使用案例

VBA是什么?

VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。它也可说是一种应用程式视觉化的 Basic 脚本。
1993年由微软公司开发的应用程序共享一种通用的自动化语言——–即Visual Basic for Application(VBA),实际上VBA是寄生于VB应用程序的版本。1994年发行的Excel 5.0版本中,即具备了VBA的宏功能。(以上为百度百科上的解释,百度百科地址

为什么要使用VBA?

上篇文章(文章地址)Word宏的运用,其中也说明了Word宏缺点比较明显,“通过录制得到的往往没有手动编写代码得到的更加精致和灵活”,在实际运用中,我们想对文本进行批处理时,往往存在其它的变化因素,单纯的通过手动录制宏,没有办法实现最终目的,此时就需要灵活的编写VBA代码来达到预期的结果。

VBA的运用实例—批量清除表格某单元格内容

工作中经常遇到对word的批量操作,如果重复的操作达到上百甚至更多后,也是不小的工作量,若手动处理很容易出现因为疲劳导致的处理错误、遗漏等问题。而此时只会简单的录制宏,就会发现有时使用录制的宏去处理,并不能很好的解决我们的问题,下面跟着我一起分析一个案例,我会详细说明如何根据需求先对文档进行分析,再设计解决方案,最后进行代码的实现。(有编程基础的,建议直接看代码)
如图所示:
目的:将设计单中的”测试结果“和”问题标识“列内容清空。
《word(2010)使用VBA完成批处理操作-批量清除表格某单元格内容》

文档其它部分展示

《word(2010)使用VBA完成批处理操作-批量清除表格某单元格内容》

文档分析:

  1. 若要清除设计单9的”测试结果“和”问题标识“列,我们只需要将8~11行的4、5列内容替换为空即可,代码实现为ActiveDocument.Tables(1).Cell(8, 4).Range.Text = "",表示将第1个表格的8行4列内容写成空,后面再更改行数和列数,就能实现将8~11行的4、5列内容替换为空。
  2. 我们继续往下看设计单10,发现了一个严重的问题,设计单9的步骤有4步,而设计单10的步骤有2步,每个测试用例设计单内的步骤是不固定的! 若要清除设计单9的”测试结果“和”问题标识“列,需要将8~9行的4、5列内容替换为空,如果此时使用清除设计单9的代码去执行设计单10,就会将设计单10内容打乱。同理,若设计单11的步骤数为5,那就会出现遗漏一列没有清除掉。可以形象的理解为一把钥匙只能打开一扇门,此时使用固定的行数已经无法达到目的,我们就需要琢磨下怎么制作一把万能钥匙呢?

建议先思考分析下问题再往下看,相对于得到鱼,我更希望大家得到渔!

设计解决方案:
下面为我个人的分析思路和设计解决方案:通过对设计单9、10的分析,每次清除的单元格的行数是不固定的,列数是固定的4、5,所以我只需要确定每次清除的行数是正确的,就能够达到最终目的。我先对比了设计单9、10,发现表格的前7行和后4行为固定模板,因此可以确定我要清理的行数一定是从第8行开始,结束的行数一定是倒数第5行(暂定为LastR行),此时就得到了要清理的行数:8行~LastR行,这就得到每次要清理的单元格坐标(行数和列数)。现在只需要将8~LastR行的4、5列内容替换为空即可。

代码的实现

Sub 批量清除表格某单元格内容()
For t = 1 To ActiveDocument.Tables.Count
    LastR = ActiveDocument.Tables(t).Rows.Count - 4
    For r = 8 To LastR
	    ActiveDocument.Tables(t).Cell(r, 4).Range.Text = ""
	    ActiveDocument.Tables(t).Cell(r, 5).Range.Text = ""
    Next r
Next t
End Sub

注释

Sub 批量清除表格某单元格内容()
For t = 1 To ActiveDocument.Tables.Count
'这里循环是为了清除所有表格,ActiveDocument.Tables.Count为统计文档的表格数
    LastR = ActiveDocument.Tables(t).Rows.Count - 4
    '这里LastR计算结果为倒数第5行,Tables(t).Rows.Count为统计表格的行数
    For r = 8 To LastR
    '这里循环是为了清除8行~LastR行的4、5列单元格
        ActiveDocument.Tables(t).Cell(r, 4).Range.Text = ""
        '单纯的文本替换,将表格t的r行,4列的文本替换为空
        ActiveDocument.Tables(t).Cell(r, 5).Range.Text = ""
    Next r
Next t
End Sub

若不知道代码写哪?怎么运行?可以先阅读我的上篇文章(文章地址)Word宏的运用,先从宏的录制开始学习。

结语

以上举例只是VBA运用的一个案例-批量清除表格某单元格内容,至于其他的具体运用,有兴趣的可以自行了解。师傅领进门,修行靠个人!主要是对文档的分析,并不是所有情况都适合用VBA进行批处理,不要为了用VBA而去用VBA,不然只会适得其反!至于代码的实现并不复杂,可以去网上查阅API手册(Word Visual Basic for Applications (VBA) 参考 | Microsoft Docs)。解决问题的思路才是重要的!
本文仅个人总结,存在不合理处,希望大家及时指出更正。下篇将举例说明Word怎么进行编号替换。编写不易,转载引用请说明出处。希望大家多多支持,在此表示感谢!

    原文作者:X学者
    原文地址: https://blog.csdn.net/qq_36381700/article/details/107408149
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞