2016-05-07 2 views
1

У меня есть несколько каталогов файлов (shell, Perl и SQL), которые я использую для создания книг и создания баз данных. То, что я пытаюсь сделать, это взять каталог и создать документ Word, который следует надеяться выглядеть:Создайте документ слова из каталога

(Heading-2) file-name (no spacing) the filecontents (page break). 

Repeat until done. 

Что я получаю с кодом, который я в основном повторно используется ниже

(Heading 2) file name (Heading 2) next file name (until end of directory) 

последовали по содержимому файлов. Что мне нужно сделать, чтобы сделать эту работу, как я хочу?

Sub DirLoop() 

Dim MyFile As String, Sep As String, OFolder As String 

Dim wdDoc  As Document 
Dim txtFiles As Document 

    ' Sets up the variable "MyFile" to be each file in the directory 
    ' This example looks for all the files that have an .xls extension. 
    ' This can be changed to whatever extension is needed. Also, this 
    ' macro searches the current directory. This can be changed to any 
    ' directory. 


    Sep = Application.PathSeparator 
    OFolder = openFolder 
    Sep = "\" 
    ' Look for the right type of file..... 

    MyFile = Dir(OFolder & Sep & "*.sh") 

    Set wdDoc = ActiveDocument 

    ' Starts the loop, which will continue until there are no more files 
    ' found. 

    Do While MyFile <> "" 

    ' Get the directory 


    Set txtFiles = Documents.Open(FileName:=OFolder & "\" & MyFile, AddToRecentFiles:=False, Visible:=False, ConfirmConversions:=False) 
    Selection.InsertBreak (wdPageBreak) 
    Selection.Style = ActiveDocument.Styles("Heading 2") 
    Selection.TypeText Text:=MyFile & vbCr 
    Selection.Style = ActiveDocument.Styles("No Spacing") 


    wdDoc.Range.InsertAfter txtFiles.Range.Text & vbCr 
    txtFiles.Close SaveChanges:=False 
    MyFile = Dir() 
    Loop 

End Sub 
+0

Я сделал некоторые улучшения в макет вашего вопроса на уточнить, каков фактический вопрос. Отступы вашего кода кажутся повсюду, хотя, и я не достаточно знаком с vba, чтобы узнать, что для этого является стандартом отступов дефакто. Вам придется это исправить. – Sumurai8

ответ

0

Проблема возникает от того, как вы смесительной в Selection и Range объектов. Когда вы открываете документ, Selection будет в начале документа. Все, что вы добавите в документ, используя Selection, будет в начале.

wdDocRange.InsertAfter, с другой стороны, вставляет на конец документа.

В общем, принятая практика заключается в использовании объекта Range, а не объекта Selection, когда это возможно. Там больше, чем один способ, чтобы написать код, чтобы сделать то, что вы собираетесь, мой подход будет выглядеть следующим образом (непроверенным, так как я на мобильном устройстве):

Sub DirLoop() 

    Dim MyFile As String, Sep As String, OFolder As String 
    Dim txtFiles As Word.Document, wdDoc as Word.Document 
    Dim rngNewEntry as Word.Range 

    ' Sets up the variable "MyFile" to be each file in the directory 
    ' This example looks for all the files that have an .xls extension. 
    ' This can be changed to whatever extension is needed. Also, this 
    ' macro searches the current directory. This can be changed to any 
    ' directory. 

    Sep = Application.PathSeparator 
    OFolder = openFolder 
    Sep = "\" 
' Look for the right type of file..... 

    MyFile = Dir(OFolder & Sep & "*.sh") 

    Set wdDoc = ActiveDocument 

    ' Starts the loop, which will continue until there are no more files 
    ' found. 

    Do While MyFile <> "" 

    ' Get the directory 

    Set txtFiles = Documents.Open(FileName:=OFolder & "\" & MyFile, AddToRecentFiles:=False, Visible:=False, ConfirmConversions:=False) 

    'Content is a property, so more "correct" for use than Range 
    Set rngNewEntry = wdDoc.Content 
    rngNewEntry.Collapse wdCollapseEnd 'Puts focus at end of doc 
    rngNewEntry.InsertBreak wdPageBreak 
    rngEntry.Text = My File & vbCr 
    'Format Range after adding text 
    rngEntry.Style = wdDoc.Styles("Heading 2") 
    rngEntry.Collapse wdCollapseEnd 
    rngEntry.Range.Text = txtFiles.Content.Text & vbCr 
    rngEntry.Style = wdDoc.Styles("No Spacing") 

    txtFiles.Close SaveChanges:=False 
    MyFile = Dir() 
    Loop 

End Sub 
+0

Как обычно идут, я повесился в другой идее и сейчас вернулся к этому сегодня. Огромное спасибо ! Код получил мне 98% пути и с небольшим количеством настроек. Теперь у меня есть что-то, что создаст документ с одним скриптом/sql/на страницу, что может быть удобно распечатать его или для заметок. – Markhail

+0

Рад, что я смог help :-) Так как вы неудачно новичок в переполнении стека: для участника вопроса принято щелкнуть галочку рядом с «Ответ», которая наилучшим образом отвечает на вопрос. Это помогает администратору сайта, другим с похожими вопросами и дает сайт-спонсор сайта «репутация». –

Смежные вопросы