Vba 在文件夹中的所有文件上运行宏时出现问题;选择“;
我有这个MS Word宏来运行文件夹中的所有文件docx(因为Visible=false,所以不打开它们),并为每个文件调用另一个宏 调用的第二个宏是“Sub ApplyFormat()”,正如您所看到的,我在选择中使用了Vba 在文件夹中的所有文件上运行宏时出现问题;选择“;,vba,ms-word,Vba,Ms Word,我有这个MS Word宏来运行文件夹中的所有文件docx(因为Visible=false,所以不打开它们),并为每个文件调用另一个宏 调用的第二个宏是“Sub ApplyFormat()”,正如您所看到的,我在选择中使用了,因此当宏调用第二个宏时,它不会生成 任何更改,我想是因为我的第二个宏使用了“选择”,而使用选择,我认为只有在文件打开且可见时才有效 我尝试使用Visible:=False打开每个文档,以提高性能 我怎样才能解决这个问题?也许在我的第二个宏中使用一些变量而不是“选择”,但我不知
,因此当宏调用第二个宏时,它不会生成
任何更改,我想是因为我的第二个宏使用了“选择”,而使用选择,我认为只有在文件打开且可见时才有效
我尝试使用Visible:=False打开每个文档,以提高性能
我怎样才能解决这个问题?也许在我的第二个宏中使用一些变量而不是“选择”,但我不知道如何使用
谢谢你的帮助
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\PATH\TO\FILES"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
Call ApplyFormat
.Close SaveChanges:=True
End With
strFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
Sub ApplyFormat()
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\PATH\TO\FILES”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
使用wdDoc
调用ApplyFormat
.Close SaveChanges:=True
以
strFile=Dir()
温德
设置wdDoc=Nothing
端接头
子应用程序格式()
Selection.HomeKey wdStory
选择。查找
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
端接头
发现代码存在问题
strFile=Dir()
代替sFile=Dir()
将WdDoc
文档对象作为参数传递给Sub ApplyFormat
,或者将代码块直接用于文件循环
它是这样工作的
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\Users\user\desktop\folder1\"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
Call ApplyFormat(wdDoc)
.Close SaveChanges:=True
End With
sFile = Dir
Wend
Set wdDoc = Nothing
End Sub
Sub ApplyFormat(Xdoc As Document)
With Xdoc.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\Users\user\desktop\folder1”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
使用wdDoc
调用ApplyFormat(wdDoc)
.Close SaveChanges:=True
以
sFile=Dir
温德
设置wdDoc=Nothing
端接头
子应用程序格式(Xdoc作为文档)
使用Xdoc.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
端接头
发现代码存在问题
strFile=Dir()
代替sFile=Dir()
将WdDoc
文档对象作为参数传递给Sub ApplyFormat
,或者将代码块直接用于文件循环
它是这样工作的
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\Users\user\desktop\folder1\"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
Call ApplyFormat(wdDoc)
.Close SaveChanges:=True
End With
sFile = Dir
Wend
Set wdDoc = Nothing
End Sub
Sub ApplyFormat(Xdoc As Document)
With Xdoc.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\Users\user\desktop\folder1”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
使用wdDoc
调用ApplyFormat(wdDoc)
.Close SaveChanges:=True
以
sFile=Dir
温德
设置wdDoc=Nothing
端接头
子应用程序格式(Xdoc作为文档)
使用Xdoc.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
端接头
您的“(由于可见而未打开它们=false)”假设不正确-文件正在打开。但是,由于Visible=False,因此未选择任何内容。因此,您需要(而且无论如何都应该)直接使用文档,如:
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\PATH\TO\FILES"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
Call ApplyFormat(wdDoc)
wdDoc.Close SaveChanges:=True
sFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
Sub ApplyFormat(wdDoc As Document)
With wdDoc.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\PATH\TO\FILES”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
调用ApplyFormat(wdDoc)
wdDoc.Close SaveChanges:=True
sFile=Dir()
温德
设置wdDoc=Nothing
端接头
子应用程序格式(wdDoc作为文档)
使用wdDoc.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
端接头
在任何情况下,您的代码都可以缩减为:
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\PATH\TO\FILES"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
With .Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
.Close SaveChanges:=True
End With
sFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\PATH\TO\FILES”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
使用wdDoc
使用.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
.Close SaveChanges:=True
以
sFile=Dir()
温德
设置wdDoc=Nothing
端接头
您的“(由于可见而未打开它们=false)”假设不正确-文件正在打开。但是,由于Visible=False,因此未选择任何内容。因此,您需要(而且无论如何都应该)直接使用文档,如:
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\PATH\TO\FILES"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
Call ApplyFormat(wdDoc)
wdDoc.Close SaveChanges:=True
sFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
Sub ApplyFormat(wdDoc As Document)
With wdDoc.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End Sub
子格式AllDocXinFolder()
Dim S文件夹作为字符串,sFile作为字符串,wdDoc作为文档
sFolder=“C:\PATH\TO\FILES”
sFile=Dir(sFolder&“\*.docx”,vbNormal)
而sFile“”
设置wdDoc=Documents.Open(文件名:=sFolder&“\”&sFile,AddToRecentFiles:=False,可见:=False)
调用ApplyFormat(wdDoc)
wdDoc.Close SaveChanges:=True
sFile=Dir()
温德
设置wdDoc=Nothing
端接头
子应用程序格式(wdDoc作为文档)
使用wdDoc.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text=“abc”
.Replacement.Text=“def”
.Wrap=wdFindContinue
.Execute Replace:=wdReplaceAll
以
端接头
在任何情况下,您的代码都可以缩减为:
Sub FormatAllDocxInFolder()
Dim sFolder As String, sFile As String, wdDoc As Document
sFolder = "C:\PATH\TO\FILES"
sFile = Dir(sFolder & "\*.docx", vbNormal)
While sFile <> ""
Set wdDoc = Documents.Open(FileName:=sFolder & "\" & sFile, AddToRecentFiles:=False, Visible:=False)
With wdDoc
With .Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "abc"
.Replacement.Text = " def"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
.Close SaveChanges:=True
End With
sFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
子格式AllDocXinFolder()
作为字符串的Dim-sFolder