如何解决查找并替换打开Excel文档的Excel宏
我试图制作一个宏以打开word文档并根据A和B列进行音轨更改。
我可以使用它,但前提是在轨道中打开的文档更改为“简单标记”模式。
如果它处于其他任何模式,并且我有以下搜索语句。
A1: al anden personer B1: alle andre mennesker
A2: anden personer B2: andre mennesker
文档一词中的文本是“ al anden personer”。
该文本在其他世界中将是“ alle andre menneskerandre mennesker”,它将在曲目更改中进行搜索。
因此,我试图使Word文档始终以简单标记打开。我尝试使用
的迭代ActiveWindow.View.RevisionsFilter.Markup = wdRevisionsMarkupSimple
但无法正常工作。
希望您能提供帮助。
PS:我对VBA还是很陌生,因此,如果您有任何其他改进或暗示我很高兴。
我现在的代码是:
Option Explicit
Const wdReplaceAll = 2
Sub FindReplace()
Dim wordApp As Object
Dim wordDoc As Object
Dim myStoryRange As Object
Dim cell As Range
Dim Find1 As String
Dim Replace1 As String
Const wdRevisionsMarkupSimple As Integer = 1
'Dim oRevision As Revision
If Not FileIsOpen("H:\Til excel replace test ark" & ".docx") Then
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
Set wordDoc = wordApp.Documents.Open("H:\Til excel replace test ark.docx")
wordDoc.trackrevisions = True
'ActiveWindow.View.RevisionsFilter.Markup = wdRevisionsMarkupSimple cannot get it to work
Else
On Error GoTo ExitSub
End If
With Worksheets("sheet1")
For Each cell In Range("A2:A" & .Cells(.Rows.Count,"A").End(xlUp).Row)
Find1 = cell.Value
Replace1 = cell.Offset(0,1).Value
For Each myStoryRange In wordDoc.StoryRanges
With myStoryRange.Find
.MatchCase = True
.matchwholeword = True
.Text = Find1
.Forward = True
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.Replacement.Text = Replace1
.Execute Replace:=wdReplaceAll
End With
Next myStoryRange
Next cell
End With
Exit Sub
ExitSub:
MsgBox "Luk word document før du benytter denne macro"
End Sub
Public Function FileIsOpen(FullFilePath As String) As Boolean
Dim ff As Long
On Error Resume Next
ff = FreeFile()
Open FullFilePath For Input Lock Read As #ff
Close ff
FileIsOpen = (Err.Number <> 0)
On Error GoTo 0
End Function
解决方法
您的问题是因为您使用了后期绑定。
使用后期绑定时,您不能使用Word对象库中的枚举或常量,例如wdRevisionsMarkupSimple
,因为Excel不知道它们代表什么。您要么必须自己声明这些常量,要么使用它们的基础值。
因此,要使用简单的标记激活修订,您的代码就必须是:
ActiveWindow.View.RevisionsFilter.Markup = 1 'wdRevisionsMarkupSimple
编辑:我还错过了其他明显的东西-Excel在其对象模型中也有ActiveWindow
。在跨应用程序编写代码时,必须绝对谨慎指定代码行所引用的应用程序/对象。在这种情况下,应为:
WordApp.ActiveWindow.View.RevisionsFilter.Markup = 1 'wdRevisionsMarkupSimple
您可以通过在代码模块顶部添加Option Explicit来避免这些错误。当您有未声明的变量时,这将防止您的代码编译。要添加此文件,请自动打开VBE,然后转到“工具” |“工具”。选项。在“选项”对话框中,确保已选中“需要变量声明”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。