Nhập Môn PowerPoint VBA

giaiphapvba

Administrator
Thành viên BQT
Tôi giả định các bạn cũng như tôi, đã và đang tiếp cận với VBA Excel. Vì vậy, kiến thức trong topic này sẽ được trình bày theo hướng đó, các bạn đã nắm được những thứ cơ bản (Alt +F11 để mở VBE soạn thảo code, khai báo biến, kiểm tra lỗi,...).
Do đó, dưới đây sẽ là kiến thức tôi muốn bắt đầu ngay cùng với các bạn.

1.
2.
3.
4.
5.
6.
7.
8.
 

Euler

Mod
Thành viên BQT
1. Object, Property, Method trong PowerPoint
Cũng như Excel có Workbooks, có sheets,... vậy PowerPoint có gì?
Đôi khi chúng ta lấy được những slide từ google hay từ đâu đó, việc copy, chỉnh sửa font và màu sắc,... thật là vất vả phải không nào?
Thông qua PowerPoint VBA, chúng ta có thể tự động hóa những thao tác đó. Tuy nhiên, đầu tiên chúng ta hãy cùng nhau tìm hiểu những kiến thức cơ bản đã nhé.

1.1 Object là gì?
Khi sử dụng PowerPoint VBA, ta có các đối tượng để thao tác như là Presentation (tương tự như workbook của Excel), slides (tương tự như sheets của Excel), Font chữ được sử dụng trên Slide, Shape được sử dụng trên slide,... Tất cả những cái mà chúng ta có thể thao tác trên nó giống như những thứ tôi vừa liệt kê được gọi là đối tượng (Object).

Object là thứ mà chúng ta thao tác với nó. Như vậy chúng ta có biết bao nhiêu là loại Object.
ObjectThuyết minh
ApplicationApplication PowerPoint
PresentationFile powerpoint mà chúng ta làm việc
SlideSlide trong file powerpoint
ShapeShape
TextFrameĐường bao Text
TextRangeNội dung Text bên trong
FontThiết định font

Ngoài những Object kể trên tất nhiên là còn có những Object khác, nhưng trước hết tôi muốn các bạn chỉ quan tâm tới các Object tôi nói ở trên.

1.2 Thao tác với thuộc tính (Property) của Object
1.2.1 Thuộc tính (Property) là gì?

Đó là giá trị thông tin của Object.
Ta có cấu trúc: Object.TenThuocTinh
Ví dụ với đối tượng Presentation (tương tự như workboos của Excel), ta có các thuộc tính sau:
Tên thuộc tínhThuyết minh
NameTên của file powerpoint (Ex: tuhocvba.pptm )
PathĐường dẫn của file powerpoint. (Ex: C:\VBA\Desktop
SlidesTập hợp tất cả các slide trong file powerpoint

1.2.2 Gián giá trị cho thuộc tính
Ta có cấu trúc: Object.TenThuocTinh = GiaTri

1.2.3 Ví dụ sử dụng thuộc tính:

Mã:
Sub vidu1()
    Debug.Print ActivePresentation.Name
    Debug.Print ActivePresentation.Path
End Sub
Kết quả:
Mã:
tuhocvba.pptm
C:\VBA\Desktop
1.3 Thao tác với phương thức (method) của Object
1.3.1 Phương thức (method) là gì?

Đó là mệnh lệnh truyền tới Object.
Ví dụ với đối tượng Presentation (tương tự như workboos của Excel), ta có phương thức sau:
Tên phương thứcNội dung
Closeđóng file powerpoint
SaveLưu file powerpoint
1.3.2 Ví dụ thực hành với phương thức:
Mã:
Sub CloseFile()
ActivePresentation.Close
End Sub
Kết quả là file powerpoint của các bạn sẽ bị đóng.
 

vbano1

SMod
Thành viên BQT
2. Lấy Active Presentation (Làm việc với file powerpoint hiện hành)
Cũng giống như Excel ở trạng thái có nhiều file được mở, ta muốn làm việc với file hiện hành thì chúng ta có ActiveWorkbook, thì với PowerPoint cũng vậy, chúng ta có ActivePresentation.

Nhắc lại bài học trước:
Ở bài học trước chúng ta đã thực hiện chạy đoạn code sau:
Mã:
Sub vidu1()
    Debug.Print ActivePresentation.Name
    Debug.Print ActivePresentation.Path
End Sub
Ngoài ra chúng ta còn thực thi phương thức đóng file:
Mã:
Sub CloseFile()
ActivePresentation.Close
End Sub
Ta biết rằng để lấy thông tin thuộc tính ta có:
Object.TenThuocTinh
Hoặc để thực thi một phương thức ta có:
Object.TenPhuongThuc

Vậy tóm lại, ActivePresentation là cái gì?
Trên VBE các bạn vào View => Object Browser
Bạn cần đăng nhập để thấy đính kèm


Ở khu vực Object, các bạn chọn PowerPoint.
Ở khu vực Class, các bạn chọn globals.

Bạn cần đăng nhập để thấy đính kèm

Globals là gì?
Chúng ta có Object.TenThuocTinh
Tuy nhiên khi giản lược .Object đi, chỉ còn tên thuộc tính, ví dụ như trong trường hợp này ta có ActivePresentation. Có nghĩa là Globals là cách viết giản lược bỏ đi Object.
ActivePresentation là thuộc tính của Application, nên viết đầy đủ là:
Application.ActivePresentation
Presentation
là đối tượng, bao gồm tất cả các file powerpoint đang mở. Và thuộc tính ActivePresentation để xác định đó là file powerpoint mà hiện tại ta đang thao tác.

Nguồn:
 

tuhocvba

Administrator
Thành viên BQT
3. Lấy Slides Collection và Slide Object

3.1 Cấu trúc của PowerPoint Object:


Đầu tiên bạn hãy nhìn vào Slide dưới đây:
Bạn cần đăng nhập để thấy đính kèm


Với kiến thức của bài học trước, bằng cấu trúc:
Object.TenPhuongThuc
Object.TenThuocTinh


Tôi muốn các bạn lấy toàn bộ tên các shape cũng như các ô Textbox có trong file slide này.
Để làm được điều đó, trước hết chúng ta cần biết cấu trúc của file powerpoint sẽ được mô tả như dưới đây:
Bạn cần đăng nhập để thấy đính kèm

Mối quan hệ mẹ con ở trên, các bạn cần nắm được: Presentation Object => Slide Object => Shape Object.
Bạn cần đăng nhập để thấy đính kèm



3.2 Collection là gì?
Trong VBA, tập hợp các Object có cùng chủng loại được gọi là Collection.
Ví dụ file powerpoint thì đâu chỉ có một trang slide, mà có thể có nhiều trang slide, khi đó ta có Slides Collection.
Trong Slides Collection này, ta muốn thao tác với một Slide Object cụ thể trong đó, chẳng hạn slide số 1.

Vậy là các bạn đã hiểu được trình tự thao tác rồi đấy.
CollectionObject
Presentations CollectionPresentation Object
Slides CollectionSlide Object
Shapes CollectionShape Object

3.3 Lấy Collection
Nào, hãy xem file powerpoint của chúng ta có bao nhiêu trang Slide:
Mã:
Sub SlidesCollectionTake()
Debug.Print ActivePresentation.Slides.Count
End Sub
Kết quả là : 2

3.3 Từ Collection lấy Object
Từ Slides Collection, bằng chỉ mục, ta sẽ lấy một Slide cụ thể (Object):
Mã:
Sub SlidesObjectTake()
Debug.Print ActivePresentation.Slides(1).Name
Debug.Print ActivePresentation.Slides(1).SlideIndex
End Sub
Kết quả:
Mã:
Slide1
 1
Nguồn:
 

giaiphapvba

Administrator
Thành viên BQT
4. Làm việc với Shapes Collection bằng For Each
Nhắc lại bài học trước: Chúng ta đã lấy thông tin của một trang Slide:
Mã:
Sub SlidesTake()
 
Debug.Print ActivePresentation.Slides(1).Name
Debug.Print ActivePresentation.Slides(1).SlideIndex
 
End Sub
Hôm nay, chúng ta đặt vấn đề là trang Slide này có nhiều Shapes. Và ta muốn làm việc với các Shapes này.
Nói tới shape, nhiều người sẽ thắc mắc nó là cái gì? Đó là những vật có hình thù.
Trên Powerpoint, các bạn vào Insert => Shapes và lấy bất cứ đối tượng nào ở đây kéo vào trang Slide của bạn.
Bạn cần đăng nhập để thấy đính kèm


Ví dụ 1: Lấy số lượng Shape có trong trang Slide 1:
Mã:
Sub LayThongTinShape()
    Debug.Print ActivePresentation.Slides(1).Shapes.Count
End Sub
Kết quả là 4 vì trên trang slide 1 của tôi có 4 shapes.

Cấu trúc For Each làm việc với Collection là:
Mã:
For Each BienSo InCollection_X
 ’Xử lý
Next BienSo
Ở bài trước, các bạn đã được giới thiệu cách lấy Collection.

Ví dụ 2: Lấy tên shape có trong trang slide 1
Mã:
Sub LayTenShape()
 
    Dim shp As Shape
    For Each shp In ActivePresentation.Slides(1).Shapes
        Debug.Print shp.Name
    Next shp
 
End Sub
Kết quả:
Mã:
Rectangle 3
TextBox 5
Oval 6
Flowchart: Manual Input 7
Nguồn:
 

Euler

Mod
Thành viên BQT
5. Làm việc với Text của Shape
Nhắc lại bài học trước, chúng ta đã lấy được tên của các shape trong một trang slide, cụ thể là trong trang slide 1:
Mã:
Sub ShapesNameTake()
Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.Name
Next shp
End Sub
Cấu tạo của shape object:
Bạn cần đăng nhập để thấy đính kèm

TextFrame Object: Là đối tượng đại diện cho bài trí của shape.
Chúng ta biết rằng Shape Object có thể cho chúng ta nhập ký tự vào bên trong.
  • Vị trí của TextBox là?
  • Phần dư trên và dưới là? (Để chữ không chạm vào đường bao)
  • Text được nhập bên trong có thể xuống dòng?...
Đó là những thuộc tính mà chúng ta có thể thao tác với shape.
Tóm lại, bạn click chuột phải vào shape và chọn Format Shape... → Text Option → Text Box
Ở đây có rất nhiều mục mà bạn có thể thiết định.
Bạn cần đăng nhập để thấy đính kèm

Nói tóm lại bạn có thể hiểu TextFrame Object là đối tượng chứa những hạng mục ở trên.
Cấu trúc Code:
Mã:
ShapeObject.TextFrame
TextRange Object: Là đối tượng đại diện text bên trong shape. Nó là đối tượng con của TextFrame.
Bạn có thể copy text hoặc xoá text hoặc thay đổi nội dung text bên trong shape.
Bạn có thể thiết định font cho text bên trong shape.
Cấu trúc Code:
Mã:
TextFrameObject.TextRange
Ví dụ 1: Lấy text
Mã:
TextRangeObject.Text
Ứng dụng thực tế:
, mặc dù Tool được viết trên Excel, nhưng vì làm việc với PowerPoint cho nên nó vẫn phải sử dụng kiến thức PowerPoint VBA, cụ thể là trong bài học này, đó là lấy text và thay đổi nội dung text của shape.
 

vbano1

SMod
Thành viên BQT
6. Thiết định Font và lấy thông tin Font
Ở bài học trước chúng ta đã lấy thông tin của shape.
Mã:
Sub ShapesTextTake()
 
Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.TextFrame.TextRange.Text
Next shp
 
End Sub
Hôm nay, với chủ đề thiết định Font và lấy thông tin Font, dưới đây là các việc chúng ta sẽ làm.
  • Chủng loại font. (Ví dụ: Calibri, Times New Roman
  • Size font. (Cỡ chữ to nhỏ)
  • Tô đậm ( B ), gạch chân ( U ), chữ nghiêng ( I )
  • Color font (màu chữ)

Font là đối tượng con của TextRange Object.
Cấu trúc:
Mã:
TextRange Object.Font
Mã:
Sub LayTenFontCuaShape()
 
Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.Name, shp.TextFrame.TextRange.Font.Name
Next shp
 
End Sub
Kết quả:
Mã:
Rectangle 3   Times New Roman
TextBox 4     Calibri
Bài tập: Các bạn hãy thử thay đổi cỡ chữ, kiểu chữ in đậm, màu sắc cho chữ trong shape của các bạn nhé.
 

tuhocvba

Administrator
Thành viên BQT
7. Các thuộc tính của Font của Text của Shape.
Nhắc lại bài học trước: Ở bài học trước các bạn đã lấy được tên font của text của các shape trong trang slide 1.
Mã:
Sub LayTenFontCuaShape()

Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    Debug.Print shp.Name, shp.TextFrame.TextRange.Font.Name
Next shp

End Sub
7.1 Thuộc tính Name:
Đối với font chữ tiếng anh thông thường thì các bạn có thuộc tính Name:
Mã:
FontObject.Name
Với font chữ tiếng nhật, các bạn sử dụng thuộc tính NameFarEast:
Mã:
FontObject.NameFarEast
7.2 Kiểu dáng của Font:
Thuộc tínhDiễn giải
Boldchữ đậm
Italicchữ nghiêng
UnderlineGạch chân dưới chữ
ShadowTạo bóng cho chữ
Embosschữ nổi

7.3 Cỡ chữ của Font:
Mã:
FontObject.Size
7.4 Màu của Font:
Mã:
FontObject.Color
Nguồn:
 

Euler

Mod
Thành viên BQT
8. Cách dùng For Each và For Next trong PowerPoint VBA (Phần cuối)
Nhắc lại bài học trước: Ở bài học trước, chúng ta có thể thiết định font chữ cho toàn bộ các shape trong một trang slide:
Mã:
Sub ShapesThietDinhFont()

Dim shp As Shape
For Each shp In ActivePresentation.Slides(1).Shapes
    With shp.TextFrame.TextRange.Font
        .Name = "Meiryo UI"
        .NameFarEast = "Meiryo UI"
        .Color = RGB(89, 89, 89)
    End With
Next shp
8.1 Vòng lặp For~Each
Cấu trúc:

Mã:
For Each BienSo In Collections
 ’Xử lý
Next BienSo
Ứng dụng:
Chẳng hạn ta muốn thiết định font cho toàn bộ các shape:
Mã:
For Each ShapeObject In ShapesCollections
 ’Thiết định font
Next ShapeObject
Thiết định font cho toàn bộ các shape của toàn bộ các trang Slide:
Mã:
For Each SlideObject In SlidesCollections
 For Each ShapeObject In ShapesCollections
  ’Thiết định font
 Next ShapeObject
Next SlideObject
Code cụ thể:
Mã:
Sub ThietDinhFontChoALLShape()

Dim sld As Slide, shp As Shape
For Each sld In ActivePresentation.Slides
    For Each shp In sld.Shapes
        With shp.TextFrame.TextRange.Font
            .Name = "Meiryo UI"
            .NameFarEast = "Meiryo UI"
            .Color = RGB(89, 89, 89)
        End With
    Next shp
Next sld

End Sub
8.2 Vòng lặp For~Next
Cấu trúc:

Mã:
For i = Nbatdau To Ncuoi
 ’xử lý
Next i
Với ví dụ thiết định font cho toàn bộ các shape, ta viết lại theo cấu trúc For~Next như sau:
Mã:
Sub 全てのシェイプのフォントを設定()

Dim i As Long, shp As Shape
With ActivePresentation
    For i = 1 To .Slides.Count
        For Each shp In .Slides(i).Shapes
            With shp.TextFrame.TextRange.Font
                .Name = "Meiryo UI"
                .NameFarEast = "Meiryo UI"
                .Color = RGB(89, 89, 89)
            End With
        Next shp
    Next i
End With
End Sub
Lý do nên dùng For~Next
Tùy từng trường hợp mà ta có các cách xử lý khác nhau. Đối với xử lý tuần tự theo chỉ số (index) thì ta dùng For~Next.
Lệnh For~Each dùng khi mà chỉ số (index) không được đảm bảo, chúng ta có một tập hợp hỗn tạp, và xử lý bằng cách duyệt qua từng phần tử của tập hợp đó, không quan tâm tới tính tuần tự.
Đối với , ta cần biết chỉ số bắt đầu và chỉ số kết thúc, sau đó vòng lặp sẽ xử lý tuần tự tăng(giảm) dần cho tới hết.

Như vậy kiến thức về PowerPoint VBA Nhập Môn đã được chúng tôi trình bày xong. Cho tới thời điểm hiện tại, diễn đàn tuhocvba.net là diễn đàn đầu tiên ở Việt Nam trình bày có hệ thống kiến thức này. Chúc các bạn thu hoạch được nhiều kiến thức bổ ích trên diễn đàn, giúp chúng tôi quảng bá đường link diễn đàn cho bạn bè, đồng nghiệp của các bạn. Chân thành cảm ơn.
 
Top