vba - VBA:选择一个活动的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 文档,但没有计算在内。我希望有人能帮忙,谢谢。
解决方案
我将为您提供很多信息,但不会更改您的代码。如果你能实现我解释的内容,你会学到更多。您的主要问题来自没有完全掌握使用GetObject
vs.时发生的事情New 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 的当前实例运行。
推荐阅读
- html - 仅 CSS 导航 - 单选框显示/隐藏页面
- html - 如何为部分添加背景颜色
- permissions - GitLab 成员的默认开发人员权限
- node.js - 按数组mongodb查询的长度排序
- javascript - .toLocaleDateString 不起作用
- docker - 获取 Docker hub 上所有可用 node:x 镜像的列表
- android-studio - android studio:不推荐使用声音池。尝试使用 soundpool.build()
- node.js - 如何禁用 Jest `console.log` 标签
- automationanywhere - 无法从 AA 控制室获得响应
- javascript - Reducer 和 store 状态不同步