通过电子邮件在Excel / Outlook中select范围

我有以下代码( Ron de Bruin提供 ),并试图弄清楚如何自定义它以供我自己使用。

当我运行代码时,没有任何反应(因为error handling程序停止错误“下标超出范围”的macros)

但是,当我改变线:

ActiveWorkbook.EnvelopeVisible = False 

至:

 ActiveWorkbook.EnvelopeVisible = True 

可见的信封允许我做出select并select我要发送给谁等

我想知道为什么它遇到了“超出范围”的错误,并且如果有可能让这个过程自动地通过,而不需要我在事件触发后input事件(这是从Workbook_Open()事件触发的 – 如果这有什么区别,并且在另一个工作表(工作表(“ValLog”))中进行select)

我正在运行的代码是:

 Private Sub workbook_open() Dim AWorksheet As Worksheet Dim Sendrng, rng As Range Dim answer As Integer On Error GoTo StopMacro answer = MsgBox("Do you want to send e-mail notifications of upcoming tours?", vbYesNo) If answer = vbYes Then With Application .ScreenUpdating = False .EnableEvents = False End With Set Sendrng = Worksheets("ValLog").Range("B5:K12").Select With Sendrng 'Select the range you want to mail Range("B5:K12").Select ' Create the mail and send it ActiveWorkbook.EnvelopeVisible = True With .Parent.MailEnvelope .Introduction = "Test Test Test" With .Item .To = "myemail@blahblah.com" .CC = "" .BCC = "" .Subject = "Why, Error?" .Send End With End With StopMacro: With Application .ScreenUpdating = True .EnableEvents = True End With ActiveWorkbook.EnvelopeVisible = False End With Else 'Do Nothing End If End Sub 

首先,你还没有声明SendRange作为范围。 该行:

 Dim SendRange, rng As Range 

声明SendRange作为变体,rng作为范围。 将其更改为:

 Dim SendRange As Range, rng As Range 

二,改行:

 Set Sendrng = Worksheets("ValLog").Range("B5:K12").Select 

至:

 Set Sendrng = Worksheets("ValLog").Range("B5:K12") 

您正试图设置范围,而不是select它。

然后,改变:

 Range("B5:K12").Select 

至:

 .Select 

你在代码中实际做的是在activesheet中select范围(因为你没有在范围之前定义表单)。 把这个放在一个“With”语句中,每个语句都带一个“。” 然后才会inheritancewith语句。 因此用“.Select”你实际上正在运行“Sendrng.Select”