【发布时间】:2018-02-28 10:35:57
【问题描述】:
我正在开发一个宏来打开一个文件(可能已经打开)并用新名称保存,然后在 excel 中从 vba 打开新文件。
此文件可以是Powerpoint、mathcad、visio、word等(也可以是dotx等模板文件)
所以我的想法是:
- 我首先需要弄清楚应用程序是否打开,
- 那么我需要确定文件是否打开,
- 然后用新的文件名保存它。
- 打开新文档
- 浏览文档并将自定义变量转储到数据库中,从数据库中填充自定义变量(以下代码中未显示,单独的模块)
-
激活新文档以便用户对其进行编辑。
Public Sub saveAsVBADocument(filenameNew As String, fileNameOld As String, applicationType As String) Dim objectApplication As Object Dim documentApplication As Object On Error Resume Next Set objectApplication = GetObject(, applicationType) On Error GoTo 0 If objectApplication Is Nothing Then Set objectApplication = CreateObject(applicationType) End If objectApplication.Visible = True On Error Resume Next Set documentApplication = objectApplication.Workbooks(FileHandling.GetFilenameFromPath(fileNameOld)) 'Excel Set documentApplication = objectApplication.Documents(FileHandling.GetFilenameFromPath(fileNameOld)) 'Word Set documentApplication = objectApplication.WorkSheets(FileHandling.GetFilenameFromPath(fileNameOld)) 'Mathcad Set documentApplication = objectApplication.Presentations(FileHandling.GetFilenameFromPath(fileNameOld)) 'PowerPoint Set documentApplication = objectApplication.Projects(FileHandling.GetFilenameFromPath(fileNameOld)) 'MS Project "Msproject.Application" Set documentApplication = objectApplication.Documents(FileHandling.GetFilenameFromPath(fileNameOld)) 'MS Visio "Visio.Application" If documentApplication Is Nothing Then Set documentApplication = objectApplication.FileOpen(fileNameOld) ' add read only End If documentApplication.SaveAs filename:=filenameNew Set objectApplication = Nothing Set documentApplication = Nothing End Sub
处理所有 vba 可接受的文档类型的可能解决方案是什么?
【问题讨论】:
-
你能解释一下这个的总体目的吗?你想达到什么目的?你为什么不直接复制那个文件而不是打开和另存为?