我会尽量保持简短和准确。我真的希望你能帮助我。
我面临以下问题:
背景:
- 包含大量公式的工作簿 -> 计算设置为手动
- 每次重新计算需要 5-10 分钟
我想做的事:
- 为多人单独生成数据范围
- 然后选择这些范围,并将它们粘贴到电子邮件的正文中
- 一封一封地发送那些电子邮件
问题是什么?
如果我使用“信封”方法来准备电子邮件,那么一切都很好,直到我按下发送。但是,每次我按下发送 excel 都会自动重新计算整个工作簿。显然我不想等待 5-10 分钟来发送每封电子邮件(总是在 10 到 20 之间)
因为我认为这可能与“信封”方法有关,所以我决定切换到直接通过 Outlook(outlook 对象)创建电子邮件。它可以很好地打开电子邮件并发送它而无需重新计算。但是,在 Outlook 打开电子邮件后,整个工作簿中的所有 (!) 公式都设置为 #Value。这显然也迫使我重新计算,因为我无法为下一个人的电子邮件创建表格。
有谁知道是什么导致了重新计算/错误值以及我可以做些什么来阻止它?对于任何建议的解决方案,我都会非常高兴。
我还附上了我的代码,但我怀疑它是否有助于解决问题
''描述:'这个例程准备一封电子邮件,用于向交付物所有者请求进度估计'1。根据 PI 和配置表 '2. 中的命名范围设置所有值。将所有相关字符串连接到完整的电子邮件文本 '3. 选择 PI 表'4。创建电子邮件并显示
子 PrepareEmail()
Dim s_EmailAddress As String, s_FirstName As String
Dim s_Email_Greeting As String, s_Email_MainText1 As String, s_Email_MainText2 As String, s_Email_DeadlineRequest As String
Dim s_Email_Deadline As String, s_Email_Subject As String, s_Email_ClosingStatement As String, s_Email_SenderName As String, s_Email_CC As String
Dim s_Email_Full As String
Dim rng_PI_TableValues As Range, rng_PI_TableFull As Range
Dim s_Email_FullText As String
Dim obj_OutApp As Object
Dim obj_OutMail As Object
s_EmailAddress = [ptr_PI_Email]
s_FirstName = [ptr_PI_FirstName]
s_Email_Subject = [ptr_Config_PIEmail_Subject]
s_Email_Greeting = [ptr_Config_PIEmail_Greeting]
s_Email_MainText1 = [ptr_Config_PIEmail_MainText1]
s_Email_MainText2 = [ptr_Config_PIEmail_MainText2]
s_Email_DeadlineRequest = [ptr_Config_PIEmail_DeadlineRequest]
s_Email_Deadline = [ptr_Config_PIEmail_Deadline]
s_Email_ClosingStatement = [ptr_Config_PIEmail_ClosingStatement]
s_Email_SenderName = [ptr_Config_PIEmail_SenderName]
s_Email_CC = [ptr_Config_PIEmail_CC]
'Concatenate full e-mail (using HTML):
s_Email_Full = _
"<basefont face=""Calibri"">" _
& s_Email_Greeting & " " _
& s_FirstName & ", " & "<br> <br>" _
& s_Email_MainText1 & "<br>" _
& s_Email_MainText2 & "<br> <br>" _
& "<b>" & s_Email_DeadlineRequest & " " _
& s_Email_Deadline & "</b>" & "<br> <br>" _
& s_Email_ClosingStatement & "," & "<br>" _
& s_Email_SenderName _
& "<br><br><br>"
'-------------------------------------------------------
Set rng_PI_TableValues = Range("tbl_PI_ProgressInput")
Set rng_PI_TableFull = Union(rng_PI_TableValues, Range("tbl_PI_ProgressInput[#Headers]"))
Application.EnableEvents = False
Application.ScreenUpdating = False
Set obj_OutApp = CreateObject("Outlook.Application")
Set obj_OutMail = obj_OutApp.CreateItem(0)
With obj_OutMail
.To = s_EmailAddress
.CC = s_Email_CC
.Subject = s_Email_Subject
.HTMLBody = s_Email_Full & RangetoHTML(rng_PI_TableFull)
.Display
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
Call update_Status
结束子
`