次のコードがあります(提供: ロン・ド・ブルイン)そして、私自身の使用のためにそれをカスタマイズする方法を理解しようとしています。
コードを実行しても何も起こりません(「下付き文字が範囲外です」というエラーでマクロを停止するエラーハンドラーがあるため)。
ただし、行を変更すると:
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」が実行されます。