Bagaimana menjalankan Office macro menggunakan otomatisasi dari Visual C++.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 306686 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual Basic.NET versi ini Pasal, lihat 306682.
Untuk Microsoft Visual C# Versi artikel ini, lihat 306683.
Perbesar semua | Perkecil semua

RINGKASAN

Dengan Microsoft Office otomatisasi, Anda dapat membuka dokumen atau membuat dokumen baru yang berisi Visual Basic for Applications (VBA) makro dan jalankan makro pada jangka waktu. Artikel ini menunjukkan bagaimana memanggil Kantor macro dari Visual C++.NET otomatisasi klien.

INFORMASI LEBIH LANJUT

Berikut contoh otomatisasi klien memanipulasi Server otomatisasi kantor (Access, Excel, PowerPoint atau kata) didasarkan pada Anda pilihan pada formulir. Setelah klien mulai server otomatisasi, membuka dokumen dan kemudian panggilan dua makro. Tidak memiliki makro pertama, DoKbTest, parameter dan makro kedua, DoKbTestWithParameter, mengambil satu parameter jenis String.

Membuat kantor dokumen berisi makro

  1. Membuat dokumen Word yang bernama C:\Doc1.doc. Untuk melakukan hal ini, Ikuti langkah berikut:
    1. Dalam kata, membuat dokumen baru.
    2. Tekan ALT + F11 untuk membuka Visual Basic Editor.
    3. Pada Masukkan menu, klik Modul.
    4. Paste kode makro berikut dalam modul baru:
      'Display a message box that displays the application name.
      Public Sub DoKbTest()
         MsgBox "Hello from " & Application.Name
      End Sub
      
      'Display a message box with the string passed from the
      'Automation client.
      Public Sub DoKbTestWithParameter( sMsg As String )
         MsgBox sMsg
      End Sub
      						
    5. Menutup Editor Visual Basic, Simpan dokumen Word, dan keluar dari Word.
  2. Buat buku kerja Excel yang bernama C:\Book1.xls dengan menggunakan langkah-langkah mirip dengan yang digunakan untuk membuat dokumen Word.
  3. Membuat presentasi PowerPoint yang bernama C:\Pres1.ppt oleh menggunakan langkah-langkah yang mirip yang digunakan untuk membuat kata dokumen.
  4. Buat database akses baru bernama C:\Db1.mdb. Untuk melakukan hal ini, Ikuti langkah berikut:
    1. Pada Masukkan menu, klik Modul.
    2. Paste kode makro dalam modul baru.
    3. Simpan modul dan berhenti akses.

Menciptakan Visual C++.BERSIH klien otomasi

  1. Mulai Microsoft Visual Studio.NET. Pada Berkas menu, klik Baru kemudian klik Project. Pilih Dikelola C++ aplikasiuntuk Visual Studio.NET 2002 atau Konsol aplikasi (.NET) untuk Visual Studio.NET 2003 dari jenis Visual C++ proyek. Nama proyek OfficeMacros dan menciptakan proyek di c: \.
  2. Jika Anda tidak melakukannya, download, menginstal, dan kemudian mendaftar Microsoft Office XP utama Interop Majelis (PIAs).Untuk informasi tambahan tentang Office XP PIAs, klik nomor artikel di bawah ini untuk melihat artikel di Microsoft Basis Pengetahuan:
    328912 INFO: Microsoft Office XP PIAs tersedia untuk di-Download
    Menginstal PIAs di C:\Program Files\Microsoft Visual Studio.NET\Enterprise kerangka atau folder lain yang sama-sama dapat diakses. Mereka juga dapat terdaftar di Cache perakitan Global.
  3. Menambahkan folder di mana Anda menginstal Interop utama Majelis DLL file ke daftar direktori yang dicari untuk memecahkan file referensi yang dilewatkan ke # menggunakan petunjuk. Untuk melakukannya, ikuti langkah-langkah:
    1. Dalam Visual Studio.NET Solusi Explorer panel, klik kanan proyek dan klik Properti.
    2. Di panel kiri Halaman properti kotak dialog, klik C/C ++ folder dan kemudian klik General folder.
    3. Dalam Menyelesaikan # menggunakan referensikotak dialog, menambahkan C: program files Microsoft Visual Studio .NET\Enterprise kerangka jalan, dan kemudian klik Oke. Jika Anda menginstal PIAs di folder yang berbeda, menggunakan penuh Path ke folder itu, sebaliknya.
  4. Buka OfficeMacros.cpp di editor sumber dan menggantikan isi dengan kode berikut:
    // This is the main project file for VC++ application project 
    // generated using an Application Wizard.
    
    #include "stdafx.h"
    
       #using <mscorlib.dll>
    
       #using "Office.dll"
       #using "Microsoft.Office.Interop.word.dll"
       #using "Microsoft.Office.Interop.excel.dll"
       #using "Microsoft.Office.Interop.powerpoint.dll"
       #using "Microsoft.Office.Interop.Access.dll"
       #using "Microsoft.vbe.interop.dll"
    
       using namespace System;
       //using namespace System::Diagnostics;
       using namespace System::Reflection;
       using namespace Microsoft::Office::Core;
       using namespace Microsoft::Office::Interop;
    
       #include <tchar.h>
    
       void PrintMenu();
       void AutoCallAccess();
       void AutoCallExcel();
       void AutoCallPowerPoint();
       void AutoCallWord();
       void CallMacro(Object* oApp, Object* oArgs[]);
    
       int _tmain(void)
       {
       	PrintMenu();
       	String* s = Console::ReadLine();
       	while( !s->ToLower()->Equals(S"q") )
       	{
       		Int32 i;
       		try
       		{
       			i = Convert::ToInt32(s,10);
       		}
       		catch( Exception* e )
       		{
       			goto print;
       		}
    
       		// Select the Office application to automate based on user input.
    
       		switch( i )
       		{
       		case 1:
       			AutoCallAccess();
       			break;
       		case 2:
       			AutoCallExcel();
       			break;
       		case 3:
       			AutoCallPowerPoint();
       			break;
       		case 4:
       			AutoCallWord();
       			break;
       		default:
       			;
       		}
       print:
       		PrintMenu();
       		s = Console::ReadLine();
       	}
       	return 0;
       }
    
       void PrintMenu()
       {
       	Console::WriteLine(S"\n\nEnter the number of the application you'd like to automate.");
       	Console::WriteLine(S"Enter 'q' to quit the application.\n");
       	Console::WriteLine(S"\t\t1. Microsoft Access");
       	Console::WriteLine(S"\t\t2. Microsoft Excel");
       	Console::WriteLine(S"\t\t3. Microsoft PowerPoint");
       	Console::WriteLine(S"\t\t4. Microsoft Word\n");
       	Console::Write(S"\tSelection:");
       }
    
       void AutoCallAccess()
       {
       	try{
       		//Start Access, make it visible, and open C:\Db1.mdb.
       		Console::WriteLine("\nStarting Microsoft Access...");
       		Access::ApplicationClass* pAccess = new Access::ApplicationClass();
       		pAccess->Visible = true;
       		pAccess->OpenCurrentDatabase("c:\\db1.mdb", false, "");
       		//Run the macros.
       		System::Object* oParams[] = {new String("DoKbTest"), 
       			System::Reflection::Missing::Value};
       		CallMacro(pAccess, oParams);
       		oParams[0] = new String("DoKbTestWithParameter");
       		oParams[1] = new String("Hello From Visual C++ .NET (AutoCallAccess)");
       		CallMacro(pAccess, oParams);	
       		//Quit Access and clean up.
            pAccess->get_DoCmd()->Quit(Access::AcQuitOption::acQuitSaveNone);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pAccess);
       		GC::Collect();
       	}
       	catch(Exception* e)
       	{
       		Console::WriteLine(S"Error automating Access...");
       		Console::WriteLine(e->get_Message());
       	}
       }
    
       void AutoCallExcel()
       {
       	try{
       		//Start Excel, make it visible, and open C:\Book1.xls.
       		System::Object* oMissing = System::Reflection::Missing::Value;
       		Console::WriteLine("\nStarting Microsoft Excel...");
            Excel::ApplicationClass* pExcel = new Excel::ApplicationClass();
       		pExcel->Visible = true;
            Excel::Workbooks* pBooks = pExcel->get_Workbooks();
       		Excel::_Workbook* pBook = pBooks->Open("c:\\book1.xls", oMissing, oMissing,
       			oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, 
       			oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
    
       		//Run the macros.
       		System::Object* oParams[] = {new String("DoKbTest"), oMissing};
       		CallMacro(pExcel, oParams);
       		oParams[0] = new String("DoKbTestWithParameter");
       		oParams[1] = new String("Hello From Visual C++ .NET (AutoCallExcel)");
       		CallMacro(pExcel, oParams);
       		//Quit Excel and clean up.
       		pBook->Close(false, oMissing, oMissing);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pBook);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pBooks);
       		pExcel->Quit();
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pExcel);
       		GC::Collect();
       	}
       	catch(Exception* e)
       	{
       		Console::WriteLine(S"Error automating Excel...");
       		Console::WriteLine(e->get_Message());
       	}
       }
    
       void AutoCallPowerPoint()
       {
       	try{
       		//Start PowerPoint, make it visible, and open C:\Pres1.ppt.
       		Console::WriteLine("\nStarting Microsoft PowerPoint...");
       		PowerPoint::ApplicationClass* pPPT = new PowerPoint::ApplicationClass();
            pPPT->Visible =  Microsoft::Office::Core::MsoTriState::msoTrue;
       		
       		PowerPoint::Presentations* pPresSet = pPPT->get_Presentations();
       		PowerPoint::_Presentation* pPres = pPresSet->Open("C:\\pres1.ppt", 
       			MsoTriState::msoFalse, 
       			MsoTriState::msoFalse,
       			MsoTriState::msoTrue);
       		
       		//Run the macros.
       		System::Object* oParams[] = {new String("'pres1.ppt'!DoKbTest"), 
       			System::Reflection::Missing::Value};
       		CallMacro(pPPT, oParams);
       		oParams[0] = new String("'pres1.ppt'!DoKbTestWithParameter");
       		oParams[1] = new String("Hello From Visual C++ .NET (AutoCallPowerPoint)");
       		CallMacro(pPPT, oParams);		
       		//Quit PowerPoint and clean up.
       		pPres->Close();
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pPres);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pPresSet);
       		pPPT->Quit();
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pPPT);
       		GC::Collect();
       	}
       	catch(Exception* e)
       	{
       		Console::WriteLine(S"Error automating PowerPoint...");
       		Console::WriteLine(e->get_Message());
       	}
       }
    
       void AutoCallWord()
       {
       	try{
       		//Start Word, make it visible, and open C:\Doc1.doc.
       		System::Object* oMissing = System::Reflection::Missing::Value;
       		Console::WriteLine("\nStarting Microsoft Word...");
       		Word::ApplicationClass* pWord = new Word::ApplicationClass;
       		pWord->Visible = true;
       		Word::Documents* pDocs = pWord->Documents;
       		System::Object* oFile = new System::Object;
       		oFile = S"c:\\doc1.doc";
       		Word::_Document* pDoc = pDocs->Open(&oFile, &oMissing,
       			&oMissing, &oMissing, &oMissing, &oMissing, &oMissing,
       			&oMissing, &oMissing, &oMissing, &oMissing, &oMissing,
       			&oMissing, &oMissing, &oMissing);
    
       		//Run the macros.
       		System::Object* oParams[] = {new String("DoKbTest"), oMissing};
       		CallMacro(pWord, oParams);
       		oParams[0] = new String("DoKbTestWithParameter");
       		oParams[1] = new String("Hello From Visual C++ .NET (AutoCallWord)");
       		CallMacro(pWord, oParams);		
       		//Quit Word and clean up.
       		pDoc->Close(&oMissing, &oMissing, &oMissing);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pDoc);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pDocs);
       		pWord->Quit(&oMissing, &oMissing, &oMissing);
       		System::Runtime::InteropServices::Marshal::ReleaseComObject(pWord);
       		GC::Collect();
       	}
       	catch(Exception* e)
       	{
       		Console::WriteLine(S"Error automating Word...");
       		Console::WriteLine(e->get_Message());
       	}
       }
    
       void CallMacro(Object* oApp, Object* oArgs[])
       {
       	Console::WriteLine("Calling Macro...");
       	oApp->GetType()->InvokeMember("Run",
       		BindingFlags(BindingFlags::Default | BindingFlags::InvokeMethod),
       		NULL, oApp, oArgs);
    
       }
    					

Menjalankan dan menguji klien otomasi

  1. Tekan F5 untuk membangun dan menjalankan klien otomasi.
  2. Ketika klien berjalan, Anda akan disajikan dengan berikut seleksi:
    Enter the number of the application you'd like to automate.
    Enter 'q' to quit the application.
    
                    1. Microsoft Access
                    2. Microsoft Excel
                    3. Microsoft PowerPoint
                    4. Microsoft Word
    
            Selection:
    					
  3. Pada prompt, ketik 1 dan tekan MASUKKAN. Klien otomasi dimulai akses, menjalankan makro dalam database bahwa Anda dibuat, dan kemudian berhenti akses.
  4. Ulangi langkah sebelumnya untuk mengotomatisasi Excel, PowerPoint dan Kata.
  5. Ketika selesai, ketik q dan tekan Masukkan untuk berhenti klien otomasi.

REFERENSI

Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
303872 Cara membuat Excel makro menggunakan otomatisasi dari Visual C#.NET
177760 VBA: Bagaimana menjalankan makro dalam program Office lainnya
317157 PRB: Kesalahan ketika Anda referensi Perpustakaan jenis akses 10,0 dengan Visual Studio.NET
Untuk informasi lebih lanjut dan sumber daya tentang Office Otomatisasi, kunjungi Website Microsoft berikut:
Microsoft Office Development with Visual Studio
.aspx http://msdn2.Microsoft.com/en-us/library/aa188489 (office.10)

FAQ dan Highlights untuk pengembangan Office
http://support.microsoft.com/ofd

Properti

ID Artikel: 306686 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbautomation kbhowto kbmt KB306686 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:306686

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com