2012-07-17 10 views
5

Ho il seguente codice:scorrere tutti i file Word in Directory

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 

Voglio ciclo questo sub attraverso tutte le Word (.doc) file in una directory. Ho il seguente codice:

Sub LoopDirectory() 

vDirectory = "C:\programs2\test" 

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

Do While vFile <> "" 

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

ActiveDocument.WordtoTxtwLB 

vFile = Dir 
Loop 

End Sub 

Ma non funziona. Come posso farlo funzionare modificando il codice corrente o usando il nuovo codice?

+1

'WordtoTxtwLB' non è un metodo di ActiveDocument, quindi basta usare il nome del metodo da solo. Meglio, adattare il metodo per prendere un parametro di tipo "Documento" e passare direttamente il documento aperto. –

risposta

11

In realtà non è necessario la macro WordtoTxtwLB. Puoi combinare entrambi i codici. vedere questo esempio

(il fitness)

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 

BTW, sei sicuro che si desidera utilizzare il *.* jolly? Cosa succede se ci sono file Autocad nella cartella? Anche ActiveDocument.Name ti darà il nome del file con l'estensione.

+0

Come posso ottenere che si applichi solo ai documenti .docm? – user1440061

+0

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

0

Per modificare tutti i documenti di parole in una directory ho creato questa semplice subroutine.

Il subRoutine esegue il loop nella directory e apre ogni file * .doc che trova. Quindi sul file di documento aperto chiama il secondo subroutine. Al termine del secondo subrequisto, il documento viene salvato e quindi chiuso.

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 

~~~~~~