Vba 循环浏览目录中的所有Word文件

Vba 循环浏览目录中的所有Word文件,vba,ms-word,Vba,Ms Word,我有以下代码: Sub WordtoTxtwLB() ' ' WordtoTxtwLB Macro ' ' Dim fileName As String myFileName = ActiveDocument.Name ActiveDocument.SaveAs2 fileName:= _ "\\FILE\" & myFileName & ".txt", FileFormat:= _ wdFormatText, LockComments:=False, Password:=""

我有以下代码:

Sub WordtoTxtwLB()
'
' WordtoTxtwLB Macro
'
'
Dim fileName As String
myFileName = ActiveDocument.Name

ActiveDocument.SaveAs2 fileName:= _
"\\FILE\" & myFileName & ".txt", FileFormat:= _
wdFormatText, LockComments:=False, Password:="", AddToRecentFiles:=True, _
WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1252, InsertLineBreaks:=True, AllowSubstitutions:=False, _
LineEnding:=wdCRLF, CompatibilityMode:=0


End Sub
Sub LoopDirectory()

vDirectory = "C:\programs2\test"

vFile = Dir(vDirectory & "\" & "*.*")

Do While vFile <> ""

Documents.Open fileName:=vDirectory & "\" & vFile

ActiveDocument.WordtoTxtwLB

vFile = Dir
Loop

End Sub
我想在目录中的所有word(.doc)文件中循环此子文件。我有以下代码:

Sub WordtoTxtwLB()
'
' WordtoTxtwLB Macro
'
'
Dim fileName As String
myFileName = ActiveDocument.Name

ActiveDocument.SaveAs2 fileName:= _
"\\FILE\" & myFileName & ".txt", FileFormat:= _
wdFormatText, LockComments:=False, Password:="", AddToRecentFiles:=True, _
WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1252, InsertLineBreaks:=True, AllowSubstitutions:=False, _
LineEnding:=wdCRLF, CompatibilityMode:=0


End Sub
Sub LoopDirectory()

vDirectory = "C:\programs2\test"

vFile = Dir(vDirectory & "\" & "*.*")

Do While vFile <> ""

Documents.Open fileName:=vDirectory & "\" & vFile

ActiveDocument.WordtoTxtwLB

vFile = Dir
Loop

End Sub
Sub-LoopDirectory()
vDirectory=“C:\programs2\test”
vFile=Dir(vDirectory&“\”和“***”)
当vFile“”时执行此操作
文档。打开文件名:=vDirectory&“\”&vFile
ActiveDocument.WordtoTxtwLB
vFile=Dir
环
端接头

但它不起作用。如何通过更改当前代码或使用新代码来实现这一点?

您实际上不需要WordtoTxtwLB宏。您可以将这两种代码组合在一起。看这个例子

未经测试

Sub-LoopDirectory()
Dim vDirectory作为字符串
作为文档的Dim-oDoc
vDirectory=“C:\programs2\test\”
vFile=Dir(vDirectory&“****”)
当vFile“”时执行此操作
设置oDoc=Documents.Open(文件名:=vDirectory&vFile)
ActiveDocument.SaveAs2文件名:=“\\FILE\”&oDoc.Name&“.txt”_
FileFormat:=wdFormatText_
注释:=假_
密码:=“”_
AddToRecentFiles:=True_
WritePassword:=“”_
ReadOnlyRecommended:=False_
EmbeddeTrueTypeFonts:=False_
SaveNativePictureFormat:=False_
SaveFormsData:=False_
saveAsoceLetter:=False_
编码:=1252_
InsertLineBreaks:=真_
AllowSubstitutions:=False_
行尾:=wdCRLF_
相容性模式:=0
oDoc.Close SaveChanges:=False
vFile=Dir
环
端接头

顺便说一句,您确定要使用通配符
*.*
?如果文件夹中有Autocad文件,该怎么办?另外,
ActiveDocument.Name
将为您提供扩展名为的文件名。

要编辑目录中的所有word文档,我构建了这个简单的子例程

子例程在目录中循环,然后 打开找到的每个*.doc文件。然后在打开的文档文件上调用 第二个子例程。第二个子例程完成后,文档 保存,然后关闭

Sub DoVBRoutineNow()
Dim file
Dim path As String


path = "C:\Documents and Settings\userName\My Documents\myWorkFolder\"

file = Dir(path & "*.doc")
Do While file <> ""
Documents.Open FileName:=path & file

Call secondSubRoutine

ActiveDocument.Save
ActiveDocument.Close

file = Dir()
Loop
End Sub
Sub-DoVBRoutineNow()
暗文件
将路径设置为字符串
path=“C:\Documents and Settings\userName\My Documents\myWorkFolder\”
file=Dir(路径和“*.doc”)
文件“”时执行此操作
文档。打开文件名:=路径和文件
调用第二个子例程
ActiveDocument.Save
ActiveDocument。关闭
file=Dir()
环
端接头

~~~~

这是我的解决方案。我认为对于像我这样的新手来说,我将在这里发布我的代码是很容易理解和直截了当的。因为我到处搜索,看到的代码有点复杂。我们走吧

Sub loopDocxs()
Dim wApp As Word.Application 
Dim wDoc As Word.Document 
Dim mySource As Object
Set obj = CreateObject("Scripting.FileSystemObject")
Set mySource = obj.GetFolder("D:\docxs\")

For Each file In mySource.Files 'loop through the directory
  If Len(file.Name) > 0 And InStr(1, file.Name, "$") = 0 Then '$ is temp file mask

    Set wApp = CreateObject("Word.Application")
    wApp.Visible = True
    'Word.Application doesn't recognize file here event if it's a word file.
    'fortunately we have the file name which we can use.
    Set wDoc = wApp.Documents.Open(mySource & "\" & file.Name, , ReadOnly)

    'Do your things here which will be a lot of code

    wApp.Quit
    Set wApp = Nothing


  End If
Next file

WordtoTxtwLB
不是ActiveDocument的方法,所以只需使用方法名称本身即可。更好的方法是,调整您的方法以获取类型为“Document”的参数,并将打开的文档直接传递给它。如何使其仅适用于.docm文档?将
Dir(vDirectory&“*.docm”)
替换为
Dir(vDirectory&“*.docm”)