Trong bài viết này, Blog SprinGo sẽ hướng dẫn bạn cách để lọc dữ liệu Excel ngay trong trang trình chiếu Powerpoint.
Bộ lọc Powerpoint
Liệu ta có thể tạo ra một bộ lọc dữ liệu Excel bằng cách sử dụng một trang trình chiếu bất kỳ trong Powerpoint hay không? Câu trả lời là hoàn toàn có thể, bằng cách sử dụng một danh sách hỗn hợp và thêm 1 chút mã lệnh VBA là xong.
Thêm danh sách hỗn hợp vào trang trình chiếu của bạn
Để chèn thêm một danh sách hỗn hợp, bạn cần truy cập thanh tác vụ Developer trong cửa sổ Powerpoint. Trong thanh tác vụ này hãy tìm đến biểu tượng của danh sách hỗn hợp (được bôi đậm như hình dưới). Sau khi bấm vào đó bạn hoàn toàn có thể tự vẽ 1 hình hộp bất kỳ chỉ với con trỏ chuột.
Xem thêm: Tổng hợp các bài viết về Powerpoint
Nạp các giá trị dữ liệu vào trong danh sách hỗn hợp
Tiếc rằng Powerpoint không có khả năng truy cập vào các thiết lập của Form, mà chỉ thiết lập được ActiveX mà thôi. Một ưu điểm của thiết lập Form là việc bạn có thể đồng bộ nội dung form theo các giá trị trang tính của Excel. Hiển nhiên là trong quá trình làm việc với Powerpoint, bạn sẽ không được tiếp xúc với các kiểu lưu trữ dữ liệu theo dạng trang tính, vì thế việc thiết lập Form là không khả thi. Thông qua thiết lập ActiveX, ta phải tự nạp dữ liệu vào danh sách hỗn hợp qua các mã lệnh VBA. Điều đầu tiên phải làm đó là phải tạo ra 1 “sự kiện” để kích hoạt mã lệnh. Giả sử ở đây ta mặc định sự kiện đó là Got Focus (có nghĩa là bất cứ lúc nào hộp hỗn hợp được lựa chọn hoặc được làm nổi trên màn hình hiển thị thì mã lệnh sẽ tự khởi chạy). Nhờ đó các hàm thủ tục sẽ được kích hoạt theo, tạo ra một danh sách hỗn hợp xổ xuống rất nhiều lựa chọn dành cho người dùng.
Private Sub ComboBox1_GotFocus() ‘PURPOSE: Event to capture when a user selects the combo box ‘SOURCE: www.TheSpreadsheetGuru.com
‘Run Macro to populate combo box with values Call AddItemsToComboBox
End Sub
Hàm thủ tục có tên AddItemsToComboBox sẽ có nhiệm vụ nạp dữ liệu vào danh sách hỗn hợp trong cửa sổ Powerpoint. Để tránh tình trạng danh sách hỗn hợp nạp đi nạp lại cùng một dạng dữ liệu nhiều lần (gây mất thời gian), bạn có thể thêm một số điều kiện dạng logic để ngăn nó tự nạp thêm dữ liệu nếu như dữ liệu đó đã có sẵn. Tùy theo thiết lập của từng danh sách hỗn hợp mà bạn sẽ phải tự biến tấu điều kiện logic của mình sao cho phù hợp (chẳng hạn nếu danh sách xổ xuống của bạn có 10 lựa chọn khác nhau, bạn cần điền thêm điều kiện “<10” vào công thức).
Sub AddItemsToComboBox() ‘PURPOSE: Populate a Combo Box with Values if not Already Populated ‘SOURCE: www.TheSpreadsheetGuru.com
If Slide2.ComboBox1.ListCount < 5 Then Slide2.ComboBox1.ListRows = 5 Slide2.ComboBox1.AddItem (“All”) Slide2.ComboBox1.AddItem (“Bob”) Slide2.ComboBox1.AddItem (“John”) Slide2.ComboBox1.AddItem (“Ben”) Slide2.ComboBox1.AddItem (“Sally”) End If
End Sub
Truy xuất dữ liệu từ Excel
Và giờ là đến phần mã lệnh. Tiếp theo ta cần phải truy xuất dữ liệu đã được lọc từ tệp Excel gốc. Lệnh này sẽ được khởi động bởi hàm Change, có nghĩa là toàn bộ mã lệnh sẽ khởi chạy một khi người dùng thay đổi giá trị của danh sách hỗn hợp. Cụ thể, đoạn mã lệnh sẽ xử lý các thao tác như sau:
- Mở tệp Excel gốc lên
- Lọc dữ liệu dựa trên thiết lập mà người dùng đã đặt sẵn trên danh sách hỗn hợp
- Thay ảnh đại diện của trang trình chiếu bằng 1 hình ảnh khác đã được lọc qua
- Đóng tệp Excel lại (và không sao lưu nội dung)
- Căn chỉnh lại kích cỡ ảnh minh họa mới dựa trên thông số của ảnh cũ
Private Sub ComboBox1_Change() ‘PURPOSE: Bring Filtered Excel Data into PowerPoint Presentation ‘SOURCE: www.TheSpreadsheetGuru.com
Dim wb As Object Dim tbl As Object Dim ExcelApp As Object Dim sld As Slide Dim ComboBx As Shape, NewShape As Shape, OldShape As Shape Dim myCriteria As String, ExcelFilePath As String Dim ComboBoxName As String, DataImageName As String Dim ExcelTableName As String, TableSheet As String Dim SlideNumber As Long
‘Input Values ExcelFilePath = “C:\Users\chris\Desktop\Data.xlsm” SlideNumber = 2 ComboBoxName = “ComboBox1” DataImageName = “SalesData” ExcelTableName = “Table1” TableSheet = “Sheet1” ‘Store Object Variables Set sld = ActivePresentation.Slides(SlideNumber) Set ComboBx = sld.Shapes(ComboBoxName)
‘Create an Instance of Excel On Error Resume Next ‘Is Excel already opened? Set ExcelApp = GetObject(class:=”Excel.Application”) ‘Clear the error between errors Err.Clear
On Error GoTo 0
‘Open Excel File Set wb = ExcelApp.Workbooks.Open(ExcelFilePath)
‘Determine User Selection myCriteria = ComboBx.OLEFormat.Object.Value
‘Filter on select item Set tbl = wb.Worksheets(TableSheet).ListObjects(ExcelTableName)
If myCriteria = “All” Then tbl.Range.AutoFilter Field:=1 Else tbl.Range.AutoFilter Field:=1, Criteria1:=myCriteria End If ‘Copy/Paste Data tbl.Range.Copy
Liệt kê các biến số
Để giúp bạn có thể hiểu được cơ chế hoạt động của mã lệnh, hãy tham khảo đoạn clip ở đây trong đó hướng dẫn bạn cách để thiết lập tệp Powerpoint và Excel sao cho chúng hoạt động hòa hợp với nhau. Đoạn clip cũng sẽ hướng dẫn cách liệt kê biến số cũng như các giá trị quan trọng cần thiết để macro có thể hoạt động được, tùy theo mục đích sử dụng của bạn
Liệu có lỗi xảy ra ở Powerpoint?
Lưu ý rằng đôi khi bạn sẽ thấy trong Powerpoint xuất hiện một lỗi nhỏ trong quá trình chạy lệnh VBA. Khi khởi động trang trình chiếu Powerpoint và lần đầu click chọn danh sách hỗn hợp, hộp sẽ có hình dạng như sau:
Tuy vậy, kể từ lần click chọn thứ hai trở đi, miễn là cửa sổ Powerpoint còn hoạt động thì danh sách hỗn hợp sẽ xổ xuống và hoạt động bình thường trở lại, như hình minh họa dưới đây:
Tìm hiểu thêm: Học lập trình VBA trong Excel ở đâu?










Bình luận