【问题标题】:How to disable the MS Word "macro-free document" warning with code?如何使用代码禁用 MS Word“无宏文档”警告?
【发布时间】:2023-03-12 14:00:02
【问题描述】:

我有一个动态插入 VBA 代码的应用程序,以帮助构建带有适当书签的 MS Word 文档。 VBA 代码不需要与文档本身一起保存。

保存文档时,会弹出以下警告(遗憾的是我还不能发布图像),这会使应用程序的最终用户感到困惑。有没有办法在 DocumentBeforeSave 事件中禁用它?

**

以下内容无法保存在无宏文档中:VBA 项目至 保存具有这些功能的文件,单击否返回到另存为 对话框,然后在文件类型中选择启用宏的文件类型 落下。继续另存为无宏文档? 按钮:[是][否][帮助]

**

一个想法是将文档的 SaveFormat 更改为旧格式,以防止弹出此警告。但我不确定此更改是否会影响文档的行为方式,以及是否可以在 DocumentBeforeSave 事件中修改此属性(该属性是 READONLY 属性)。

在此先感谢您对此主题的任何帮助。

以下代码将打开一个单词(假设存在 c:\work\test.docx,它可以只是一个空白单词 doc)。如果您点击 word doc 上的 Save 按钮,则会显示警告消息。顺便说一句,我使用的是 Office 2010。

<TestMethod()>
Public Sub testWord()
    Dim wApp As New Word.Application()
    Dim myDoc As Word.Document
    Dim DataCodeModule As Object = Nothing

    myDoc = wApp.Documents.Open("C:\Work\test.docx")

    DataCodeModule = myDoc.VBProject.VBComponents(0).CodeModule
    With DataCodeModule
        .InsertLines(1, "Option Explicit")
        .InsertLines(2, "Sub TestCode()")
        .InsertLines(3, "Selection.InsertAfter ""test""")
        .InsertLines(4, "End Sub")
    End With

    wApp.Visible = True
    myDoc.Activate()
End Sub

一旦连接了 DocumentBeforeSave,我希望下面的代码可以禁用警告。可能需要在打开文档后立即设置 DisplayAlerts?

Public Sub App_DocumentBeforeSave(ByVal doc As Object, ByRef saveAsUI As Boolean, ByRef cancel As Boolean) Handles _officeHelper.DocumentBeforeSave
            Dim WordApp As Object = this.WordApp()
            'WordApp.DisplayAlerts = False
            WordApp.DisplayAlerts = 0
End Sub

【问题讨论】:

  • 您可以将文档构建为New 文档,而不是使用您的代码所在的文档吗?

标签: vba ms-word


【解决方案1】:

像这样?

Application.DisplayAlerts = wdAlertsNone
'~~> Your Save Code
Application.DisplayAlerts = wdAlertsAll

跟进

您正在 vb.net 中执行此操作。我目前无法访问 VB.net,但下面的这个例子会让你走上正确的道路

打开 Word 并插入一个模块,然后粘贴此代码

Option Explicit

Dim MyClass As New Class1

Sub Sample()
    Set MyClass.App = Word.Application
End Sub

现在插入一个类模块并粘贴此代码

Public WithEvents App As Word.Application

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, _
SaveAsUI As Boolean, Cancel As Boolean)

    Application.DisplayAlerts = wdAlertsNone
    ActiveDocument.Save
    Application.DisplayAlerts = wdAlertsAll

End Sub

现在,如果您按下保存按钮,您会注意到您不会再收到该警报。 :)

希望您可以根据需要进行调整:)

【讨论】:

  • 这是个好主意,但不幸的是,将 DisplayAlerts 设置为 false 并不能阻止弹出警告消息(刚刚测试过)...
  • 假设 wdAlertsNone 的值为 0(我正在做后期绑定),这仍然不能阻止警告消息的出现。我正在尝试编写一个简单的代码来发布在这里。
  • 这很奇怪。我刚试了一下,效果很好。我想我会等你的示例代码。
  • ` Public Sub testWord() Dim wApp As New Word.Application() Dim myDoc As Word.Document Dim DataCodeModule As Object = Nothing myDoc = wApp.Documents.Open("C :\Work\test.docx") DataCodeModule = myDoc.VBProject.VBComponents(0).CodeModule With DataCodeModule .InsertLines(1, "Option Explicit") .InsertLines(2, "Sub TestCode()") .InsertLines(3, "Selection.InsertAfter ""test""") .InsertLines(4, "End Sub") End With wApp.Visible = True myDoc.Activate() End Sub'
  • 这很难读。您可以编辑您的问题并将此代码粘贴到那里吗?
【解决方案2】:

我只是完成了这段代码。它会提示您保存并帮助您将其附加到电子邮件中。 它对我有用。 请尝试。我在工作表顶部给出了一个命令按钮。 谢谢

Private Sub CommandButton1_Click()
Dim whatfolder, whatfile As String
whatfolder = InputBox("Type folder name.. Don't type which drive")
whatfile = InputBox("Type file name you want to give")
ChangeFileOpenDirectory "C:\" & whatfolder
Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SaveAs FileName:=whatfile & ".docx", FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False
Application.DisplayAlerts = wdAlertsNone
ActiveDocument.SendMail
End Sub

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多