Почему мой код VBA пропускает строки, когда я запускаю его, а не когда я прохожу через него? == - PullRequest
0 голосов
/ 12 января 2019

Ниже приведен код, который я написал. Я пытаюсь создать построенную модель Excel для создания точки электропитания из существующего шаблона PowerPoint. В настоящее время я просто пытаюсь убедиться, что он может пройти один раз и заполнить необходимую информацию, но в конечном итоге я захочу, чтобы он зациклился и создал более длинную PowerPoint при наличии нескольких входов. Прежде чем добавить это, мне нужно, чтобы этот код работал. Когда я шагаю по коду, нажимаю F8, если работает отлично и работает как надо. Однако когда я нажимаю «Выполнить», он пропускает разделы и публикует информацию из файла Excel в неправильных местах. Есть ли способ заставить его работать более эффективно, чтобы он больше не пропускал, и чтобы позже я смог запустить более сложный код?

Спасибо!

Public Sub DevOppDeck()

    Set ppApp = GetObject(, "Powerpoint.Application")
    Set ppPres = ppApp.ActivePresentation

    'Pick your DMA

    userInput = InputBox("Please type in a DMA ID", "Create a Development Opportunity Deck")

        Worksheets(2).Range("b4") = userInput

    Dim DMAName As Variant

        Set findName = Worksheets("vlookups").Range("AD2:AG211")
        DMAName = Application.WorksheetFunction.VLookup(userInput, findName, 4, False)

    'Rename Deck

    slidenum = 1
        Set ppslide = ppPres.Slides(slidenum)
        ppslide.Select

    ppslide.Shapes("PPT_Title").TextFrame.TextRange.Text = DMAName & Space(1) & "Development Opportunity"
    ppslide.Shapes("PPT_Date").TextFrame.TextRange.Text = "January 1900"

    'Change data for DMA proposal tables

    slidenum = 4
        Set ppslide = ppPres.Slides(slidenum)
        ppslide.Select

            'Competitor benchmark table
            Set compBench = ppslide.Shapes("Comp_Benchmark")

                Worksheets(2).Range("E7:I16").Copy

                compBench.Table.Cell(2, 2).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

            'Market demographics table
            Set marketDem = ppslide.Shapes("Market_Dem")

                Worksheets(2).Range("L7:M12").Copy

                marketDem.Table.Cell(2, 2).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

            'Market statistics table
            Set marketStats = ppslide.Shapes("Market_Stats")

                Worksheets(2).Range("P7:Q12").Copy

                marketStats.Table.Cell(2, 2).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

    'Change data for Opportunity Summary

    slidenum = 5
       Set ppslide = ppPres.Slides(slidenum)
       ppslide.Select

            'Competitor benchmark table
            Set compOpps = ppslide.Shapes("Competitor_Opps")

                Worksheets(2).Range("G20:G22").Copy

                compOpps.Table.Cell(2, 5).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

                Worksheets(2).Range("H20").Copy

                compOpps.Table.Cell(5, 5).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

            'Seed opportunities table
            Set seedOpps = ppslide.Shapes("Trade_Area_Seeds")

                Worksheets(2).Range("I20").Copy

                seedOpps.Table.Cell(2, 3).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

                Worksheets(2).Range("I20").Copy

                seedOpps.Table.Cell(5, 3).Shape.Select
                    ppApp.CommandBars.ExecuteMso ("PasteExcelTableDestinationTableStyle")

End Sub

1 Ответ

0 голосов
/ 13 января 2019

Если вы хотите повысить надежность макроса, вам нужно проверить, что копирование и выбор завершены, прежде чем вставлять данные с помощью ExecuteMso. Для буфера обмена вам необходимо сначала очистить его, а затем попытаться .copy, пока буфер не будет заполнен. Тогда для выбора формы это то же самое: попробуйте select, пока он действительно не будет выбран. В обоих случаях можно использовать цикл while (избегайте бесконечных циклов, конечно ;-)). Ради краткости и удобства использования вы можете поместить это в отдельную функцию.

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