0

当我尝试保护 VBProject 并将工作簿作为附件通过电子邮件发送时,我收到了一个自动化错误。我在这里想念什么?

这是保护 VB 项目的代码:

Sub ProtectVBProject(WB As Workbook, ByVal strPassWord As String)

Dim vbProj As Object

Set vbProj = WB.VBProject

'Is it already locked!    
If vbProj.Protection = 1 Then Exit Sub

Set Application.VBE.ActiveVBProject = vbProj

'SendKeys to set the project password    
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & strPassWord & "{TAB}" & strPassWord & "~"

Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute

   'Close and Save    
    WB.Close True    

    End Sub

这是调用 ProtectVBProject 以保护 VB 项目并附加工作簿并将其邮寄的代码

 TempFilePath = Environ$("temp") & "\"
    TempFileName = "Email Test " & Sourcewb.Name & " " _
                 & Format(Now, "dd-mmm-yy h-mm-ss")

Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)

With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, _
            FileFormat:=FileFormatNum
    On Error Resume Next
    With OutMail
        .To = "aab2323@example.com"
        .CC = ""
        .BCC = ""
        .Subject = "Test Subject"               
        Call ProtectVBProject.ProtectVBProject(Destwb, "pa$$w0rd!")                
        .Attachments.Add Destwb.FullName
        .Send
    End With
    On Error GoTo 0
    .Close SaveChanges:=False
    Destwb.Close SaveChanges:=False
End With

Kill TempFilePath & TempFileName & FileExtStr

Set OutMail = Nothing
Set OutApp = Nothing
4

3 回答 3

1

根据我的经验,SendKeys(用于锁定/解锁项目)不是很值得信赖,许多/大多数人会建议不要使用它们。

查看此博客,了解另一种方法来完成您正在尝试的事情。(这篇SO 帖子也很有帮助。)

虽然这些链接涉及取消保护项目,但我确信这些方法也可用于保护项目。

如果您不想使用该路线,请尝试使用“模板”,其中“模板”工作簿已经具有正确的代码并且项目被锁定。然后您只需打开模板,将所需的任何内容粘贴到工作簿中,然后SaveAs. (这是我在类似情况下使用的方法。)保存后,您可以通过电子邮件发送文件。

于 2013-11-06T03:05:45.780 回答
0

尝试删除对ProtectVBProject.

你的代码说Call ProtectVBProject.ProtectVBProject(Destwb, "pa$$w0rd!")但我认为它应该只说Call ProtectVBProject(Destwb, "pa$$w0rd!")

于 2013-11-06T03:01:37.903 回答
0

我认为这可能是因为您试图在工作簿仍处于打开状态时发送它。您可以毫无问题地手动执行此操作,但是当我尝试通过 SMTP 执行此操作时,它会失败。

我猜您只想发送(而不是保存)受保护的工作簿,因此您的选择是保存一个受保护的单独副本,关闭它,然后发送电子邮件并终止文件。或者您可以使用与您的保护方式类似的代码来保存、关闭、发送、重新打开和取消保护。

于 2013-11-06T03:06:31.340 回答