1

私は次のコード ( Ron de Bruinの好意による) を持っており、自分で使用するためにそれをカスタマイズする方法を見つけようとしています。

コードを実行しても何も起こりません (エラー ハンドラーが「範囲外の添字」でマクロを停止するため)、

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

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
4

1 に答える 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」を実行しています

于 2015-05-21T20:19:17.147 に答える