SSブログ

Excel2000 VBA PERSONAL.XLSのプロシージャ名一覧を表示選択しVBEを開く実験 [Excel2000 VBA独習]

Excel2000 VBA  PERSONAL.XLSのプロシージャ名一覧を表示選択しVBEを開く実験

excel_VBE.jpg

ポイントはユーザーフォームを開くときにモードレスで開く
PERSONAL.XLSをアクティブにして、Application.Goto Reference:=プロシージャ名 でVBE(VBエディター)を開く

Sub プロシージャ名一覧リストボックス()
'このマクロをPERSONAL.XLSの標準モジュールに記載
'ユーザーフォームのリストボックスに一覧を表示
'事前にユーザーフォームを作成
'参考にしたサイト
'http://www.officetanaka.net/excel/vba/vbe/05.htm


On Local Error Resume Next  'エラーが出るのでエラーが出ても実行
    Dim buf As String
    Dim procNames(100) As String
    Dim i, j, p, cou As Long
    Dim x As Long
    Dim moduleName, z As Variant
    Dim mN(20) As String
    Dim VBcop_count As Integer
    Dim moji, moji_1 As Variant

'ThisWorkbookのモジュール数を調べる 数が合わないような・・・
    VBcop_count = ThisWorkbook.VBProject.VBComponents.count
   
'モジュール名取得
    For Each moduleName In ThisWorkbook.VBProject.VBComponents
        If (moduleName.Type = 1 Or moduleName.Type = 2) And moduleName.Name <> "VBE" Then
        i = i + 1
        mN(i) = moduleName.Name
        'Debug.Print mN(i)
        End If
    Next
'プロシージャ名取得
    For x = 1 To VBcop_count
       
    With ThisWorkbook.VBProject.VBComponents(mN(x)).CodeModule
       ' Debug.Print mN(x)
        For i = 1 To .CountOfLines
            If buf <> .ProcOfLine(i, 0) Then
            buf = .ProcOfLine(i, 0)
            procNames(j) = mN(x) & vbTab & buf
            'Debug.Print procNames(j)
            j = j + 1
            cou = cou + 1  'プロシージャ数
            End If
        Next i
    End With
    Next x

'----  フォームにプロシージャ一覧を表示  ----
'1-3行目に項目名を設定
    UserForm4.ListBox1.AddItem "PERSONAL.XLS"
    UserForm4.ListBox1.AddItem "モジュール名  プロシージャ名"
    UserForm4.ListBox1.AddItem " "
        For i = 1 To cou
             UserForm4.ListBox1.AddItem procNames(i)
             UserForm4.ListBox1.AddItem "  "
        Next i
'ユーザーフォームをモードレスで開く(他の作業が出来る)
    UserForm4.Show vbModeless

End Sub



「選択マクロを編集」ボタンが押されたら

Private Sub CommandButton1_Click()
'選択テキストからマクロ名を調べてVBEで開く
'On Error Resume Next
Dim strText As String
Dim strL, i, endP As Integer

'リストボックスから文字列を取得
    strText = ListBox1.Text
'取得した文字列からプロシージャ名を取り出す
    strL = Len(strText)      'モジュール名+vbTab+プロシージャ名
        For i = 1 To strL
            If Mid(strText, i, 1) = vbTab Then endP = i
        Next i
    strText = Right(strText, strL - endP)
'マクロ名からVBEへ移動
    Workbooks("PERSONAL.xls").Activate

    Application.Goto Reference:=strText 'プロシージャ名を指定してVBEに移動

End Sub


「終了」ボタンが押されたら

Private Sub CommandButton2_Click()
'フォームを閉じる
    Unload Me
End Sub
 


タグ:Excel2000 VBA
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。