Excel2000 VBA アクティブブックのプロシージャ名一覧を表示選択してVBEを開く実験 [Excel2000 VBA独習]
Excel2000 VBA アクティブブックのプロシージャ名一覧を表示選択してVBEを開く実験
Sub workbookのプロシージャ一覧()
'ユーザーフォームのリストボックスに
'アクティブブックのプロシージャ名一覧を表示
'プロシージャを選択してVBEを起動
'事前にユーザーフォームを作成
'参考にしたサイト
'http://www.officetanaka.net/excel/vba/vbe/05.htm
On Local Error Resume Next 'エラーが出るのでエラーが出ても実行
Dim buf, book_name 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
'Workbookのモジュール数を調べる 数が合わないような・・・
VBcop_count = ActiveWorkbook.VBProject.VBComponents.Count
'モジュール名取得
For Each moduleName In ActiveWorkbook.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 ActiveWorkbook.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
'---- フォームにプロシージャ一覧を表示 ----
'一行目に項目名を設定
UserForm3.ListBox1.AddItem ActiveWorkbook.Name
UserForm3.ListBox1.AddItem " "
UserForm3.ListBox1.AddItem "モジュール名 プロシージャ名"
UserForm3.ListBox1.AddItem " "
For i = 1 To cou
UserForm3.ListBox1.AddItem procNames(i)
UserForm3.ListBox1.AddItem " "
Next i
'フォーム表示
UserForm3.Show vbModeless 'モードレスで開くフォームを表示後でも、 他の処理が出来る
End Sub
「選択マクロを編集」 ボタンが押されたら
Private Sub CommandButton1_Click()
'選択テキストからマクロ名を調べてVBEで開く
On Error Resume Next
Dim strText, book_name As String
Dim strL, i, endP As Integer
strText = ListBox1.text
strL = Len(strText)
For i = 1 To strL
If Mid(strText, i, 1) = vbTab Then endP = i
Next i
strText = Right(strText, strL - endP)
'マクロ名からVBEへ移動'追記 一応VBEはstrTextで指定したプロシージャ名のところで開くが、ユーザーフォームを閉じないと編集できない。 追記 モードレスで開けばVBEの編集可能
'ユーザーフォームを閉じるとVBEでユーザーフォームが表示されてしまう、これではまずいのでuserform3.hideにしてみたところ編集できるようになった。がhideで見えなくしただけなので?これでいいのか疑問?
'UserForm3.Hide
book_name = ActiveWorkbook.Name
Workbooks(book_name).Activate
Application.Goto Reference:=strText
End Sub
「終了」ボタンが押されたら
Private Sub CommandButton2_Click()
Unload UserForm3 Me
End Sub
コメント 0