Excel VBA, как зацикливать избыточные условия - PullRequest
0 голосов
/ 04 апреля 2019

Привет сообществу, я пытаюсь упростить мой код с помощью цикла для вставки копии.Приведенный ниже код завершается успешно 1) обновить одну ячейку из одного продукта и 2) скопировать обновленную таблицу на определенный номер слайда.

Мне нужно повторить процедуру x7 раз - вместо этого, чтобы иметь длинный код, подумал яЯ мог бы зациклить условия со следующим.- обновите продукт (от 8 до 1), рассчитайте - затем скопируйте и вставьте таблицу Excel в слайд. Комбинация выглядит следующим образом.Продукт (листы) переходит к презентации (слайды). Продукт 8 переходит к слайду 9, продукт 7 - к слайду 8 и т. Д.

Option Explicit
Sub ExportToPPT()

    Dim ppApp As PowerPoint.Application
    Set ppApp = New PowerPoint.Application
    Dim Sel As Range
    Dim source As Range`

    Workbooks("WWDWT.xlsm").Activate
    Sheets("Graph Data").Select
    Range("E4").Value = "8"
    Application.Calculate

    Set Sel = Selection
    Set source = ActiveWorkbook.Sheets("waterfall").Range("D1")
    ActiveWorkbook.Sheets("waterfall").Range("D1:AE40").Copy

    Set ppSlide = ppPres.Slides(9)
    ppSlide.Shapes.PasteSpecial ppPasteBitmap

End Sub

Как сделать цикл Range("E4").Value = "8", чтобы изменить его на 7,6,5?, 4 ... и выделите каждого из них на Set ppSlide = ppPres.Slides(9), который следует за Slide (8), 7,6,5 и т. Д. Заранее благодарим всех за помощь

1 Ответ

1 голос
/ 04 апреля 2019

Используйте простой цикл For, например:

Sub ExportToPPT()
    ...
    Dim i as Long

    For i = 8 to 1 Step - 1
        Workbooks("WWDWT.xlsm").Activate
        Sheets("Graph Data").Select
        Range("E4").Value = i
        Application.Calculate

        Set Sel = Selection
        Set source = ActiveWorkbook.Sheets("waterfall").Range("D1")
        ActiveWorkbook.Sheets("waterfall").Range("D1:AE40").Copy

        Set ppSlide = ppPres.Slides(i + 1)
        ppSlide.Shapes.PasteSpecial ppPasteBitmap
    Next i

End Sub

Но учтите, что использование Activate и Select обычно не требуется.Вы можете упростить

Workbooks("WWDWT.xlsm").Activate
Sheets("Graph Data").Select
Range("E4").Value = i

до

Workbooks("WWDWT.xlsm").Sheets("Graph Data").Range("E4").Value = i

И вы никогда не используете Sel из Set Sel = Selection, так что, возможно, вы можете избавиться от этого (и source тоже?)

И я предполагаю, что ActiveWorkbook на самом деле тоже Workbooks("WDWT.xlsm") ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...