To jest kompletny przewodnik dotyczący automatyzacji programu PowerPoint przy użyciu makr VBA (Visual Basic for Applications). Poniżej znajdziesz wiele przydatnych przykładów.
VBA PDF (bezpłatne pliki do pobrania)
Pobierz nasz darmowy samouczek Microsoft PowerPoint VBA! Lub samouczki VBA dla innych programów biurowych!
Pobierać
Samouczek PowerPoint VBA (makra)
Zapisz jako prezentację z obsługą makr
Prezentacja z kodem VBA powinna być „Zapisana jako” Prezentacja PowerPoint z włączoną obsługą makr (*.pptm)
Włącz kartę „Programista” na Wstążce
Przed utworzeniem kodu VBA należy włączyć kartę Deweloper na Wstążce. Aby to zrobić, wybierz Plik -> Opcje, a następnie kliknij „Dostosuj wstążkę” i zaznacz pole obok karty „Programista” w prawym okienku.
Utwórz makro PowerPointa
Oto prosty przykład makra PowerPoint VBA:
1234567891011 | Sub ZapiszPrezentacjęAsPDF()Dim nazwa ppt jako ciągPrzyciemnij nazwę pliku PDF jako ciąg' Zapisz PowerPoint jako PDFpptName = AktywnaPrezentacja.PełnaNazwa' Zamień rozszerzenie pliku PowerPoint w nazwie na PDFPDFName = Left(pptName, InStr(pptName, ".")) & "pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2Napis końcowy |
Zapisuje aktywną prezentację jako plik PDF. Każdy wiersz kodu wykonuje następujące czynności:
- Tworzy zmienne dla nazwy PowerPoint i nazwy PDF
- Przypisuje nazwę aktywnej prezentacji do zmiennej pptName
- Tworzy pełną nazwę pliku PDF
- Zapisuje prezentację jako plik PDF
Aplikacja PowerPoint
Gdy kod VBA jest uruchomiony w prezentacji PowerPoint, aplikacja PowerPoint jest aplikacją domyślną i można nią manipulować bez wyraźnego odniesienia. Utwórz nową prezentację
Aby utworzyć prezentację, użyj metody Add aplikacji PowerPoint.
123 | Aplikacja.Prezentacje.Dodaj„lub bez wyraźnego odniesienia”Prezentacje.Dodaj |
Otwórz nową prezentację
Aby otworzyć nową i pustą prezentację, użyj metody Add z kolekcji Aplikacja.Prezentacje
1 | Prezentacje.Dodaj |
Otwórz istniejącą prezentację
Aby otworzyć już utworzoną prezentację, użyj metody Open z kolekcji Aplikacja.Prezentacje
1 | Prezentacje.Otwórz („Moja prezentacja.pptx”) |
Powyższy kod zakłada, że prezentacja znajduje się w tym samym katalogu, co prezentacja PowerPoint zawierająca kod.
Otwórz i przypisz do zmiennej
Powinieneś przypisać otwartą prezentację do zmiennej, aby móc nią manipulować zgodnie z wymaganiami.
12 | Przyciemnij ppt jako prezentacjęUstaw ppt = Presentations.Open("Moja prezentacja.pptx") |
Zobacz Aktywna prezentacja
Użyj odwołania ActivePrentation, aby manipulować prezentacją aktywną w GUI podczas wykonywania kodu VBA.
12 | ' Wydrukuj nazwę ActivePresentation w bezpośrednim oknieDebug.Print ActivePresentation.Name |
Zapisz bieżącą prezentację
Poniższe oświadczenie zapisze Aktywną Prezentację, jeśli została wcześniej zapisana. Jeśli nie został zapisany, zostaniesz poproszony o okno dialogowe „Zapisz jako”.
1 | AktywnaPrezentacja.Zapisz |
Zamknij bieżącą prezentację
Poniższe oświadczenie zamknie Aktywną Prezentację, nawet jeśli nie została zapisana po ostatniej edycji.
1 | AktywnaPrezentacja.Zamknij |
Przydatne referencje
Przypisz istniejącą prezentację (według nazwy) do zmiennej
12 | Przyciemnij moją prezentację według nazwy jako prezentacjęUstaw myPresentationByName = Application.Presentations("Moja prezentacja") |
Przypisz aktywny slajd do zmiennej
12 | Prąd przyciemnieniaSlide As SlideUstaw currentSlide = Application.ActiveWindow.View.Slide |
Przypisz slajd według indeksu do zmiennej
12 | Przyciemnij mySlide jako slajdUstaw mySlide = ActivePresentation.Slides(11) |
Policz liczbę slajdów
12 | Dim slideCount As LongslideCount = ActivePresentation.Slides.Count |
Uzyskaj indeks slajdów Numer bieżącego slajdu
12 | Dim currentSlideIndex As SlidecurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndex |
Dodaj pusty slajd na końcu pokazu slajdów
1234567 | Dim slideCount As LongDim newSlide as SlideslideCount = ActivePresentation.Slides.CountSet newSlide = ActivePresentation.Slides.Add(slideCount + 1, 12)' lub jako ppLayoutBlank = 12Ustaw nowySlide = ActivePresentation.Slides.Add(slideCount + 1, ppLayoutBlank) |
Dodaj slajd po bieżącym slajdzie
12345 | Przyciemnij nowyPrzesuń jako slajdDim currentSlideIndex jako IntegercurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexUstaw nowySlide = ActivePresentation.Slides.Add(currentSlideIndex, ppLayoutBlank) |
Usuń slajd
1234 | Dim currentSlideIndex jako IntegercurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexActivePresentation.Slides(currentSlideIndex).Usuń |
Przejdź do konkretnego slajdu
12 | ' To zabierze Cię do slajdu numer 4Aplikacja.ActiveWindow.View.GotoSlide (4) |
Przesuń slajd
Możesz przenieść slajd ze starej pozycji do nowej
123456 | ' Przejdź ze slajdu 3 do pierwszego slajduDim oldPosition jako liczba całkowita, dim newPosition jako liczba całkowitastaraPozycja = 3nowaPozycja = 1AktywnaPrezentacja.Slajdy(stara pozycja).Przenieś do pozycji:=nowa pozycja |
Zapętlaj wszystkie slajdy
Możesz zrobić coś z każdym slajdem lub przejrzeć wszystkie slajdy, aby znaleźć kilka slajdów i zrobić coś z użyciem kodu;
123456 | Przyciemnij mySlide jako slajdDla każdego mySlide w ActivePresentation.Slides' Zrób coś z bieżącym slajdem, o którym mowa w zmiennej 'mySlide'' Debug.Drukuj mySlide.NameNastępny slajd |
Zapętlaj wszystkie kształty aktywnego slajdu
Moc PowerPoint można wykorzystać za pomocą „Kształtów”. Poniższy kod zapętla wszystkie kształty na bieżącym slajdzie, dzięki czemu możesz nimi manipulować, jak chcesz;
123456789 | Dim currentSlide as SlideDim shp jako kształtUstaw currentSlide = Application.ActiveWindow.View.SlideDla każdego shp In currentSlide.Shapes' Zrób coś z obecnym kształtem określonym w zmiennej 'shp'' Na przykład wydrukuj nazwę kształtu w oknie bezpośrednimDebug.Drukuj shp.NameNastępny shp |
Zapętl wszystkie kształty we wszystkich slajdach
Możesz przejść przez wszystkie kształty w prezentacji, dodając pętlę, aby przejść przez wszystkie slajdy.
123456789 | Dim currentSlide as SlideDim shp jako kształtDla każdego bieżącego slajdu w aktywnej prezentacji.SlajdyDla każdego shp In currentSlide.Shapes' Zrób coś z bieżącym kształtem określonym w zmiennej 'shp'Debug.Drukuj shp.NameNastępny shpNastępny bieżącySlajd |
Przejdź przez wszystkie pola tekstowe aktywnego slajdu
TextBoxes to najczęściej używane kształty w prezentacjach PowerPoint. Możesz przejść przez wszystkie pola tekstowe, dodając zaznaczenie „Typ kształtu”. TexBoxy mają typ kształtu zdefiniowany jako stała VBA msoTextBox (wartość liczbowa stałej to 17)
1234567891011 | Dim currentSlide as SlideDim shp jako kształtUstaw currentSlide = Application.ActiveWindow.View.SlideDla każdego shp In currentSlide.Shapes' Sprawdź, czy typ kształtu to msoTextBoxJeśli shp.Type = 17 Wtedy ' msoTextBox = 17'Wydrukuj tekst w polu tekstowymDebug.Print shp.TextFrame2.TextRange.TextZakończ, jeśliNastępny shp |
Przechodź przez wszystkie pola tekstowe we wszystkich slajdach
Ponownie możesz przejść przez wszystkie pola tekstowe w prezentacji, dodając pętlę, aby przejść przez wszystkie slajdy.
1234567891011 | Dim currentSlide as Slide Dim shp as ShapeDla każdego bieżącego slajdu w aktywnej prezentacji.SlajdyDla każdego shp In currentSlide.Shapes' Sprawdź, czy typ kształtu to msoTextBoxJeśli shp.Type = 17 Wtedy ' msoTextBox = 17' Zrób coś z polem tekstowym określonym w zmiennej 'shp'Debug.Print shp.TextFrame2.TextRange.TextZakończ, jeśliNastępny shpNastępny bieżącySlajd |
Skopiuj wybrane slajdy do nowej prezentacji PPT
Aby skopiować niektóre slajdy do nowej prezentacji, najpierw wybierz żądane slajdy w istniejącej prezentacji, a następnie uruchom poniższy kod;
123456789101112131415161718 | Dim currentPrezentacja jako prezentacjaDim currentSlide as SlideDim newPrezentacja jako prezentacja' Zapisz odniesienie do bieżącej prezentacjiUstaw bieżącąPrezentację = Aplikacja.AktywnaPrezentacja' Zapisz odniesienie do bieżącego slajduUstaw currentSlide = Application.ActiveWindow.View.Slide' Dodaj nową prezentację i zapisz w odnośnikuUstaw nową prezentację = Aplikacja.Prezentacje.Dodaj' Skopiuj wybrane slajdyWybór.Kopiuj' Wklej to w nowej prezentacjiNowaPrezentacja.Slajdy.Wklej |
Skopiuj aktywny slajd na koniec aktywnej prezentacji
12345 | ' Kopiuj bieżący slajdApplication.ActiveWindow.View.Slide.Copy' Wklej na końcuAktywnaPrezentacja.Slajdy.Wklej |
Przydatne przykłady makr w PowerPoint
Oto kilka przydatnych przykładów makr pokazujących, jak wykonywać zadania. Zademonstrują one również koncepcje opisane powyżej.
Zmień slajd podczas pokazu slajdów
1234567891011 | Sub ChangeSlidePodczasSlideShow()Dim SlideIndex jako liczba całkowitaDim SlideIndexPoprzedni jako liczba całkowita' Zmień bieżący slajd na wybrany slajd 4 podczas pokazu slajdówIndeks slajdów = 4' Indeks bieżącego okna pokazu slajdów to 1 w kolekcji SlideShowWindowsSlideIndexPrevious = SlideShowWindows(1).View.CurrentShowPositionSlideShowWindows(1).View.GotoSlide SlideIndexNapis końcowy |
Zmień czcionkę na wszystkich slajdach we wszystkich polach tekstowych
123456789101112131415 | Sub Change FontOnAllSlides()Przyciemnij mójSlajd jako slajdPrzyciemnij shp jako kształt' Zmień rozmiar czcionki we wszystkich slajdachDla każdego mySlide w ActivePresentation.SlidesDla każdego shp w mySlide.ShapesJeśli shp.Type = 17 Wtedy ' msoTextBox = 17' Zmień rozmiar czcionki na 24shp.TextFrame.TextRange.Font.Size = 24Zakończ, jeśliNastępny shpNastępny mójSlajdNapis końcowy |
Zmień wielkość liter z górnej na normalną we wszystkich polach tekstowych
123456789101112131415 | Podrzędna sprawa zmian od górnej do normalnej()Przyciemnij mójSlajd jako slajdPrzyciemnij shp jako kształt' Zmień z wielkich na normalne dla wszystkich slajdówDla każdego mySlide w ActivePresentation.SlidesDla każdego shp w mySlide.ShapesJeśli shp.Type = 17 Wtedy ' msoTextBox = 17' Zmień wielkie litery na zwykłeshp.TextFrame2.TextRange.Font.Allcaps = FałszZakończ, jeśliNastępny shpNastępny mójSlajdNapis końcowy |
Przełącz wielkość liter między górnymi i normalnymi we wszystkich polach tekstowych
12345678910111213141516 | Podrzędna zmiana wielkości liter między górną a normalną()Przyciemnij mySlide jako slajdPrzyciemnij shp jako kształt' Przełącz między wielkimi i normalnymi literami dla wszystkich slajdówDla każdego mySlide w ActivePresentation.SlidesDla każdego shp w mySlide.ShapesJeśli shp.Type = 17 Wtedy ' msoTextBox = 17' Przełącz między wielkimi i normalnymi literamishp.TextFrame2.TextRange.Font.Allcaps = _Nie shp.TextFrame2.TextRange.Font.AllcapsZakończ, jeśliNastępny shpNastępny mójSlajdNapis końcowy |
Usuń podkreślenie z linii zstępujących
W typografii dolna część to część litery, która rozciąga się poniżej linii bazowej czcionki. W większości czcionek znaki malejące są zarezerwowane dla małych liter, takich jak g, j, q, p, y, a czasami f.
Kiedy podkreślisz tekst, nie wygląda to ładnie pod dolnymi literami. Oto kod, który usuwa podkreślenie ze wszystkich takich znaków g, j, p, q i y w całej prezentacji.
1234567891011121314151617181920212223242526 | Sub UsuńUnderlineFromDescennders()Przyciemnij mójSlajd jako slajdPrzyciemnij shp jako kształtDim lowerers_list As StringDim fraza As StringDim x tak długo' Usuń podkreślenia z Descendersbottomers_list = "gjpqy"Dla każdego mySlide w ActivePresentation.SlidesDla każdego shp w mySlide.ShapesJeśli shp.Type = 17 Wtedy ' msoTextBox = 17' Usuń podkreślenie z liter "gjpqy"Z shp.TextFrame.TextRangefraza = .TekstDla x = 1 To Len(.Text)If InStr(descenders_list, Mid$(fraza, x, 1)) > 0 Wtedy.Characters(x, 1).Font.Underline = FalseZakończ, jeśliNastępny xKończyć zZakończ, jeśliNastępny shpNastępny mójSlajdNapis końcowy |
Usuń animacje ze wszystkich slajdów
Użyj poniższego kodu, aby usunąć wszystkie animacje ustawione w prezentacji.
123456789101112 | Sub UsuńAnimacjeZWszystkieslajdy()Przyciemnij mySlide jako slajdPrzyciemnij i tak długoDla każdego mySlide w ActivePresentation.SlidesFor i = mySlide.TimeLine.MainSequence.Count to 1 Step -1„Usuń każdą animację”mySlide.TimeLine.MainSequence.Item(i).DeleteDalej jaNastępny mójSlajdNapis końcowy |
Zapisz prezentację jako PDF
Możesz łatwo zapisać aktywną prezentację w formacie PDF.
1234567891011 | Sub ZapiszPrezentacjęAsPDF()Dim nazwa ppt jako ciągPrzyciemnij nazwę pliku PDF jako ciąg' Zapisz PowerPoint jako PDFpptName = AktywnaPrezentacja.PełnaNazwa' Zamień rozszerzenie pliku PowerPoint w nazwie na PDFPDFName = Left(pptName, InStr(pptName, ".")) & "pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2Napis końcowy |
Znajdź i zamień tekst
Możesz znaleźć i zamienić tekst we wszystkich polach tekstowych wszystkich slajdów. Po pierwszym wystąpieniu tekstu, który chcesz znaleźć (zdefiniowanym przez findWhat), musisz wykonać pętlę przez polecenie Znajdź, aby znaleźć inne wystąpienia, jeśli takie istnieją.
123456789101112131415161718192021222324252627282930313233 | Sub FindAndReplaceText()Przyciemnij mySlide jako slajdPrzyciemnij shp jako kształtDim findWhat As StringDim zastąpić jako ciągDim ShpTxt As TextRangeDim TmpTxt As TextRangefindWhat = "szakal"zamień na = "lis"' Znajdź i znajdź i zamieńDla każdego mySlide w ActivePresentation.SlidesDla każdego shp w mySlide.ShapesJeśli shp.Type = 17 Wtedy ' msoTextBox = 17Ustaw ShpTxt = shp.TextFrame.TextRange„Znajdź pierwsze wystąpienie słowa „Znajdź” (jeśli istnieje)Ustaw TmpTxt = ShpTxt.Replace(findWhat, _Zamień:=zamień na, _Całe słowa:=Prawda)„Znajdź wszelkie dodatkowe wystąpienia słowa „Znajdź” (jeśli istnieje)Zrób, chociaż nie TmpTxt to nicUstaw ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)Ustaw TmpTxt = ShpTxt.Replace(findWhat, _Zamień:=zamień na, _Całe słowa:=Prawda)PętlaZakończ, jeśliNastępny shpNastępny mójSlajdNapis końcowy |
Eksportuj slajd jako obraz
Bieżący slajd (lub dowolny inny slajd) można wyeksportować jako obraz PNG, JPG (JPEG) lub BMP.
1234567891011121314 | Sub ExportSlideAsImage()Dim imageType jako ciągDim nazwa ppt jako ciągDim imageName jako ciągPrzyciemnij mójSlajd jako slajd' Eksportuj bieżący slajd do obrazuimageType = "png" ' lub jpg lub bmppptName = AktywnaPrezentacja.PełnaNazwaimageName = Left(pptName, InStr(pptName, ".")) & imageTypeUstaw mySlide = Application.ActiveWindow.View.slidemySlide.Export imageName, imageTypeNapis końcowy |
Zmień rozmiar obrazu, aby zakryć cały slajd
1234567891011121314151617181920212223242526 | Sub ResizeImageToCoverFullSlide()Przyciemnij mójSlajd jako slajdPrzyciemnij shp jako kształt' Zmień rozmiar obrazu do pełnego rozmiaru slajdu' Zmień wysokość i szerokość pierwszego kształtu na bieżącym slajdzie'dopasować do wymiarów prowadnicyUstaw mySlide = Application.ActiveWindow.View.slideUstaw shp = mójSlajd.Kształty(1)'''' Zamień dwie powyższe instrukcje na'' następujące oświadczenie, jeśli chcesz'' rozwiń aktualnie wybrany kształt'' spowoduje błąd, jeśli nic nie zostanie wybrane'Ustaw shp = ActiveWindow.Selection.ShapeRange(1)Z shp.LockAspectRatio = Fałsz.Height = AktywnaPrezentacja.PageSetup.SlideHeight.Width = AktywnaPrezentacja.PageSetup.SlideWidth.W lewo = 0Góra = 0Kończyć zNapis końcowy |
Wyjdź ze wszystkich uruchomionych pokazów slajdów
Jeśli masz otwartych wiele pokazów slajdów w tym samym czasie, możesz zamknąć je wszystkie za pomocą poniższego makra.
1234567 | Sub ExitAllRunningSlideShows()Rób, gdy SlideShowWindows.Count > 0SlideShowWindows(1).View.ExitPętlaNapis końcowy |
Automatyzacja PowerPointa z Excela
Możesz także łączyć się z programem PowerPoint przez inne aplikacje (takie jak Excel i Word). Jako pierwszy krok musisz odwołać się do wystąpienia programu PowerPoint.
Można to zrobić na dwa sposoby - wczesne wiązanie oraz późne wiązanie .
Otwórz PowerPoint - wczesne wiązanie
We „Early Binding” musisz wyraźnie ustawić odniesienie do „Microsoft PowerPoint 16 Object Library” (dla MS Office 2022) w VBE (Visual Basic Editor) za pomocą opcji Tools->References.
123 | ' Wczesne wiązanieDim pptApp jako aplikacjaUstaw pptApp = Nowa aplikacja PowerPoint. |
Otwórz PowerPoint - późne wiązanie
W „Late Binding” zmienna aplikacji jest deklarowana jako obiekt, a silnik VBA łączy się z odpowiednią aplikacją w czasie wykonywania.
123 | 'Późne wiązaniePrzyciemnij pptApp jako obiektUstaw pptApp = CreateObject("PowerPoint.Application") |
Spraw, aby aplikacja była widoczna
Po ustawieniu referencji do aplikacji PowerPoint może być konieczne jej uwidocznienie.
1 | pptApp.Visible = Prawda |
Manipulowanie PowerPointem
Możesz użyć wszystkich metod do manipulowania prezentacjami z programu PowerPoint, opisanych powyżej z programu Excel, po prostu dodając odwołanie do utworzonego przez Ciebie programu PowerPoint.
Na przykład
1 | Prezentacje.Otwórz („Moja prezentacja.pptx”) |
musi być używany tak jak to
1 | pptApp .Prezentacje.Open ("Moja prezentacja.pptx") |
Zamknij aplikację
Po zakończeniu tego, co chciałeś zrobić z aplikacją PowerPoint, musisz ją zamknąć i zwolnić odwołanie.
12 | pptApp.ZamknijUstaw pptApp = Nic |
Kopiuj z Excela do PowerPointa
Ten kod skopiuje zakres z programu Excel do programu PowerPoint:
Notatka: Pokazanie, w jaki sposób zakres z Excela można skopiować do PowerPointa za pomocą VBA, utrzymano w możliwie najprostszy sposób.
12345678910111213141516171819 | Sub copyRangeToPresentation()' Otwórz nową instancję PowerPointaUstaw pptApp = CreateObject("PowerPoint.Application")Z pptApp' Utwórz nową prezentacjęUstaw ppt = .Prezentacje.Dodaj' Dodaj pusty slajdSet newSlide = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12' Skopiuj zakres z aktywnego arkusza w programie ExcelActiveSheet.Range("A1:E10").Kopiuj' Wklej do programu PowerPoint jako obraznewSlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile' Przełącz na PowerPoint.AktywujKończyć zNapis końcowy |
Często zadawane pytania dotyczące PowerPoint VBA
Czym są makra w PPT?
Makro to ogólny termin odnoszący się do zestawu instrukcji programistycznych, które automatyzują zadania. PowerPoint (PPT) Makra automatyzują zadania w PowerPoint przy użyciu języka programowania VBA.
Jak korzystać z VBA w programie PowerPoint?
Aby użyć VBA w programie PowerPoint, otwórz Edytor VBA (ALT + F11 lub Deweloper > Visual Basic).
Jak utworzyć makro w programie PowerPoint?
1. Otwórz edytor VBA (ALT + F11 lub programista> Visual Basic)
2. Przejdź do Wstaw > Moduł, aby utworzyć moduł kodu
3. Wpisz „Sub HelloWorld” i naciśnij Enter
4. Pomiędzy wierszami „Sub HelloWorld” i „End Sub” wpisz „MsgBox „Hello World!”
5. Stworzyłeś makro!
6. Teraz naciśnij „F5”, aby uruchomić makro
Autor: Vinamra Chandra