vba - 使用宏更改文本为 PH 时单词表列的背景颜色
问题描述
我在开发宏以查看 word 文档并更改表格中的背景颜色列时遇到了麻烦。
宏需要查看 word 文档中的每个表格,如果单元格包含文本“PH”,则该单元格的列需要更改背景颜色。
自从我使用VB以来已经有一段时间了。我也尝试过 cell.range 以及下面的 Selection.Find ,但只是不断出错。
Private Sub Document_Open()
Dim Tbl As Table
Dim Cel As Cell
Dim Rw As Row
Dim Col As Columns
For Each Tbl In ActiveDocument.Tables
Set Col = Tbl.Columns
For Each c In Col
With Selection.Find
.Execute FindText:="Public Holiday"
c.Shading.BackgroundPatternColorIndex = wdRed
End With
Next
Next
End Sub
解决方案
以下对我有用,并且比循环表格和表格单元格要快一些。
相反,它会在整个文档中搜索PH
,然后检查找到的区域是否在表格内。如果是,则该列被格式化。然后从下一个单元格重新开始搜索。请注意,我已将此代码设置为“匹配大小写”,以便它仅获取 PH,而不是 ph 或任何其他变体。否则,它最终会识别出诸如电话之类的单词……
使用表格列通常很棘手,因为表格列可能看起来像是连续的,但事实并非如此。只有行是连续的(Word 从左到右、从上到下解析)。所以实际上不可能逐列搜索,除非这些列一个接一个地被选中。这是问题中代码的另一个问题:它使用Selection
,但选择没有更改为应该搜索的内容。
Private Sub Document_Open()
Dim rngFind As Word.Range
Dim found As Boolean
Set rngFind = ActiveDocument.content
With rngFind.Find
.ClearFormatting
.Wrap = wdFindStop
.Text = "PH"
.MatchCase = True
found = .Execute
Do
If found Then
If rngFind.Information(wdWithInTable) Then
rngFind.Columns(1).Shading.BackgroundPatternColorIndex = wdRed
rngFind.MoveStart wdCell, 1
Else
rngFind.Collapse wdCollapseEnd
End If
End If
found = .Execute
Loop While found
End With
End Sub
推荐阅读
- php - 无法从另一台计算机访问某些 localhost 应用程序
- java - 如何在 Spring-Data-Rest 中使用 @Valid 注解?
- javascript - javascript 创建图像并获取其尺寸
- python - AttributeError:“NoneType”对象在网络抓取期间没有属性“get_text”
- algorithm - 数组元素之和(任意顺序)等于 k 非连续元素
- node.js - axios 相当于 http 请求?
- linux - 退出/杀死/注销 linux 会话的最干净方法是什么?
- mongodb - Mongo DB Atlas 快照丢失
- javascript - 在没有 jQuery 的情况下调用 Bootstrap4 可折叠
- android - Kivy garden mapview 使用 Buildozer 部署错误