Электронная рассылка выбранного диапазона в Excel/Outlook
У меня есть следующий код (любезно предоставленный Роном де Брейном), и я пытаюсь выяснить, как настроить его для своего собственного использования.
Когда я запускаю код, ничего не происходит (из-за обработчика ошибок, который останавливает макрос при ошибке "Subscript out of range"),
Однако, когда я меняю строку:
ActiveWorkbook.EnvelopeVisible = False
чтобы:
ActiveWorkbook.EnvelopeVisible = True
Видимый конверт позволяет мне сделать выбор и выбрать, кому я отправляю и т. Д.
Мне интересно, почему он сталкивается с ошибкой "вне диапазона", и если возможно, чтобы процесс проходил автоматически без необходимости вводить данные после того, как событие сработало [оно запускается из события Workbook_Open() - если это что-то меняет, и выбор делается на другом листе (Worksheet("ValLog")) в той же книге]
Код, который я запускаю:
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
1 ответ
Прежде всего, вы не объявили 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")
Вы пытаетесь установить диапазон здесь, а не выбирать его.
Затем измените:
Range("B5:K12").Select
чтобы:
.Select
Что вы на самом деле делаете в своем коде, так это выбираете диапазон в активном листе (так как вы не определили лист до диапазона). Помещая это в утверждение "С", каждое утверждение с "." до того, как он унаследует этот термин от оператора with. Таким образом, с ".Select" вы фактически запускаете "Sendrng.Select"