我寫了第一個宏。(Windows 10,WORD 2019)我正在嘗試以標準樣式查找以大寫字母開頭并繼續具有斜體樣式的單詞。不幸的是,如果我在查詢中使用太多字母搜索檔案 - 宏將關閉(例如,在檢查 1.5 頁之后)或重置 WORD 程式。
如果我減少搜索的字數 - 宏開始運行的時間越來越長。例如,搜索 1 個字母 (U) 而不是 32 (ABCDEFGHIJKL?MNOPQRSTUVWXYZ?????) - 它不會使程式崩潰。
我試圖添加
Application.ScreenUpdating = False at the beginning and
Application.ScreenUpdating = True at the end of the code but it doesn't help much.
Sub Makro1()
Dim Rng As Range
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.find.ClearFormatting
With Selection.find.Font
.Bold = False
.Italic = False
End With
Selection.find.Replacement.ClearFormatting
With Selection.find
.Text = "U"
'.Text = "([ABCDEFGHI])"
'.Text = "([ABCDEFGHI])"
'.Text = "([JKL?MNOP])"
'.Text = "([QRSTUVWX])"
'.Text = "([YZ?????])"
'.Text = "([ABCDEFGHIJKL?MNOPQRSTUVWXYZ?????])"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=2
Set Rng = Selection.Range
If Rng.Italic = True Then
MsgBox "FIND"
End
If Rng.Italic = False Then
Call Makro1
End If
End If
Call Makro1
End Sub
uj5u.com熱心網友回復:
你引導我找到解決方案。問題是使用 Call 在回圈中呼叫宏。添加 START: 在開頭(然后是其余代碼)而不是“呼叫宏 1”之后在兩個地方寫“GoTo START”解決了這個問題。
uj5u.com熱心網友回復:
你沒有正確完成你的代碼。從該宏呼叫宏時,您正在創建一個永不結束的回圈。通過一直呼叫macro1,運行時會在迭代次數過多后終止Word 應用程式。您可能不需要通過選擇回圈(這是您在那里創建的有線回圈)。
Find-Object 提供您需要的一切。要將單詞中第一個字母的所有大寫字母寫成斜體,當它不是粗體或下劃線時,您可以使用它,例如:
Sub m()
With ActiveDocument.Content.Find
.Text = "<[A-Z]"
.Style = "Standard"
.Font.Bold = False
.Font.Underline = False
.MatchWildcards = True
.MatchCase = True
.Replacement.Font.Italic = True
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
End With
End Sub
如果要將單詞的第一個大寫字符設定為斜體,當第二個字符也是斜體時,您必須遍歷所有可能的單詞:
Sub m1()
With ActiveDocument.Content
With .Find
.Text = "<[A-Z]*>"
.MatchWildcards = True
.MatchCase = True
.Execute Forward:=True, Wrap:=wdFindStop
End With
Do While .Find.Found
If .Words.Last.Characters(2).Font.Italic = True Then .Font.Italic = True
.Find.Execute
Loop
End With
End Sub
如果您需要/想要,您可以像上面那樣指定其他字母。
如果您需要更精確的選擇標準,可以在幫助頁面上搜索: https ://learn.microsoft.com/en/office/vba/api/word.find
祝你好運
uj5u.com熱心網友回復:
謝謝,但你的代碼不起作用。我將代碼更改為:
If .Words.Last.Characters(2).Font.Italic = True Then
.Characters(1).Font.Italic = True
End If
.find.Execute
但它有時只起作用。當我在較長的文本上啟用宏時,宏會掛起,顯示錯誤 5941“集合物件不存在”并停止在線:
If .Words.Last.Characters(2).Font.Italic = True Then
我花了很多時間才發現原因。事實證明,宏崩潰是因為有時在大寫字母旁邊的文本中有標點符號,例如句點逗號......等。例如 A.B;C: D.,必須改進代碼才能忽略這一點。我嘗試在 .MatchCase = True 之后添加 .IgnorePunct = True 但沒有幫助,宏仍然崩潰
我嘗試更改代碼:
.Text = "<[A-Z][!.,;:?”#$%- =[\\[\/[\//[\@[\?[\![\#[\$[\%[\*[\([\)[\&[\*[\{[\}]*>"
宏修復了文本中的一些錯誤,作業時間更長,但在帶有大寫字母的字符和宏崩潰之后仍然存在不可接受的標志。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521983.html
