如何使用VBA创建多个目录并在其中放置文件? Word 2013

时间:2016-01-06 23:33:54

标签: vba ms-word word-vba

请耐心等待,我对Microsoft Office程序中的宏很新。以下是一些背景信息:我在企业环境中作为IT团队的一员工作,使用Microsoft Word 2013,我在Windows 7上。我对C:\驱动器具有完全读/写权限,这是我在里面工作。非常感谢任何帮助。

我想要做的是:我想创建一个脚本,首先在目录中创建一个文件夹(在文件路径中不使用\),文件夹标题为文档编号+1(或DocNum + 1),在该目录中生成三个文件(.htm,各自的HTML文件位于自己自动生成的文件夹,.txt。和.rtf中)(每个文件具有完全相同的名称),然后移回父级文件夹并重复此过程。这些文件是通过合并到目录中的邮件创建的电子邮件签名,然后目录文件具有以下脚本来创建文件,以便我们可以将它们向下推并为每个用户远程锁定它们。

这就是我陷入困境的地方:尝试创建名为“DocNum + 1”方案的子文件夹,然后在其中创建文件。我收到错误75.我可以手动创建每个子文件夹,但当然希望脚本工作。即使经过2个小时的谷歌搜索和使用VBA脚本,我还没有想出来。

我不需要任何花哨的东西(由各种错误纠正和双重检查代码行定义),并且希望尽可能简单(只需要使其按预期工作)。我没有也不能安装任何扩展。这是我到目前为止(整个脚本)。那些对VBA更有经验的人可能会看到我在这里要做的事情:

Sub BreakOnPage()
   ' Used to set criteria for moving through the document by page.
   Application.Browser.Target = wdBrowsePage

   For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

  ' Select and copy the text to the clipboard
  ActiveDocument.Bookmarks("\page").Range.Copy

  ' Open new document to paste the content of the clipboard into.
  Documents.Add
  Selection.Paste

  ' Removes the break that is copied at the end of the page, if any.
  Selection.TypeBackspace
  Selection.TypeBackspace
  ChangeFileOpenDirectory "C:\Users\User\Desktop\mm_files"
  DocNum = DocNum + 1
  MkDir ("C:\Users\User\Desktop\mm_files" & DocNum)
  ChangeFileOpenDirectory "C:\Users\User\Desktop\mm_files" & DocNum + 1
  ActiveDocument.SaveAs FileName:="Signature" & ".rtf", FileFormat:=wdFormatRTF, AddToRecentFiles:=False
  ActiveDocument.SaveAs FileName:="Signature" & ".txt", FileFormat:=wdFormatEncodedText, Encoding:=msoEncodingUSASCII, AddToRecentFiles:=False
  ActiveDocument.SaveAs FileName:="Signature" & ".htm", FileFormat:=wdFormatHTML, AddToRecentFiles:=False
  ActiveDocument.Close

  ' Move the selection to the next page  in the document
  Application.Browser.Next
   Next i
   ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub

1 个答案:

答案 0 :(得分:0)

您向DocNum添加1两次:一次在创建文件夹之前,然后在调用ChangeFileOpenDirectory时再次添加。

最好将完整路径传递到SaveAs,而不是设置默认位置。

Dim DocNum As Long, fPath As String
'...

DocNum = DocNum + 1
fPath = "C:\Users\User\Desktop\mm_files" & DocNum
MkDir fPath

ActiveDocument.SaveAs FileName:=fPath & "\Signature" & ".rtf", _
           FileFormat:=wdFormatRTF, AddToRecentFiles:=False

ActiveDocument.SaveAs FileName:=fPath & "\Signature" & ".txt", _
           FileFormat:=wdFormatEncodedText, Encoding:=msoEncodingUSASCII, _
           AddToRecentFiles:=False

ActiveDocument.SaveAs FileName:=fPath & "\Signature" & ".htm", _
           FileFormat:=wdFormatHTML, AddToRecentFiles:=False

ActiveDocument.Close

'...