首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA:选择活动word文档

VBA:选择活动word文档
EN

Stack Overflow用户
提问于 2018-04-24 14:51:29
回答 1查看 12.5K关注 0票数 2

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

代码语言:javascript
复制
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文档。我试着打开几个单词文档,但都不算。我希望有人能帮忙谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 15:48:40

我会给你很多信息,但不会改变你的代码。如果你能实现我所解释的,你会学到更多。您的主要问题来自于没有完全理解使用GetObjectNew Word.Application时发生了什么。一旦你整理好了,你就会没事的。

如果Word根本没有运行,那么GetObject将返回您正在看到的错误消息。处理该错误的典型方法是测试错误并在必要时启动Word,例如

代码语言:javascript
复制
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

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

代码语言:javascript
复制
Dim wrdDoc as Object
Set wrdDoc = GetObject("C:\ExamplePath\DocName.docx")
Set wrd = wrdDoc.Application

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

代码语言:javascript
复制
Set acFile = wrd.Documents("Filename")

可以使用以下方法测试该文档是否存在

代码语言:javascript
复制
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的主要问题来自于使用

代码语言:javascript
复制
Set wrd = New Word.Application

每次代码找不到特定的文档时。这将在每次执行Word时创建一个新实例。每个实例都独立于任何其他实例,这就是为什么Documents.Count不返回与您生成的所有文档相等的数字。它只运行当前的Word实例。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50004711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档