2012-07-17 15 views
5

Tengo el siguiente código:Bucle a través de todos los archivos en el directorio Palabra

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 

Quiero bucle de esta sub través de toda la palabra (.doc) archivos en un directorio. Tengo el siguiente código:

Sub LoopDirectory() 

vDirectory = "C:\programs2\test" 

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

Do While vFile <> "" 

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

ActiveDocument.WordtoTxtwLB 

vFile = Dir 
Loop 

End Sub 

Pero no está funcionando. ¿Cómo hago para que esto funcione ya sea alterando el código actual o usando un código nuevo?

+1

'WordtoTxtwLB' no es un método de ActiveDocument, por lo que sólo tiene que utilizar el nombre del método por sí mismo. Mejor, adapte su método para tomar un parámetro de tipo "Documento" y pasarle el documento abierto directamente. –

Respuesta

11

No necesita realmente la Macro de WordtoTxtwLB. Puedes combinar ambos códigos. ver este ejemplo

(sin probar)

Sub LoopDirectory() 
    Dim vDirectory As String 
    Dim oDoc As Document 

    vDirectory = "C:\programs2\test\" 

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

    Do While vFile <> "" 
     Set oDoc = Documents.Open(fileName:=vDirectory & vFile) 

     ActiveDocument.SaveAs2 fileName:="\\FILE\" & oDoc.Name & ".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 

     oDoc.Close SaveChanges:=False 
     vFile = Dir 
    Loop 
End Sub 

Por cierto, ¿está seguro de que desea utilizar el comodín *.*? ¿Qué pasa si hay archivos de Autocad en la carpeta? También ActiveDocument.Name le dará el nombre del archivo con la extensión.

+0

¿Cómo hago para que esto solo se aplique a los documentos .docm? – user1440061

+0

Reemplace 'Dir (vDirectory &" *. * ")' Con 'Dir (vDirectory y" * .docm ")' –

0

Para editar todos los documentos de Word en un directorio construí esta subrutina simple.

El subRoutine pasa por el directorio y abre cada archivo * .doc que encuentra. Luego, en el archivo de documento abierto, llama al , la segunda subRoutine. Después de finalizar la segunda SubRoutine, se guarda el documento y luego se cierra.

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 

~~~~~~

Cuestiones relacionadas