PERSONAL.XLSのプロシージャ一覧を表示選択しVBEを開く,モジュールコードを出力する実験 Excel2000 VBA [Excel2000 VBA独習]
PERSONAL.XLSのプロシージャ一覧を表示選択しVBEを開く,モジュールコードを出力する実験
Excel2002以降は「Visual Basicプロジェクトへのアクセスを信頼する」チェックボックスをオンにする。
http://officetanaka.net/excel/vba/vbe/01.htm 参照
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 CommandButton3_Click()
'リストボックスで取得したモジュールないコードをTEXT出力
'
On Error Resume Next
Dim strText, book_name, saveD, moduleName As String
Dim strL, i, endP As Integer
Dim MyCodeModule As Object
'選択文字列を取得
strText = ListBox1.Text 'モジュール名+vbTab+プロシージャ名
strL = Len(strText)
For i = 1 To strL
If Mid(strText, i, 1) = vbTab Then endP = i: Exit For
Next i
'vbTabの位置から左側を取得(モジュール名)-1はvbTABを含まないように
moduleName = Left(strText, endP - 1)
'モジュール名からモジュール内のコードをTEXT出力
Open "D:\bk\office\VBA\" & ThisWorkbook.Name & "_" & moduleName & ".txt" For Output As #1
Set MyCodeModule = ThisWorkbook.VBProject.VBComponents(moduleName).CodeModule
If MyCodeModule = "" Then MsgBox "モジュールを取得できませんでした。": Exit Sub
For i = 1 To MyCodeModule.CountOfLines
saveD = saveD & MyCodeModule.Lines(i, 1) & vbCrLf
'Debug.Print saveD
Next i
Print #1, saveD
Close #1
Set MyCodeModule = Nothing
MsgBox "完了"
'ファイルを開く
Dim WSH
Dim URL As String
Set WSH = CreateObject("Wscript.Shell")
WSH.Run "D:\bk\office\VBA\" & ThisWorkbook.Name & "_" & moduleName & ".txt"
Set WSH = Nothing
''エクスプローラを開く
'Dim myFolder As String
''フォルダの設定
' myFolder = ActiveWorkbook.Path
' 'myFolder = "D:\bk\office\"
''エクスプローラの起動(Windows2000 C:\WINNT WindowsXP C:\Windows)
' Shell "C:\WINNT\Explorer.exe " & myFolder, vbNormalFocus
'
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
コメント 0