Как вы можете выбрать определенный диапазон и сводную таблицу вместе в VBA?

#excel #vba

#excel #vba

Вопрос:

Добрый день,

Я пытаюсь выбрать этот диапазон, и, похоже, код обрабатывается, но когда я добираюсь до своего if rng is nothing then , он не захватывает диапазон. Я застрял на этом некоторое время, и любые мысли помогут. Это также фрагмент кода, но я просто предположил, что это самая важная часть.

Обратите внимание, что я должен соблюдать это условие, потому что этот раздел кода будет вызываться всегда, и если он пуст, он пропустит и запустит следующую строку. Так что я не могу просто select. повторить, какие-либо мысли, помощь была бы очень признательна! Задавайте мне любые вопросы, если не ясно. Большое вам спасибо.

     Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object

    Set rng = Nothing
    On Error Resume Next
    
    Set srng = Sheets("Email Template").PivotTables("PivotTable5")
    Set rng = Sheets("Email Template").Range("B3:J13" amp; srng)
    Set DDT = Worksheets("Email Template").Range("X2")
    Set Teamail = Worksheets("Email Template").Range("X3")
    On Error GoTo 0

    If rng Is Nothing Then
        MsgBox "The selection is not a range or the sheet is protected" amp; _
               vbNewLine amp; "please correct and try again.", vbOKOnly
        Exit Sub
 

Ответ №1:

Первое, что вам нужно сделать, это получить диапазон сводной таблицы, затем, если вы хотите настроить rng для ссылки как на B3: J13, так и на srng, используйте Union.

 Dim rng As Range
Dim srng As Range
Dim DDT As Range
Dim Teamail As Range
Dim OutApp As Object
Dim OutMail As Object

    Set srng = Sheets("Email Template").PivotTables("PivotTable5").TableRange1
    Set rng = Union(Sheets("Email Template").Range("B3:J13"), srng)
    Set DDT = Worksheets("Email Template").Range("X2")
    Set Teamail = Worksheets("Email Template").Range("X3")

    If rng Is Nothing Then
        MsgBox "The selection is not a range or the sheet is protected" amp; _
               vbNewLine amp; "please correct and try again.", vbOKOnly
        Exit Sub
    End If
 

PS Неясно, какую часть сводной таблицы вы хотите, я использовал DataBodyRange, но вы можете использовать TableRange1 для получения всей таблицы.

Комментарии:

1. Привет, спасибо за ваш ответ, но я все еще получаю сообщение об ошибке, мысли?

2. Я отредактировал свой ответ — ваш код (и мой исходный код) возвращал фактическую сводную таблицу, а не ее диапазон.

3. Привет, Нори, спасибо за вашу помощь… но я все еще сталкиваюсь с заявлением об ошибке.

4. Не уверен, на какое утверждение об ошибке вы ссылаетесь, вы имеете в виду окно сообщения после инструкции If? Что произойдет, если вы удалите On Error Resume Next?

5. Я обновил свой ответ, чтобы показать точный код, который я использовал.