SSブログ

Excel2000 VBA PERSONAL.XLSのプロシージャ一覧をMsgBoxに表示 [Excel2000 VBA独習]

Excel2000 VBA PERSONAL.XLSのプロシージャ一覧をMsgBoxに表示

参考にしたサイト  http://www.officetanaka.net/excel/vba/vbe/05.htm

MsgBoxでは表示しきれないのでシートに表示する

Sub pasonal_module_procedure_list()
'このマクロをPERSONAL.XLSの標準モジュールに記載
'MsgBoxでは表示しきれないので、新しいシート作成して一覧を表示
'参考にしたサイト
'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) & "," & buf
                'Debug.Print procNames(j)
                j = j + 1
                cou = cou + 1  'プロシージャ数
            End If
        Next i
       
    End With
Next x

'ワークシート作成
Worksheets.Add.Name = "プロシージャ一覧"

'新規に作成したシートに書き込み
For p = 1 To cou                        'procNames 1-cou(おわりまで)
x = 0
    moji = Split(procNames(p), ",")     'カンマ区切り展開
    For Each moji_1 In moji
        Cells(p, 1 + x).Value = moji_1
        x = x + 1
    Next
    'Debug.Print procNames(p)
Next p

End Sub


 

追記 モジュール名を自動取得バージョン 最後のほうが尻切れになる(原因不明)
 MsgBoxには、1 バイト文字で約 1,024 文字制限あり

Sub moduleのプロシージャ名一覧2()
'このマクロをPERSONAL.XLSの標準モジュールに記載
'エラーが出てら、MSGBOXに表示
'参考にしたサイト
'http://www.officetanaka.net/excel/vba/vbe/05.htm

On Error GoTo owari
    Dim buf As String
    Dim ProcNames As String
    Dim i As Long
    Dim x As Long
    Dim moduleName As Variant
    Dim mN(20) As String
    Dim VBcop_count As Integer
   

'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
  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 = ProcNames & mN(x) & vbTab & buf & vbCrLf
            End If
        Next i
             
    End With
Next x
owari:
    MsgBox ProcNames
End Sub

Excel_VBA_COP_2.png

 


 

Sub moduleのプロシージャ名一覧()
'このマクロをPERSONAL.XLSの標準モジュールのmoduleXに記述
'標準Module1-ModuleXをArrayに記述(存在しないModuleを記述するとエラーがでる)
'参考にしたサイト
'http://www.officetanaka.net/excel/vba/vbe/05.htm

    Dim buf As String
    Dim ProcNames As String
    Dim i As Long
    Dim x As Variant
   
    For Each x In Array("Module1", "Module2", "Module3", "Module4", "Module5", "Module6", "Module7", "Module8")
    With ThisWorkbook.VBProject.VBComponents(x).CodeModule  ’ActiveWorkbookのようには出来ない?
       For i = 1 To .CountOfLines
            If buf <> .ProcOfLine(i, 0) Then
                buf = .ProcOfLine(i, 0)
                ProcNames = ProcNames & x & vbTab & buf & vbCrLf
            End If
        Next i
             
    End With
    Next x
    MsgBox ProcNames
End Sub

 Excel_VBA_COP.png

課題 アクティブブックのModule一覧を表示する書き方

 

アクティブbookの Project_VBcomponents数表示

Sub アクティブVBProject.VBComponents数()
Dim book_name As String
Dim VBcop_count As Integer

ActiveSheet.Select
book_name = ActiveWorkbook.Name
VBcop_count = ActiveWorkbook.VBProject.VBComponents.count

MsgBox "ブック名" & vbCrLf + vbCrLf & book_name & vbCrLf + vbCrLf & "プロジェクト・コンポーネントの数" & vbCrLf + vbCrLf & VBcop_count, , "Project VBCop Count"

End Sub


 

Sub アクティブBOOKモジュール一覧()
'
'参考サイト http://oshiete.goo.ne.jp/qa/6371509.html
'

Dim moduleName As Variant
Dim i As Integer
Dim module_name_2 As Variant
Dim book_name As String

book_name = ActiveWorkbook.Name


For Each moduleName In ActiveWorkbook.VBProject.VBComponents
  If (moduleName.Type = 1 Or moduleName.Type = 2) And moduleName.Name <> "VBE" Then
  i = i + 1
  module_name_2 = module_name_2 & vbCrLf & moduleName.Name
  End If
Next

MsgBox book_name & vbCrLf + vbCrLf & module_name_2

End Sub
 

 


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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