次の方法で共有


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 ブックを作成する

  1. Excel を起動します。 新しい空のブックが作成されます。

  2. Alt キーを押しながら F11 キーを押して、Visual Basic エディターを起動します。

  3. Project Explorer で ThisWorkbook をダブルクリックして、コード エディターを起動します。

  4. 次のコードをコード エディターに 2 つの単純なマクロに貼り付けます。

    Option Explicit
    
    Sub Macro_A()
        MsgBox "This is Macro A"
    End Sub
    
    Sub Macro_B()
        MsgBox "This is Macro B"
    End Sub
    
  5. Visual Basic エディターを閉じて、スプレッドシート ビューに戻ります。

  6. Excel 2003 以前のバージョンの Excel では、ブックをC:\Abc.xlsとして保存します。

    Excel 2007 で、C:\Abc.xlsm という名前のマクロ対応ブックとしてブックを保存します。

  7. ブックを閉じて Excel を終了します。

ブック内のマクロを一覧表示する Visual Basic アプリケーションを作成する

  1. Visual Basic 6.0 で、新しい Standard EXE プロジェクトを作成します。

  2. [ プロジェクト ] メニューの [ 参照] をクリックします。 [ 参照 ] ダイアログ ボックスで、次の参照を選択します。

    • 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 オブジェクト ライブラリ
  3. [OK] をクリックします。

  4. フォームにボタンを追加します。 このボタンには、既定の名前 Command1 があります。

  5. フォームにリスト ボックスを追加します。 リスト ボックスには既定の名前 List1 があります。

  6. ボタンのクリック イベント ハンドラー プロシージャを定義します。 この手順では、次のコードを使用して、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
    
    

サンプルをテストする

  1. アプリケーションをビルドして実行します。
  2. コマンド ボタンをクリックします。 このリスト ボックスには、すべてのマクロの名前と、それらを含むブックが表示されます。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 マクロを動的に追加および実行する方法