如何通过 "file > save as" 对话框使用宏来保存带密码的文档?
How to use macros to save a document with password via the "file > save as" dialog?
我创建了一个带有一些 VBA 宏的 Word 模板来提示用户输入密码。然后应该使用此密码来加密从模板创建的新文档。
启动代码已正确执行,用户表单也按预期工作。
我能够“only set a password" but the dialog for the "file > save as" function with the enum wdDialogFileSaveAs
似乎不像官方文档中所说的那样工作。
所以问题是:如何使用宏打开保存对话框来保存文档,并为给定的密码打开密码加密?
启动代码
这是从 Word 模板创建新文档时的启动代码:
'in TemplateProject > Microsoft Word Objects > ThisDocument
Private Sub Document_New()
DialogSetPassword.Show
End Sub
用户表单
用户表单 DialogSetPassword
如下所示:
密码
仅设置密码或直接使用密码保存文档的代码如下所示:
'in TemplateProject > Forms > DialogSetPassword
Private Sub ButtonOnlySetPassword_Click()
ActiveDocument.password = TextBoxPassword.Text
MsgBox "Password successfully set"
'Unload Me
End Sub
Private Sub ButtonSaveWithPassword_Click()
MsgBox "Password is " & TextBoxPassword.Text 'just for debug reasons to see if the password is properly read
'ActiveDocument.password = TextBoxPassword.Text 'it works when this line is present, then the password field is pre-filled
With Application.Dialogs(wdDialogFileSaveAs)
.Name = ThisDocument.FullName 'name of the template
.Format = wdFormatXMLDocumentMacroEnabled 'saving as macro enabled document, as there are more macros
.password = TextBoxPassword.Text
.Show
End With
'Unload Me
End Sub
Private Sub TextBoxPassword_Change()
If Len(TextBoxPassword.Text) = 0 Then
ButtonOnlySetPassword.Enabled = False
ButtonSaveWithPassword.Enabled = False
Else
ButtonOnlySetPassword.Enabled = True
ButtonSaveWithPassword.Enabled = True
End If
End Sub
根据文档,函数应接受 Name, Format, Password
等参数,但密码选项不起作用。
保存对话框
即使使用带有 .password
参数的对话框功能,保存对话框中的密码字段仍然为空(可以在“另存为>工具>常规选项>打开密码”下找到):
文档只列出了对话框的参数,没有详细说明它们是 read/write 还是只读的。如果你使用.Display
方法,你会发现.Password
是只读的。
对话框的 .Display
和 .Show
方法 return 一个值,如 Long,指示用户的操作。要使用 return 值,您可以像调用任何其他函数一样调用这些方法,即 .Display()
和 .Show()
下面是对您的代码的修改。
Private Sub ButtonSaveWithPassword_Click()
Dim ret As Long
ActiveDocument.Password = TextBoxPassword.Text
With Application.Dialogs(wdDialogFileSaveAs)
.Name = ThisDocument.FullName 'name of the template
.Format = wdFormatXMLDocumentMacroEnabled 'saving as macro enabled document, as there are more macros
ret = .Show()
If ret = 0 Then ActiveDocument.Password = vbNullString 'user cancelled save as dialog
End With
End Sub
我创建了一个带有一些 VBA 宏的 Word 模板来提示用户输入密码。然后应该使用此密码来加密从模板创建的新文档。
启动代码已正确执行,用户表单也按预期工作。
我能够“only set a password" but the dialog for the "file > save as" function with the enum wdDialogFileSaveAs
似乎不像官方文档中所说的那样工作。
所以问题是:如何使用宏打开保存对话框来保存文档,并为给定的密码打开密码加密?
启动代码
这是从 Word 模板创建新文档时的启动代码:
'in TemplateProject > Microsoft Word Objects > ThisDocument
Private Sub Document_New()
DialogSetPassword.Show
End Sub
用户表单
用户表单 DialogSetPassword
如下所示:
密码
仅设置密码或直接使用密码保存文档的代码如下所示:
'in TemplateProject > Forms > DialogSetPassword
Private Sub ButtonOnlySetPassword_Click()
ActiveDocument.password = TextBoxPassword.Text
MsgBox "Password successfully set"
'Unload Me
End Sub
Private Sub ButtonSaveWithPassword_Click()
MsgBox "Password is " & TextBoxPassword.Text 'just for debug reasons to see if the password is properly read
'ActiveDocument.password = TextBoxPassword.Text 'it works when this line is present, then the password field is pre-filled
With Application.Dialogs(wdDialogFileSaveAs)
.Name = ThisDocument.FullName 'name of the template
.Format = wdFormatXMLDocumentMacroEnabled 'saving as macro enabled document, as there are more macros
.password = TextBoxPassword.Text
.Show
End With
'Unload Me
End Sub
Private Sub TextBoxPassword_Change()
If Len(TextBoxPassword.Text) = 0 Then
ButtonOnlySetPassword.Enabled = False
ButtonSaveWithPassword.Enabled = False
Else
ButtonOnlySetPassword.Enabled = True
ButtonSaveWithPassword.Enabled = True
End If
End Sub
根据文档,函数应接受 Name, Format, Password
等参数,但密码选项不起作用。
保存对话框
即使使用带有 .password
参数的对话框功能,保存对话框中的密码字段仍然为空(可以在“另存为>工具>常规选项>打开密码”下找到):
文档只列出了对话框的参数,没有详细说明它们是 read/write 还是只读的。如果你使用.Display
方法,你会发现.Password
是只读的。
对话框的 .Display
和 .Show
方法 return 一个值,如 Long,指示用户的操作。要使用 return 值,您可以像调用任何其他函数一样调用这些方法,即 .Display()
和 .Show()
下面是对您的代码的修改。
Private Sub ButtonSaveWithPassword_Click()
Dim ret As Long
ActiveDocument.Password = TextBoxPassword.Text
With Application.Dialogs(wdDialogFileSaveAs)
.Name = ThisDocument.FullName 'name of the template
.Format = wdFormatXMLDocumentMacroEnabled 'saving as macro enabled document, as there are more macros
ret = .Show()
If ret = 0 Then ActiveDocument.Password = vbNullString 'user cancelled save as dialog
End With
End Sub