gpt4 book ai didi

vba - 在VBA中合并后如何从Word合并文档中获取文档名称

转载 作者:行者123 更新时间:2023-12-05 04:15:43 25 4
gpt4 key购买 nike

这是我的场景:用户合并一个 Word 文档,我在快速访问工具栏上有一个按钮,它执行一个宏,该宏使用 Shell Execute 生成一个应用程序,并向它传递一个参数。

这可行,但是我需要的参数是 Word 文档的名称。当我查询事件文档时,它被称为“Form Letters”。

文档合并后,有没有办法在VBA代码中获取Word文档(模板)名称?我知道 Word 在合并后会更改名称,我需要包含合并字段的 Word 文档名称。

Const SW_SHOW = 1
Const SW_SHOWMAXIMIZED = 3

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub RunYourProgram()
l = Len(ActiveDocument)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' The line below retrieves name, "FORM LETTER"(strips off .doc)
' rather than name of Word document template
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Doc_Name = Mid(ActiveDocument, 1, l - 4)
Dim RetVal As Long
On Error Resume Next
RetVal = ShellExecute(0, "open", "M:\gendoc\FG_To_ECF.exe", _
Doc_Name, "c:\Certificates", SW_SHOWNORMAL)
End Sub

最佳答案

我不确定我是否理解正确你的问题。

如果您尝试检索当前打开的 Word 文档的文件名,则必须使用 ActiveDocument.FullName(包括完整路径)或 ActiveDocument.Name(只是文件名,包括其扩展名)。

在您给出的示例中,代码如下:

Const SW_SHOW = 5
Const SW_SHOWMAXIMIZED = 3
Const SW_SHOWNORMAL = 1

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub RunYourProgram()

Dim RetVal As Long

On Error Resume Next
RetVal = ShellExecute(0, "open", "M:\gendoc\FG_To_ECF.exe", ActiveDocument.Name, "c:\Certificates", SW_SHOWNORMAL)

End Sub

更新:

好的@KentE,我想现在我得到了你需要的东西。不幸的是,邮件合并生成的最终文档在任何地方都没有保留原始文件的名称。我看到了两种可能的解决方案:

1) 您可以将原始文档另存为真实模板。在您的情况下,CS32.doc 必须另存为 .dot 或 .dotx 扩展名。那么,当您打开 CS32.dotx 并运行邮件合并时,生成的“套用信函”文档将包含指向其原始模板的链接。在这种情况下是 CS32.dotx。在 VBA 中,您可以通过 ActiveDocument.AttachedTemplate

检索模板的名称

2) 或者您可以更改 CS32.doc 以保留自定义属性。假设您使用值“CS32.dotx”(可以是任何值)创建自定义属性“OriginalName”。那么,当您打开 CS32.doc 并运行邮件合并时,生成的“套用信函”文档将包含与原始文档相同的自定义属性。在这种情况下,“OriginalName”属性将包含您手动输入的值。在 VBA 中,您可以通过 ActiveDocument.CustomDocumentProperties("OriginalName")

检索自定义属性的名称

希望对你有所帮助。问候。

关于vba - 在VBA中合并后如何从Word合并文档中获取文档名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com