【发布时间】:2015-03-04 08:34:31
【问题描述】:
我有一个受保护的工作表,我想使用宏将其复制到电子邮件中。我目前正在使用以下代码:
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Sheets("Ordering").Select
Range("A1:H63").Select
Selection.Copy
With OutMail
.To = ""
.Cc = ""
.BCC = ""
.Subject = ""
.Display
End With
SendKeys "^({v})", True
Set OutMail = Nothing
Set OutApp = Nothing
这在大多数情况下都有效。但是,它似乎有一个错误,即创建了新电子邮件但未粘贴工作表。相反,Excel 告诉我它不能这样做,因为工作表受到保护。
我已尝试更改宏,使其在选择之前取消保护并在粘贴后进行保护,但这只会导致一封没有粘贴工作表的新电子邮件。
我尝试在保护命令之前添加一个等待命令,但这只会导致一封没有粘贴工作表的新电子邮件,并且宏需要更长的时间才能结束。
有什么想法吗?
【问题讨论】:
-
尝试使用
DoEvents等待。请参阅 stackoverflow.com/questions/20963032/… 和 support.microsoft.com/kb/118468。另外:1)尝试等待(在创建电子邮件和粘贴之间使用DoEvents或Wait <time>,2)使用断点并逐步执行以查看问题是否通过时间延迟解决。 -
问题可能是因为您使用的是
SelectYou should never useselect并且无论如何您都无法选择受保护的单元格。尝试使用Sheets("Ordering").Range("A1:H63").Copy -
SendKeys也是出了名的不可靠。您可能可以使用更好的方法将数据放入 Outlook 电子邮件中。给我一点时间考虑一下……