暂停VBA和附加文件在电子邮件select的情况下

我想暂停一个VBA,直到用户保存一个Excel附件(XLSX)? 在下面的VB中,在用select打开工作簿时提示用户,如果该select是肯定的,则出现另一个消息框,要求他们填写表格并保存。 我试图暂停VB直到保存被点击。 不过,我目前收到很多编译错误。 该附件文件也需要是电子邮件中的附件,但仅限于该案例select。 该行在代码中是粗体的,但截至目前没有附件。 也,
我得到的ActiveX component can't create objectSet MyDoc = Documents.Add选中。 谢谢 :)。

VB

 Private Sub Workbook_Open() Dim WS As Worksheet, Rng As Range, c As Range Dim OutApp As Object, OutMail As Object Dim Msg As String, Addr As String, FName As String, i As Long Dim obj As Object Dim MyDoc As Document Dim MyFileCopy As String Dim intAnswer As Integer 'define path MyFileCopy = "L:\NGS\HLA LAB\total quality management\QC & QA\DOSE reports\DOSE reporting form Attachment.xlsx" 'open sheet Sheets("Email").Activate intAnswer = MsgBox("Are there any issues to report", vbYesNoCancel) Select Case intAnswer Case vbYes Range("D2").Value = "x" MsgBox ("Please select an issue and save"), vbExclamation 'create a separate sheet2 to mail out and pause VB Sheets(2).Copy Set wkb = ActiveWorkbook With wkb **Set MyDoc = Documents.Add MyDoc.SaveAs "MyFileCopy.xlsx" DoEvents Do Loop Until MyDoc.Saved .Close True End With Case vbCancel Application.SendKeys "%{F11}", True Case Else Range("C2").Value = "x" End Select 'create connection, check condition, send email Set OutApp = CreateObject("Outlook.Application") Set WS = ThisWorkbook.Sheets("Email") With WS Set Rng = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)) End With For Each c In Rng Msg = "For " & WS.Cells(2, 2) & Chr(14) & Chr(14) For i = 3 To 4 If LCase(WS.Cells(2, i)) = "x" Then Msg = Msg & " -" & WS.Cells(1, i) & Chr(14) End If Next Set OutMail = OutApp.CreateItem(0) With OutMail .To = c .CC = "" .BCC = "" .Subject = "Daily Operational Safety Briefing" .Body = Msg **If Range("D2").Value & Chr(14) = "x" Then .Attachments.Add MyFileCopy, 1** .Send End With Next c Set OutMail = Nothing Set OutApp = Nothing 'confirm message sent, clear sheet, and delete copy MsgBox "The data has been emailed sucessfully.", vbInformation Range("C2:D2").ClearContents Kill MyFileCopy 'Exit and do not save Application.Quit ThisWorkbook.Close SaveChanges:=False End Sub 

我猜“窗体”实际上是Sheet2 ,他们必须填写一些东西或类似的东西。

您最好的select是创build一个新的用户窗体,并将属性“ShowModal”设置为False。 在这种forms下添加一个带有“请select一个问题并保存”的文本框,然后可以在名为“Save”的表单上添加一个button,将其余的代码附加到它上面。

工作stream程将是:

  1. 询问用户“是否有任何问题需要报告”
  2. 如果vbYes然后显示用户表单。
  3. 当用户完成他们所做的任何事情后,他们点击仍然在上的表单上的“保存”
  4. 其余的代码执行。

可以select使用Workbook_BeforeSave()事件(在VBE中进入ThisWorkbook,在编辑器的顶部,从第一个下拉菜单中select“Workbook”,在第二个下拉菜单中select“BeforeSave”),然后将剩余的代码放在那里。 那么工作stream程将是:

  1. 询问用户“是否有任何问题需要报告”
  2. 如果vbYes然后显示消息“请select一个问题并保存”
  3. 用户closures消息框并进行更新
  4. 用户点击“保存”
  5. workbook_BeforeSave()事件触发并执行其余的代码。

你也可以把这些组合起来,让“请select一个问题并保存”消息框是一个ShowModal = False的用户窗体,它们在他们做事情的时候保持着活跃的状态,像往常一样“保存”。