Visual Basic 6.0 を使用して Excel ブックからマクロの名前を取得する方法
概要
この記事では、Visual Basic 6.0 を使用して Excel ブックからマクロの名前を取得する方法について説明します。
要件
次の項目では、推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、スキルと知識、必要なサービス パックについて説明します。
- Excel 2000、Excel 2002、Office Excel 2003、または Office Excel 2007
- Excel マクロ
- Visual Basic for Applications
2 つのマクロを含む Excel ブックを作成する
Excel を起動します。 新しい空のブックが作成されます。
Alt キーを押しながら F11 キーを押して、Visual Basic エディターを起動します。
Project Explorer で ThisWorkbook をダブルクリックして、コード エディターを起動します。
次のコードをコード エディターに 2 つの単純なマクロに貼り付けます。
Option Explicit Sub Macro_A() MsgBox "This is Macro A" End Sub Sub Macro_B() MsgBox "This is Macro B" End Sub
Visual Basic エディターを閉じて、スプレッドシート ビューに戻ります。
Excel 2003 以前のバージョンの Excel では、ブックをC:\Abc.xlsとして保存します。
Excel 2007 で、C:\Abc.xlsm という名前のマクロ対応ブックとしてブックを保存します。
ブックを閉じて Excel を終了します。
ブック内のマクロを一覧表示する Visual Basic アプリケーションを作成する
Visual Basic 6.0 で、新しい Standard EXE プロジェクトを作成します。
[ プロジェクト ] メニューの [ 参照] をクリックします。 [ 参照 ] ダイアログ ボックスで、次の参照を選択します。
- Microsoft Visual Basic for Applications機能拡張 5.3
- Microsoft Excel 2000 の場合: Microsoft Excel 9.0 オブジェクト ライブラリ
- Microsoft Excel 2002 の場合: Microsoft Excel 10.0 オブジェクト ライブラリ
- Microsoft Office Excel 2003 の場合: Microsoft Excel 11.0 オブジェクト ライブラリ
- Microsoft Office Excel 2007 の場合: Microsoft Excel 12.0 オブジェクト ライブラリ
[OK] をクリックします。
フォームにボタンを追加します。 このボタンには、既定の名前 Command1 があります。
フォームにリスト ボックスを追加します。 リスト ボックスには既定の名前 List1 があります。
ボタンのクリック イベント ハンドラー プロシージャを定義します。 この手順では、次のコードを使用して、C:\Abc.xlsで定義されているマクロに関する情報を表示します。
Private Sub Command1_Click() ' Declare variables to access the Excel workbook. Dim objXLApp As Excel.Application Dim objXLWorkbooks As Excel.Workbooks Dim objXLABC As Excel.Workbook ' Declare variables to access the macros in the workbook. Dim objProject As VBIDE.VBProject Dim objComponent As VBIDE.VBComponent Dim objCode As VBIDE.CodeModule ' Declare other miscellaneous variables. Dim iLine As Integer Dim sProcName As String Dim pk As vbext_ProcKind ' Open Excel, and open the workbook. Set objXLApp = New Excel.Application Set objXLWorkbooks = objXLApp.Workbooks Set objXLABC = objXLWorkbooks.Open("C:\ABC.XLS") ' Empty the list box. List1.Clear ' Get the project details in the workbook. Set objProject = objXLABC.VBProject ' Iterate through each component in the project. For Each objComponent In objProject.VBComponents ' Find the code module for the project. Set objCode = objComponent.CodeModule ' Scan through the code module, looking for procedures. iLine = 1 Do While iLine < objCode.CountOfLines sProcName = objCode.ProcOfLine(iLine, pk) If sProcName <> "" Then ' Found a procedure. Display its details, and then skip ' to the end of the procedure. List1.AddItem objComponent.Name & vbTab & sProcName iLine = iLine + objCode.ProcCountLines(sProcName, pk) Else ' This line has no procedure, so go to the next line. iLine = iLine + 1 End If Loop Set objCode = Nothing Set objComponent = Nothing Next Set objProject = Nothing ' Clean up and exit. objXLABC.Close objXLApp.Quit End Sub
サンプルをテストする
- アプリケーションをビルドして実行します。
- コマンド ボタンをクリックします。 このリスト ボックスには、すべてのマクロの名前と、それらを含むブックが表示されます。ThisWorkbook Macro_A ThisWorkbook Macro_B
トラブルシューティング
Excel 2002、Excel 2003、Excel 2007 のセキュリティの強化により、Excel 2002、Excel 2003、または Excel 2007 を使用すると、Visual Basic プログラムから次のエラー メッセージが表示される場合があります。Visual Basic Project へのプログラムによるアクセスは信頼できません。
この問題とその解決方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。
282830 PRB: Office XP VBA プロジェクトへのプログラムによるアクセスが拒否される
関連情報
詳細については、次の Microsoft Developer Network (MSDN) Web サイトを参照してください。
Visual Studio を使用した Microsoft Office 開発
詳細については、以下の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
219905 Visual Basic から VBA マクロを動的に追加および実行する方法