使用word中的VBA宏删除它后面没有表的字符串
Posted
技术标签:
【中文标题】使用word中的VBA宏删除它后面没有表的字符串【英文标题】:Removing a string it not followed by a table using a VBA macro in word 【发布时间】:2022-01-09 19:56:04 【问题描述】:我面临一个具有挑战性的请求,我需要在 Word 中使用 VBA 宏来解决。
文档是一个模板,它会在生成时获取数据库中的一些数据。它包含多个表,但我不知道每个表中有多少数据。
看起来像这样:
Sample initial state
要求是能够检测出表后面没有的字符串并删除。 当一个字符串后跟表格时,换一种说法,这一切都很好。当一个字符串后面跟着另一个字符串时,应该删除它。
不同的字符串是已知的,我猜这会有所帮助。
宏运行后,我之前的示例应该如下所示:
Sample expected result
我知道这看起来有点苛刻,但我什至不知道从哪里开始:(
我查看了宏搜索文本,但找不到类似的内容 如果 stringA 后跟一个表,则不执行任何操作,如果没有则删除。
非常感谢社区的任何帮助!
谢谢 朱利安
【问题讨论】:
【参考方案1】:这应该让你开始:
Sub FindAndDelete()
Dim rng As Range
Set rng = ActiveDocument.Content
With rng
With .Find
.ClearFormatting
.Text = "Text to find"
End With
Do While .Find.Execute
If .Next(wdParagraph).Tables.Count = 0 Then
.Next(wdParagraph).Delete
End If
Loop
End With
End Sub
【讨论】:
【参考方案2】:非常感谢!
我可以通过稍微修改它来使其工作,因为建议的代码正在删除表格后面的字符串:
Dim rng As Range
Set rng = ActiveDocument.Content
With rng
With .Find
.ClearFormatting
.Text = "This is my table C"
End With
Do While .Find.Execute
If .Next(wdParagraph).Tables.Count = 0 Then
.Delete
End If
Loop
End With
我的最后一步是使宏仅针对文档的特定部分运行。我想我需要在范围内工作。我会尝试并在此处发布结果。 再次感谢您帮助纯新手!
【讨论】:
【参考方案3】:所以我使用下面的代码让它工作。我稍微修改了“while”循环,使其删除整行而不只是单词
Sub HeaderDelete()
'
' HeaderDelete Macro
'
Dim rng As Range
Set rng = ActiveDocument.Content
With rng
With .Find
.ClearFormatting
.Text = "This is my table A"
End With
Do While .Find.Execute
If .Next(wdParagraph).Tables.Count = 0 Then
Selection.HomeKey wdLine
Selection.EndKey wdLine, wdExtend
Selection.Delete
End If
Loop
With .Find
.ClearFormatting
.Text = "This is my table B"
End With
Do While .Find.Execute
If .Next(wdParagraph).Tables.Count = 0 Then
Selection.HomeKey wdLine
SelectionS.EndKey wdLine, wdExtend
Selection.Delete
End If
Loop
With .Find
.ClearFormatting
.Text = "This is my table C"
End With
Do While .Find.Execute
If .Next(wdParagraph).Tables.Count = 0 Then
Selection.HomeKey wdLine
SelectionS.EndKey wdLine, wdExtend
Selection.Delete
End If
Loop
End With
End Sub
挑战是我有 50 多个“这是我的桌子 X”,他们可能会加班......
我试图找到一个不会在“.Find”上使用的解决方案,但更多的是关于“如果有一行没有后跟表格然后删除”,但我到目前为止还没有成功。
在旁注中,我想删除所有表格的表格边框,我发现下面的效果很好!
Dim doc As Document
Dim tbl As Table
Set doc = ActiveDocument
For Each tbl In doc.Tables
With tbl.Borders
.InsideLineStyle = wdLineStyleNone
.OutsideLineStyle = wdLineStyleNone
End With
Next
再次感谢您帮助 VBA 新手!
【讨论】:
以上是关于使用word中的VBA宏删除它后面没有表的字符串的主要内容,如果未能解决你的问题,请参考以下文章