/ / Excel / Outlookで選択範囲を電子メールで送信-Excel、VBA、Excel-VBA、Outlook-VBA、自動展開

Excel / Outlookで選択した範囲をEメールで送信する - Excel、Excel、Excel、PowerPoint、Outlook

次のコードがあります(提供: ロン・ド・ブルイン)そして、私自身の使用のためにそれをカスタマイズする方法を理解しようとしています。

コードを実行しても何も起こりません(「下付き文字が範囲外です」というエラーでマクロを停止するエラーハンドラーがあるため)。

ただし、行を変更すると:

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は2

まず、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"ステートメントに入れると、すべてのステートメントに "。"が付きます。 withステートメントから用語を継承する前に。したがって、「。Select」を使用すると、実際には「Sendrng.Select」が実行されます。