Mục tiêu
Sau bài này bạn có thể:
Đặt tên cho slide & shape.
Truy xuất được đến slide & shape.
Viết Macro cho shape.
Giới thiệu
Thành phần cơ bản trên một bài trình chiếu là Slide. Trên Slide chúng ta thường chèn TextBox, hình ảnh, shape. Ở đây ta gọi chung các đối tượng này là Shape.
Slide & Shape cũng có tên duy nhất để chúng ta có thể truy xuất đến. Tuy nhiên Powerpoint không cung cấp một chức năng nào để chúng ta có thể xem tên hoặc gán tên cho Slide/Shape. Chúng ta có thể đổi tên cho Shape/Slide bằng code, tuy nhiên nếu chúng ta thường xuyên làm việc trên Shape thì điều này rõ rang khơng thuận tiện, chính vì vậy tơi đã tạo ra 1 Plugin sử dụng cho PowerPoint 2007 giúp bạn thực hiện điều này. Có thể truy cập
http://vn.myblog.yahoo.com/onceclick để download Plugin này.
Sau khi cài đặt PowerPoint 2007 sẽ có thêm tab VBA Support trên Ribbon. Trên này cung
cấp các chức năng như lấy tên slide/shape đưa vào clipboard, đặt tên cho slide/shape, lấy
đường dẫn truy xuất đến slide/shape, một số đoạn code điều hướng trên slide.
Bài 05: Slide & Shape Xây dựng bài trình chiếu tương tác bằng Powerpoint
Nếu sử dụng công cụ này chúng ta không cần phải đọc phần đổi tên cho Slide/Shape nữa. Nếu bạn vẫn đang sài Powerpoint 2003 có thể đổi tên cho Slide/Shape như sau.
Đọc/đổi tên Slide/Shape
Bước 1: Chọn Slide hoặc Shape muốn đổi tên.
Bước 2: Bấm ALT+F11 để mở cửa sổ Visual Basic. Sau đó bấm Ctrl + G hoặc chọn Menu
View/Immediate Window để mở ngăn Immediate. Ngăn này cho phép người dùng gõ và
chạy code thử nghiệm. Ta sẽ sử dụng ngăn này để đọc hoặc đổi tên Slide/Shape. Mỗi lệnh trong ngăn này nằm trên 1 dòng, khi nhấn Enter sẽ thực hiện lệnh đó. Ví dụ gõ vào
msgbox "Hello" sau khi Enter sẽ xuất hiện thông báo với chuỗi “Hello”.
Bước 3: Gõ vào một trong các lệnh sau để thực hiện nhiệm vụ tương ứng.
Nhiệm vụ Code
Đọc tên Slide debug.print ActiveWindow.View.Slide.Name
Đổi tên Slide ActiveWindow.View.Slide.Name = "Hello"
Đọc tên Shape debug.print ActiveWindow.Selection.ShapeRange.Name
Đổi tên Shape ActiveWindow.Selection.ShapeRange.Name = "TenShape"
Bảng 5.1: Đọc/đổi tên Slide/Shape Truy xuất đến Slide/Shape
Giả sử một Shape có tên là “Title 1” và nằm trên Slide tên “Hello” ta sẽ truy xuất đến Slide/Shape thông qua đoạn code sau:
Loại Code
Slide ActivePresentation.Slides("Hello")
Shape ActivePresentation.Slides("Hello").Shapes("Title 1")
Bảng 5.2: Truy xuất đến Slide/Shape
Muốn thay đổi hay gọi các thuộc tính/phương thức của Slide/Shape chỉ cần truy xất đến Slide/Shape sau đó thêm dấu chấm VBA sẽ hiện hộp thoại cho bạn chọn.
Ví dụ 5.1: Xem tọa độ bên trái của Shape:
debug.print ActivePresentation.Slides("Hello").Shapes("Title 1").Left
Ví dụ 5.2: Quay Shape 45 độ:
ActivePresentation.Slides("Hello").Shapes("Title 1").IncrementRotation 45
Ví dụ 5.3: Lật shape theo chiều dọc
Bài 05: Slide & Shape Xây dựng bài trình chiếu tương tác bằng Powerpoint
Viết Macro cho Shape
Macro thật ra là một đoạn code nhằm thực hiện cơng việc nào đó. Để tạo Macro cho Shape ta thực hiện như sau:
Bước 1: Nhấn ATL + F11 để mở cửa sổ Visual Basic, Từ Menu Insert, chọn Insert Module.
Module mặc định được tạo ra là module1, có thể tạo bao nhiêu module tùy ý tuy nhiên thường chỉ cần viết trên 1 module là đủ. Code viết trên Module có thể được gọi từ bất kỳ đâu, trên bất kỳ slide nào.
Bước 2: Từ Menu Insert chọn Procedure, đặt tên cho thủ tục và nhấn OK để chèn một thủ
tục mới. Thủ tục này được gọi là Macro. Sau đó viết code cho macro.
Bước 3: Quay về cửa sổ thiết kế:
Đối với PowerPoint 2003: Click phải vào Shape muốn gán Macro, chọn Action Settings,
chọn Run Macro và chọn tên Macro cần thực hiện.
Đối với PowerPoint 2007: Chọn Shape cần gán Macro, click vào nút Action trong ngăn Insert, chọn Run Macro và chọn tên Macro cần thực hiện.
Điều hướng Slide
Thông thường nếu chỉ muốn di chuyển giữa các Slide, ta chỉ cần chèn Shape sau đó mở hộp
thoại Action Settings như ở phần trên, trong phần Hyperlink To chọn Slide muốn chuyển
tới khi click vào Shape.
Tuy nhiên đôi chúng ta muốn tùy thuộc vào điều kiện nào đó mà sẽ chuyển đến Slide thích hợp (người dùng trả lời đúng/sai), hoặc thực hiện cơng việc nào đó trước khi chuyển tới Slide khác (cộng dồn điểm, khởi tạo giá trị…) khi đó chúng ta phải viết Macro để chuyển Slide. Dưới đây là một số mã lệnh để chuyển Slide.
Di chuyển Code
Chuyển đến slide thứ i ActivePresentation.SlideShowWindow.View.GotoSlide(i)
Slide đầu tiên ActivePresentation.SlideShowWindow.View.First
Slide cuối ActivePresentation.SlideShowWindow.View.Last
Slide liền trước ActivePresentation.SlideShowWindow.View.Previous
Slide liền sau ActivePresentation.SlideShowWindow.View.Next
Kết thúc trình chiếu ActivePresentation.SlideShowWindow.View.Exit
Bảng 5.3: Điều hƣớng Slide Thay đổi nội dung Text bên trong Shape
Cấu trúc chung:
Bài 05: Slide & Shape Xây dựng bài trình chiếu tương tác bằng Powerpoint
Ví dụ 5.4: Thay đổi giá trị cho Shape “hoten” trên slide “user” giá trị bằng “Nguyen Van A”
ActivePresentation.Slides("user").Shapes("hoten").TextFrame.TextRange.Text ="Nguyen Van A"
Các ứng dụng thực tiễn của shape
Ví dụ 5.5: Xây dựng đồng hồ bằng Shape. Kết quả của ví dụ này là một đồng hồ Analog, cho phép người dùng chạy hoặc dừng.
Ý tƣởng: Đối tượng Shape có thuộc tính
Rotation, thuộc tính này mang giá trị từ (0-
360), cho phép Shape quay xung quanh điểm giữa của Shape. Nhờ đặc điểm này ta dùng để thực hiện bài tập này.
Hƣớng dẫn chi tiết:
Bước 1: Vẽ 1 hình trịn làm khung đồng hồ.
Bước 2: Tạo kim đồng hồ. Vì Shape chỉ quay quanh tâm của nó nhưng kim đồng hồ lại
khơng quay quanh tâm. Chính vì vậy ý tưởng đơn giản nhất là group kim đồng hồ với một hình trịn có kích thước bằng hình trịn ở bước 1. Cần chú ý bỏ đường viền và cho hình trịn này trong suốt trước khi group. Lần lượt tạo ra kim giờ, kim phút và kim giây. (Chú ý nên làm kim đứng thẳng xem như đang ở 0 độ).
Bước 3: Lần lượt đặt tên cho các group là KimGio, KimPhut, KimGiay. Đặt tên cho Slide là
clock. Tạo Button đặt tên là btnStart để bật/tắt đồng hồ.
Bước 4: Cần lưu ý 1 phút tương đương với 6 độ, 1 giây tương đương với 6 độ, 1 giờ tương
ứng với 30 độ (vì vậy phải sử dụng hàm làm trịn). Chính vì vậy nếu có được giây hiện tại ta cho KimGiay quanh 1 góc (SoGiay*6), tương tự cho kim phút, riêng kim giờ ngoài việc quay 1 góc (giờ*30) cịn phải cộng thêm một góc do phút tạo ra (SoPhut/2) (vì 1 giờ tương đương 30 độ, cũng có nghĩa 60 phút tương đương 30 độ vì vậy mới có kết quả là SoPhut/2).
Bước 5: Khi người dùng bật đồng hồ, cứ mỗi giây ta cập nhật lại góc quay của các kim. Ở
đây có sử dụng vịng lặp dạng While <điều kiện> {các lệnh} Wend. Có nghĩa
là trong khi <điều kiện> đúng sẽ thực hiện các lệnh.
Vì việc cập nhật giờ bao gồm nhiều lệnh trong đó nên ta viết riêng một thủ tục CapNhatGio
để cập nhật lại góc của các kim đồng hồ.
Bài 05: Slide & Shape Xây dựng bài trình chiếu tương tác bằng Powerpoint
Sub CapNhatGio()
Dim gio, phut, giay As Integer gio = Hour(Now) Mod 12
phut = Minute(Now) giay = Second(Now)
'1 giay tuong duong voi 6 do
ActivePresentation.Slides("user").Shapes("KimGiay").Rotation = giay * 6
'1 phut tuong duong voi 6 do
ActivePresentation.Slides("user").Shapes("KimPhut").Rotation= phut * 6
'1h tuong duong voi 30 do
ActivePresentation.Slides("user").Shapes("KimGio").Rotation=gio*30+Round(phut/2)
End Sub
Private Sub btnStart_Click()
If (btnStart.Caption = "Run Clock") Then btnStart.Caption = "Stop Clock" Else
btnStart.Caption = "Run Clock" End If
While (btnStart.Caption = "Stop Clock") CapNhatGio
Dim PauseTime, Start, Finish
' Gán thoi gian cho la 1 giay
PauseTime = 1
'Lay thoi diem hien tai
Start = Timer
'Tao vong lap trong khi chua het thoi gian cho
Do While Timer < Start + PauseTime
' Chuyen quyen quan ly cho he thong trong khi lap
DoEvents Loop
Wend
End Sub
Ví dụ 5.6: Xây dựng Slide thu thập ý kiến bằng Shape. Kết quả của ví dụ này là slide cho phép người dùng nhập ý kiến vào Text Box, khi bấm nút Add sẽ thêm nội dung vào Shape ở trên. Bấm Reset sẽ thu thập ý kiến từ đầu.
Ý tƣởng: Dùng thuộc tính
.TextFrame.TextRange.Text của Shape.
Bài 05: Slide & Shape Xây dựng bài trình chiếu tương tác bằng Powerpoint
Hƣớng dẫn chi tiết:
Bước 1: Chèn một Text Shape có dạng như hình 5.3 đặt tên là YKien, Slide có tên là ThuThap, 2 button và 1 text box lần lượt có tên là btnAdd, btnReset và txtAdd.
Bước 2: Khi người dùng bấm nút Add ta đưa nội dung từ txtAdd lên YKien bằng cách nối
chuỗi (&) đồng thời làm rỗng txtAdd, khi người dung bấm Reset ta làm rỗng cả txtAdd và
YKien. Điểm lưu ý ở đây là ký tự xuống dòng chr$(13). Ở đây có sử dụng cấu trúc With
..End With , cấu trúc này cho phép phần code bên trong không cần viết lại đối tượng ở
trên mà chỉ cần dùng dấu “.” để gọi thuộc tính của đối tượng đó.
Private Sub btnAdd_Click()
With ActivePresentation.Slides("ThuThap").Shapes("YKien")
.TextFrame.TextRange.Text = .TextFrame.TextRange.Text & txtAdd.Text & Chr$(13) txtAdd.Text = ""
End With
End Sub
Private Sub btnReset_Click()
ActivePresentation.Slides("ThuThap").Shapes("YKien").TextFrame.TextRange.Text = ""
txtAdd.Text = ""
End Sub
Tóm tắt
Đa số các thành phần trên Powerpoint đều là Shape chính vì vậy việc nắm rõ cách truy xuất đến Shape sẽ làm cho bài trình chiếu trực quan và sinh động hơn.
Tài liệu tham khảo Xây dựng bài trình chiếu tương tác bằng Powerpoint
TÀI LIỆU THAM KHẢO
[1]. Powerful PowerPoint for Educators: Using Visual Basic for Applications to Make PowerPoint Interactive (2004). David M. Marcovitz. Libraries unlimited.
[2]. Microsoft Office PowerPoint 2003 Visual Basic Reference (2003). Microsoft