VBA:选择活动的Word文档

时间:2018-04-24 14:51:29

标签: excel vba excel-vba ms-word

我最近学会了如何通过Excel中的VBA操作Word文档。我的问题是我希望我的宏能够确定具有正确文件名的活动word文档并选择该文档并继续宏。我有以下代码

Sub CreateNewWordFile()
  Dim wrd As Word.Application
  Dim Opfile As Object
  Dim AcFile As Object

  Set Opfile = GetObject(, "Word.Application")
  Debug.Print Opfile.Documents.count
  For Each AcFile In Opfile.Documents
    If AcFile = "SampleWord " & Format(Now, "mm-dd-yyyy") & ".docx" Then
      Set wrd = AcFile.Application
      With wrd
       .Activate
       .Selection.TypeParagraph
       .Selection.TypeParagraph
       .Selection.Font.Size = 20
       .Selection.TypeText "success"
       .ActiveDocument.Save
       GoTo Label1
      End With
    End If
  Next
  Set wrd = New Word.Application

 With wrd
   .Visible = True
   .Activate
   .Documents.Add
   With .Selection
       .ParagraphFormat.Alignment = wdAlignParagraphCenter
       .BoldRun
       .Font.Size = 18
       .TypeText "Sample Word File"
       .BoldRun
       .TypeParagraph
       .Font.Size = 12
       .ParagraphFormat.Alignment = wdAlignParagraphLeft
       .TypeParagraph
       .ParagraphFormat.Alignment = wdAlignParagraphCenter
       .Font.Size = 15
       .TypeText "samples"
   End With

  ActiveDocument.SaveAs2 Filename:="Documents\SampleWord " & Format(Now, "mm-dd-yyyy") & ".docx"

  End With

Label1:

  Set Opfile = Nothing
  Set wrd = Nothing

End Sub

For Each循环下面是我的代码,用于在没有正确文件名的打开Word文档的情况下创建Word文档。问题是当For Each循环运行宏时它会给出错误

  

ActiveX组件无法创建对象

但是当我把它变成一个注释并且运行我创建Word文档的代码并在第二次运行时取消注释以进行测试时,它就可以了。另外我注意到Documents.count不计算打开的Word文档。我尝试打开几个Word文档,但它不计算它们。我希望有人可以提供帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

我会向您提供大量信息,但不会更改您的代码。如果您能够实施我解释的内容,您将了解更多信息。您的主要问题来自于在使用GetObjectNew Word.Application时未完全掌握的情况。一旦你得到那个排序你应该没问题。

如果Word根本没有运行,则GetObject会返回您正在查看的错误消息。处理这种情况的典型方法是测试错误并在必要时启动Word,例如

On Error Resume Next
Set wrd = GetObject(, "Word.Application")
If err.number = 429 Then
    Set wrd = new Word.Application
End If
On Error GoTo 0

但是,由于您正在寻找特定文档,只要该文档已保存并且您知道文件路径,您就可以(但不必)使用

Dim wrdDoc as Object
Set wrdDoc = GetObject("C:\ExamplePath\DocName.docx")
Set wrd = wrdDoc.Application

没有必要循环Documents集合来获取具有特定名称的文档。你也可以这样做:

Set acFile = wrd.Documents("Filename")

您可以使用

测试该文档是否存在
If acFile Is Nothing Then
  'put the code to create a new DOCUMENT here
  Set acFile = wrd.Documents.Add
  'Do all the formatting, etc. here
End If

Documents.Count的主要问题来自于使用

Set wrd = New Word.Application

每次代码都找不到特定文档。这会在每次执行时创建Word的新实例。每个实例都独立于其他实例,这就是Documents.Count没有返回与您生成的所有文档相同的数字的原因。它仅针对Word的当前实例运行。