Vba 仅在项目符号列表中查找缺少的句点
我正在寻找一个宏,它将搜索Word文档,只查找项目符号列表,然后查找任何不以句点(^$^p)结尾的行 我在网上找到了搜索项目符号列表的宏(例如),但它一次只搜索一个项目符号,我无法获取我的Vba 仅在项目符号列表中查找缺少的句点,vba,ms-word,Vba,Ms Word,我正在寻找一个宏,它将搜索Word文档,只查找项目符号列表,然后查找任何不以句点(^$^p)结尾的行 我在网上找到了搜索项目符号列表的宏(例如),但它一次只搜索一个项目符号,我无法获取我的 With Selection.Find .Text = "^$^p" 以适应此处提供的代码示例 有什么想法吗? 10倍 这是一个有趣的问题,我通常都会以视觉方式解决这个问题(这没关系,因为它迫使我回顾我所有的工作)。但这里有一个宏可以做到这一点: 编辑以在表中包含项目符号,并使用范围参数调用。还添加了一些代
With Selection.Find
.Text = "^$^p"
以适应此处提供的代码示例
有什么想法吗?
10倍 这是一个有趣的问题,我通常都会以视觉方式解决这个问题(这没关系,因为它迫使我回顾我所有的工作)。但这里有一个宏可以做到这一点: 编辑以在表中包含项目符号,并使用范围参数调用。还添加了一些代码来显示如何处理文本框中的项目符号
这是一个有趣的问题,一个我通常最终都希望以视觉方式解决的问题(这没关系,因为它迫使我回顾我所有的工作)。但这里有一个宏可以做到这一点: 编辑以在表中包含项目符号,并使用范围参数调用。还添加了一些代码来显示如何处理文本框中的项目符号
你说它一次只寻找一颗子弹是什么意思?您仍然可以执行循环并应用所需的操作,不是吗?您也可以编写宏(我有一个)来逐个查找以普通字符
(^$^p)
结尾的项目符号项。在()中运行宏时,它只查找第一个项目符号实例。要查找下一个宏,需要再次运行宏,依此类推。我试了一会儿。。。“循环”,但它不起作用。我需要的是一个宏,该宏将查找第一个项目符号实例,检查它是否缺少句点“^$^p”,然后对其进行注释“Selection.Comments.Add Range:=Selection.Range Selection.TypeText:=”如果这是一个完整的句子,它必须以句点结尾。”我很想看看你的宏:)只要在谷歌上搜索一下以下术语,你就会发现很多代码示例:Word FindLoop@CindyMeister-我知道如何编写循环和查找单词的宏;我的问题是,我不知道如何让它只在某些情况下寻找词语。如果所有带项目符号的列表都是(正确的)BullList样式,那么就很容易了——但是我审阅的文档的编写人员似乎不喜欢使用正确的样式(或者任何样式):)你说的一次只查找一个项目符号是什么意思?您仍然可以执行循环并应用所需的操作,不是吗?您也可以编写宏(我有一个)来逐个查找以普通字符(^$^p)
结尾的项目符号项。在()中运行宏时,它只查找第一个项目符号实例。要查找下一个宏,需要再次运行宏,依此类推。我试了一会儿。。。“循环”,但它不起作用。我需要的是一个宏,该宏将查找第一个项目符号实例,检查它是否缺少句点“^$^p”,然后对其进行注释“Selection.Comments.Add Range:=Selection.Range Selection.TypeText:=”如果这是一个完整的句子,它必须以句点结尾。”我很想看看你的宏:)只要在谷歌上搜索一下以下术语,你就会发现很多代码示例:Word FindLoop@CindyMeister-我知道如何编写循环和查找单词的宏;我的问题是,我不知道如何让它只在某些情况下寻找词语。如果所有带项目符号的列表都是(正确的)BullList样式,那么就很容易了——但是我审阅的文档的作者似乎不喜欢使用正确的样式(或者任何样式):)谢谢——这很有魅力!我没有想到选择。。。案例条款。唯一的问题是它在表格中找不到子弹——我该如何添加它呢?嗯。我刚刚注意到另一件事。仅当它是独立宏时才起作用。当我在另一个宏中包含对它的调用时,什么也不会发生。@Yoel:在第二个问题中(从另一个宏调用)尝试使用ActiveDocument代替ThisDocument。此文档将始终引用保存宏的文档。或者更好:将noteMissingPeriods列表更改为接受一个参数—一个Word.Document对象—这样您就可以传递正在处理的文档,而不必担心用户在代码执行过程中是否更改文档。我正在编辑Peter的答案,并对表进行更正,因为他做了真正的工作—他应该得到回答。代码遇到的问题是表单元格的结束标记包含段落标记和Chr(7)。因此,宏开始循环,并不会离开第一个表单元格。检查范围是否在表中,并缩小范围以省去单元格结尾和段落字符,这样循环就可以继续。(注意:编辑只有在审核后才会显示。)感谢您的编辑和对表格中范围的检查。我没想到的一个特例,谢谢!谢谢-这真是一种魅力!我没有想到选择。。。案例条款。唯一的问题是它在表格中找不到子弹——我该如何添加它呢?嗯。我刚刚注意到另一件事。仅当它是独立宏时才起作用。当我在另一个宏中包含对它的调用时,什么也不会发生。@Yoel:在第二个问题中(从另一个宏调用)尝试使用ActiveDocument代替ThisDocument。此文档将始终引用保存宏的文档。或者更好:将noteMissingPeriods列表更改为接受一个参数—一个Word.Document对象—这样您就可以传递正在处理的文档,而不必担心用户在代码执行过程中是否更改文档。我正在编辑Peter的答案,并对表进行更正,因为他做了真正的工作—他应该得到回答。代码遇到的问题是表单元格的结束标记包含段落标记和Chr(7)。因此,宏开始循环,并没有离开该fir
Option Explicit
Sub Test()
Dim txtShape As Shape
'--- checks the whole document
NoteMissingPeriodsInLists ActiveDocument.Range
'--- loops through any/all textboxes
For Each txtShape In ActiveDocument.Shapes
NoteMissingPeriodsInLists txtShape.TextFrame.TextRange
Next txtShape
End Sub
Sub NoteMissingPeriodsInLists(checkRange As Word.Range)
Dim doc As Word.Document
Dim para As Word.Paragraph
Dim bulletText As String
Dim i As Long
Dim done As Boolean
Dim warning As String
warning = "If this is a full sentence, end it with a period."
For Each para In checkRange.Paragraphs
If (para.Range.ListFormat.ListType = wdListBullet) Or _
(para.Range.ListFormat.ListType = wdListSimpleNumbering) Then
bulletText = para.Range.Text
i = Len(bulletText)
done = False
Do While Not done
Select Case Asc(Mid(bulletText, i, 1))
Case 33, 46 'exclamation, period
'--- the bullet correctly ends, so get out
done = True
Case 34 To 45, 47 To 126
'--- the bullet does NOT end with a period, so make a note
If para.Range.StoryType = wdMainTextStory Then
'--- add note as a comment to the bullet in the main
' text of the document
para.Range.Comments.Add para.Range, warning
Else
'--- finding bullets in other parts of the document
' may be valid, but adding comments may be
' problematic, e.g. textboxes. You'll have to
' decide how to handle those situations.
MsgBox "Bulleted list item in textbox does not " & _
"end with a period."
End If
done = True
Case 7, 10, 13, 32
'--- ends with a BEL (end of table cell marker), CR,
' LF, or SP, so go backwards
i = i - 1
End Select
Loop
End If
Next para
End Sub