Viết Macro trong MS PowerPoint

Liên hệ QC

tedaynui

(*_*)
Thành viên danh dự
Tham gia
12/8/06
Bài viết
1,875
Được thích
2,478
Chào các bạn,
Mình muốn viết Macro trong MS Powerpoint, Macro này có tác dụng với mọi File PowerPoint khi được mở ra hoặc đóng lại... giống như Macro trong File Personal.xla (trong thư mục XLStart của Excel) hay Normal.dot (trong MS Word).

Trong MS PowerPoint, mình không biết viết vào chỗ nào và File này được lưu ở thư mục nào ?

Mong được giúp đỡ, Xin chân thành cảm ơn !
TDN
 
Chào các bạn,
Mình muốn viết Macro trong MS Powerpoint, Macro này có tác dụng với mọi File PowerPoint khi được mở ra hoặc đóng lại... giống như Macro trong File Personal.xla (trong thư mục XLStart của Excel) hay Normal.dot (trong MS Word).

Trong MS PowerPoint, mình không biết viết vào chỗ nào và File này được lưu ở thư mục nào ?

Mong được giúp đỡ, Xin chân thành cảm ơn !
TDN
Không biết có thể dùng cách viết 2 sub Auto_OpenAuto_Close và rồi lưu thành Add-In (.ppa) được không nhỉ? Thầy thử chưa?
 
Không biết có thể dùng cách viết 2 sub Auto_OpenAuto_Close và rồi lưu thành Add-In (.ppa) được không nhỉ? Thầy thử chưa?
Em chưa thử, nhưng file .ppa này chép vào thư mục nào (tương tự XLStart) để khi khởi động MS PP thì nó tự Open luôn ???

TDN
 

Em chưa thử, nhưng file .ppa này chép vào thư mục nào (tương tự XLStart) để khi khởi động MS PP thì nó tự Open luôn ???

TDN
Nếu đã là Add-In thì chúng nằm cùng thư mục Add-In với Excel luôn, tức
C:\Documents and Settings\User Profiles\Application Data\Microsoft\AddIns
Tiếp theo thầy vào menu Tools\Add-Ins rồi check vào Add-In này thử xem
 
Bác chịu khó cày tiếng Anh nhé (hướng dẫn tạo Template trong PowerPoint):

PowerPoint comes with a gallery of design templates to choose from, but you can also create a template of your own and add it to the Slide Design task pane. Starting from a blank design, you can apply such elements as a background and color scheme, font style, layout (layout: The arrangement of elements, such as title and subtitle text, lists, pictures, tables, charts, AutoShapes, and movies, on a slide.), and art.

1. On the Standard toolbar, click New Button image.

If this or any other toolbar mentioned later in this procedure isn't visible, on the View menu, point to Toolbars, and then click the toolbar that you want to display.
2. Switch to master view by pointing to Master on the View menu, and then clicking Slide Master.
3. Make the changes that you want to the slide master (slide master: The slide that stores information about the design template applied, including font styles, placeholder sizes and positions, background design, and color schemes.):
* To change the background, on the Format menu, click Background, make selections in the dialog box, and then click Apply. If you have inserted a title master and want the changes to apply to it, too, click Apply to All.
* To work with color schemes, on the Format menu, click Slide Design, and then, in the Slide Design task pane, click Color Schemes. The color scheme that is currently applied will be selected. Click any other scheme to apply it.

To change the color scheme, click Edit Color Schemes at the bottom of the task pane, and then make the changes that you want.
* To change fonts or other font options, click the text or the placeholder containing the text (such as footers). On the Format menu, click Font, and then make your selections in the Font dialog box.

Note You can change font color for title and body text as part of the color cheme.
* To insert a picture or to add a shape or text box, use the buttons on the Drawing toolbar.
* To move a placeholder, click it to select it, and then point to the placeholder border. When the pointer becomes a four-headed arrow, drag the placeholder to a new location.
* To resize a placeholder, click it to select it, and then point to a sizing handle. When the pointer becomes a double-headed arrow, drag the sizing handle.
4. If you want additional slides to be part of this template, click the Normal View Button image button in the lower-left of the window, and then add the slides and any text that you want on them.
5. On the File menu, click Save As.
6. In the File name box, type a name for your template, and then, in the Save as type box, click Design Template.
7. Click Save.

The template is saved to the Templates folder. (This is the folder that PowerPoint uses by default when you select Design Template as the file type in the Save As dialog box.)

After you exit and restart PowerPoint, the template is available in the Slide Design task pane, in alphabetical order by file name, under Available For Use. Also, after you apply the template once, save your presentation, and restart PowerPoint, the template appears in the New Presentation task pane (File menu, New) under Recently used templates.
 
Cám ơn bác Hướng, nhưng không phải vậy; cách của Hướng là tạo Slide Master rồi lưu lại thành file Template. Ý mình là muốn viết Macro giống như viết trong File Personal.xla vậy.

Có lẽ dùng AddIn như cách của Anh Tuấn là khả thi. Em thử xem.
TDN
 
Cám ơn bác Hướng, nhưng không phải vậy; cách của Hướng là tạo Slide Master rồi lưu lại thành file Template. Ý mình là muốn viết Macro giống như viết trong File Personal.xla vậy.

Có lẽ dùng AddIn như cách của Anh Tuấn là khả thi. Em thử xem.
TDN

Thì bác tạo macro trong file Template đó, khi mở PP ra thì chọn, chẳng nhẽ không được à?
 
Thì bác tạo macro trong file Template đó, khi mở PP ra thì chọn, chẳng nhẽ không được à?
Mình thử rồi, không được. Hic hic

Ví dụ cụ thể : Mình muốn tạo 1 macro, sao cho mỗi khi đóng bất kì File PP nào lại thì tự động nó Backup File PP đó vào 1 ổ đĩa khác.

TDN
 

Mình thử rồi, không được. Hic hic

Ví dụ cụ thể : Mình muốn tạo 1 macro, sao cho mỗi khi đóng bất kì File PP nào lại thì tự động nó Backup File PP đó vào 1 ổ đĩa khác.

TDN

Với cách khác anh đã làm được đúng ý chưa? Hay nó đang vướng mắc ở khâu nào?
 
Với cách khác anh đã làm được đúng ý chưa? Hay nó đang vướng mắc ở khâu nào?
Cảm ơn Tuân. Mình thử mọi cách nhưng không có cách nào thực hiện được ý muốn. Đó là : Mỗi khi đóng bất kì 1 file PP nào lại thì File đó tự động được lưu thành 1 bản sao ở 1 thư mục khác trên ổ đĩa (cái này Word hay Excel thì rất đơn giản)

Mong được hướng dẫn. Cám ơn các bạn đã quan tâm !
TDN
 

Cảm ơn Tuân. Mình thử mọi cách nhưng không có cách nào thực hiện được ý muốn. Đó là : Mỗi khi đóng bất kì 1 file PP nào lại thì File đó tự động được lưu thành 1 bản sao ở 1 thư mục khác trên ổ đĩa (cái này Word hay Excel thì rất đơn giản)

Mong được hướng dẫn. Cám ơn các bạn đã quan tâm !
TDN

Viết code cho Events trong PP hình như hơi lằng nhằng 1 chút ---> Thầy tham khảo trang này xem:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=327
Có file ví dụ luôn đấy
 
Auto run Powerpoint


Cảm ơn Tuân. Mình thử mọi cách nhưng không có cách nào thực hiện được ý muốn. Đó là : Mỗi khi đóng bất kì 1 file PP nào lại thì File đó tự động được lưu thành 1 bản sao ở 1 thư mục khác trên ổ đĩa (cái này Word hay Excel thì rất đơn giản)

Mong được hướng dẫn. Cám ơn các bạn đã quan tâm !
TDN

Bài toán của anh dù làm là Excel, Word, Powerpoint (PPT) hay bất cứ cái gì sẽ không thể làm được nếu như không dùng Class Module. Sử dụng Class Module ta sẽ lấy được events của đối tượng và viết mã bên trong nó.

Quy trình thực hiện như sau:

Tạo một file PPT, nhấn ALT+F11 vào môi trường VBE.

1) Tạo một Class Module, đặt tên là clsPPTApp và viết code như sau

Mã:
Private WithEvents mApp As Application
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Private Sub Class_Initialize()
    If mApp Is Nothing Then
        Set mApp = Application
    End If
End Sub
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Private Sub Class_Terminate()
    Set mApp = Nothing
End Sub
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Private Sub mApp_PresentationOpen(ByVal Pres As Presentation)
    MsgBox Pres.Name, vbInformation, "Open"
    [COLOR="DarkGreen"]'Do something when opening[/COLOR]
End Sub
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Private Sub mApp_PresentationClose(ByVal Pres As Presentation)
    MsgBox Pres.Name, vbInformation, "Close"
    [COLOR="DarkGreen"]'Do something when closing[/COLOR]
End Sub

2) Tạo một Module, viết code như sau
Mã:
Dim mPPTApp As clsPPTApp [COLOR="DarkGreen"]'Tên của Class  được đặt tên ở 1)[/COLOR]
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Sub Auto_Open()
    If mPPTApp Is Nothing Then
        Set mPPTApp = New clsPPTApp
    End If
End Sub
[COLOR="DarkGreen"]'-------------------------------------------------------------------------[/COLOR]
Sub Auto_Close()
    Set mPPTApp = Nothing
End Sub

Với bài toán của anh, hãy tập trung viết code trong Class Module clsPPTApp ở hai thủ tục sự kiện là: mApp_PresentationOpen, mApp_PresentationClose

b3) Sau khi viết code đã hoàn tất hãy lưu file này ở dạng Add-In (ppa, ppam (PPT 2007)).

b4) Cài đặt file Add-In cho PPT. Quy trình cài đặt Add-In giống như làm với Excel.
Lưu ý: file add-in sẽ không nhìn thấy code, nếu cần sửa lại code thì phải mở file gốc (*.ppt) chỉnh sửa rồi lại lưu lại ở dạng add-in.


Anh làm theo đúng quy trình gồm 4 bước trên là được. Anh tham khảo file gửi kèm.
 

File đính kèm

  • AutoRun_TuanVNUNI.zip
    33.9 KB · Đọc: 75
Lần chỉnh sửa cuối:
Bài toán của anh dù làm là Excel, Word, Powerpoint (PPT) hay bất cứ cái gì sẽ không thể làm được nếu như không dùng Class Module. Sử dụng Class Module ta sẽ lấy được events của đối tượng và viết mã bên trong nó.
.
Word thì tôi chưa biết, PP ta dùng Class Module thì đúng rồi (đường link ở trên người ta cũng dùng Class Module đấy thôi)...
Thế còn Excel thì sao ta? Ta có thể dùng Auto_Close, mình nghĩ cứ viết code bình thường thôi, đâu có vấn đề gì chứ
 
Lần chỉnh sửa cuối:
Word thì tôi chưa biết, PP ta dùng Class Module thì đúng rồi (đường link ở trên người ta cũng dùng Class Module đấy thôi)...
Thế còn Excel thì sao ta? Excel tự thân nó đã có sự kiện Workbook_BeforeClose, mình nghĩ cứ viết code bình thường thôi, đâu có vấn đề gì chứ

Vâng, trong Excel thì họ đã cấp cho ta các sự kiện trong mỗi Workbook, Worksheet. Nếu anh viết code trong một file thì code chỉ chạy cho chính file này thôi. Một file bất kỳ của người dùng (không có code) sẽ không thể chạy sự code của mình được.

Ví dụ anh viết code trong các sự kiện Open, Close,...cho file Excel đặt tên là ndu.xls. Khi mở file ndu.xls thì code trong các sự kiện Open, Close sẽ chạy. Bây giờ mở một file Excel bất kỳ khác và anh cũng muốn nó tự động chạy các sự kiện Open, Close như trong ndu.xls nhưng không phải viết code, vì thực tế có hàng trăm file dữ liệu chẳng lẽ phải viết code cho cả trăm files. Nếu không dùng Class Module sẽ không thực hiện được, trừ khi phải viết code cho cả trăm file.

Auto_Open, Auto_Close là chỉ chạy cho file chứa code thôi.

Đường link anh gửi lên cũng là dùng Class Module nhưng tác giả viết Class không được hiệu quả, dẫn tới lãng phí bộ nhớ, không ứng dụng được tối đa các đặc tính của Class.
 
Lần chỉnh sửa cuối:
Vâng, trong Excel thì họ đã cấp cho ta các sự kiện trong mỗi Workbook, Worksheet. Nếu anh viết code trong một file thì code chỉ chạy cho chính file này thôi. Một file bất kỳ của người dùng (không có code) sẽ không thể chạy sự code của mình được.

Ví dụ anh viết code trong các sự kiện Open, Close,...cho file Excel đặt tên là ndu.xls. Khi mở file ndu.xls thì code trong các sự kiện Open, Close sẽ chạy. Bây giờ mở một file Excel bất kỳ khác và anh cũng muốn nó tự động chạy các sự kiện Open, Close như trong ndu.xls nhưng không phải viết code, vì thực tế có hàng trăm file dữ liệu chẳng lẽ phải viết code cho cả trăm files. Nếu không dùng Class Module sẽ không thực hiện được, trừ khi phải viết code cho cả trăm file.

Auto_Open, Auto_Close là chỉ chạy cho file chứa code thôi.
Làm gì có chứ
Bạn xem code này;
PHP:
Sub Auto_Close()
   ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Format(Now, "yyyymmdd - hhmmss") & "-" & ActiveWorkbook.Name
End Sub
Hãy save nó thành xla rồi load AddIn này luôn ---> Giờ mở file nào nó cũng lưu tất
Tôi vừa thử xong!
 
Lần chỉnh sửa cuối:
Để có thể chỉnh sửa file Add-Ins *.ppa giống như Excel thì làm như sau:


  1. Đóng PowerPoint lại và vào Start | Run | Regedit.exe, nhấn OK
  2. Tìm đến khoá HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\PowerPoint\Options (Thay 11.0 bằng phiên bản PowerPoint đang sử dụng: PowerPoint 2003 là 11.0, PowerPoint 2007 là 12.0 và PowerPoint 2010 là 14.0)
  3. Tìm khoá 'DebugAddins' và gán giá trị của DWORD là 1 (nếu không có khoá này thì tạo khoá mới)
  4. Chạy PowerPoint, mở file Add-Ins và nhấn Alt+F11 để xem/ hiệu chỉnh mã (lưu ý nếu Add-Ins có mật mã bảo vệ thì cũng mở tương tự như Excel).
Trang web sau có nhiều bài viết hay về PowerPoint cũng như VBA trong PowerPoint mời các bạn tham khảo:
http://skp.mvps.org/index.html

Thân,

TP.
 
Lần chỉnh sửa cuối:
Làm gì có chứ
Bạn xem code này;
PHP:
Sub Auto_Close()
   ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Format(Now, "yyyymmdd - hhmmss") & "-" & ActiveWorkbook.Name
End Sub
Hãy save nó thành xla rồi load AddIn này luôn ---> Giờ mở file nào nó cũng lưu tất
Tôi vừa thử xong!

Anh có sự nhầm gì đó. Code Auto_Open và Auto_Close viết trong file Add-In thì nó sẽ chỉ chạy chi file Add-In này đóng và mở mà thôi. Khi anh test chắc là đóng chương trình Excel nên cái add-in này nó đóng theo và chạy, khi nó anh dùng cái ActiveWorkbook thì nó chỉ thông báo cái Workbook đang mở hiện thời mà thôi.

Anh test thế này nhé
1) Mở Excel, hay chương trình nào đó của Office
2) Mở các file dữ liệu xem Auto_Open có chạy không nhé
3) Đóng một file bất kỳ trong số các file đang mở xem Auto_Close có chạy không nhé
4) Đang mở các file (ít nhất 2 file) đóng Excel (Alt + F4/ File-> Exit) xem có đúng là nó chạy Auto_Close không nhé, vì file add-in bây giờ đóng mà.

Để cho mọi người cùng test, tôi gửi file Excel Add-In lên đây.
 

File đính kèm

  • TestAutoRunInExcel.zip
    4.5 KB · Đọc: 17
Anh có sự nhầm gì đó. Code Auto_Open và Auto_Close viết trong file Add-In thì nó sẽ chỉ chạy chi file Add-In này đóng và mở mà thôi. Khi anh test chắc là đóng chương trình Excel nên cái add-in này nó đóng theo và chạy, khi nó anh dùng cái ActiveWorkbook thì nó chỉ thông báo cái Workbook đang mở hiện thời mà thôi.
Không nhầm... Tôi làm như sau:
- Mở file Excel mới và viết code như tôi đã viết ở trên
- Save nó lại thành 1 AddIn (ví dụ là AutoSave.xla)
- Load AddIn này
Từ giờ trở đi, khi tôi mở 1 file bất kỳ (không phải file mới) thì khi đóng file, lập tức nó sẽ Save Backup file ngay!
----------------
Còn code mà Tuân đưa lên là ý định gì? Nó chỉ có cái MsgBox thôi mà!
----------------
Lấy file đính kèm của tôi rồi "quăng" vào thư mục Add-Ins mà test nhé
Excel xưa nay nó vẫn thế cơ mà
 

File đính kèm

  • AutoSave.rar
    5.8 KB · Đọc: 37
Lần chỉnh sửa cuối:
Ah... Ah... Tôi hiểu rồi...
Đóng ActiveWorkbook khác hoàn toàn với đóng toàn bộ Excel
Cảm ơn Tuân!
 
Web KT
Back
Top Bottom