Excelファイルを開いた後でマクロを実行する必要があり、現在のExcelファイルのPrivate Sub Workbook.open( )ルーチンは空です。Private Sub Workbook.open()が空であることを確認する
ブックを開いた後にこの情報をメモリに保存する方法はありますか。ユーザーがマクロを実行する必要がある場合、この情報は利用可能です。永続的なグローバル変数に沿った何かが理想的です。しかし、可能かどうかは分かりません。
ありがとうございます!
Excelファイルを開いた後でマクロを実行する必要があり、現在のExcelファイルのPrivate Sub Workbook.open( )ルーチンは空です。Private Sub Workbook.open()が空であることを確認する
ブックを開いた後にこの情報をメモリに保存する方法はありますか。ユーザーがマクロを実行する必要がある場合、この情報は利用可能です。永続的なグローバル変数に沿った何かが理想的です。しかし、可能かどうかは分かりません。
ありがとうございます!
以下のコード(通常のモジュール内)は、すべてのVBプロジェクトコンポーネント(ThisWorkbook
モジュールを含む)をループし、モジュール名が "ThisWorkbook"であるかどうかを確認します。
「ThisWorkbook」モジュールが見つかると、そのモジュール内のコード行の総数をチェックし、0の場合は空であることをMsgBox
にします。そうでなければ、コード内に "Workbook_Open"という文字列があるかどうかを調べます。存在する場合は、 "Workbook_Open"行と最も近い "End Sub"行の間にあるコードの総数(空でない行)をカウントします。
Check_WorkBookModule_Contentsコード
Option Explicit
Sub Check_WorkBookModule_Contents()
Const PROC_NAME = "ThisWorkbook"
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim i As Long, j As Long, SubLinesCount As Long
Dim ModuleCodeLinesCount As Long
Set VBProj = ActiveWorkbook.VBProject
' loop through all modules, worksheets and other objects in VB Project
For Each VBComp In VBProj.VBComponents
Set CodeMod = VBComp.CodeModule
Debug.Print CodeMod.Name ' <-- for debug
If CodeMod.Name Like PROC_NAME Then ' <-- check if module name is "ThisWorkbook"
' if total of code lines in "ThisWorkbook" module is empty
If CodeMod.CountOfLines = 0 Then
MsgBox CodeMod.Name & " module is empty"
Exit Sub
End If
SubLinesCount = 0 ' reset counter
' loop through all code lines inside current module
For i = 1 To CodeMod.CountOfLines
If Len(CodeMod.Lines(i, 1)) > 0 Then
' if the name of current sub is found within the current code line
If CodeMod.Lines(i, 1) Like "*Workbook_Open*" Then
For j = i + 1 To CodeMod.CountOfLines
If Len(CodeMod.Lines(j, 1)) > 0 And Not CodeMod.Lines(j, 1) Like "End Sub*" Then
SubLinesCount = SubLinesCount + 1
End If
Next j
If SubLinesCount > 0 Then
MsgBox CodeMod & " module, has an event of 'Workbook_Open' , with total of " & SubLinesCount & " lines of code"
Exit Sub
Else
MsgBox CodeMod & " module, has an event of 'Workbook_Open' , but it's empty !"
Exit Sub
End If
End If
End If
Next i
End If
Next VBComp
End Sub
注:
ステップ1:VBプロジェクトのモジュールにアクセスするためには、あなたは以下の2つの手順を実行する必要があります」 VBAプロジェクトオブジェクトモデルへの信頼アクセス ""、開発者>>マクロセキュリティ>>に移動し、VをTに追加しますVBAプロジェクトオブジェクトモデルへの錆のあるアクセス。
ステップ2:
http://www.cpearson.com/excel/vbe.aspx –
が 'かどうかの確認 "5.3アプリケーションの機能拡張のためにのMicrosoft Visual Basic" を追加し、あなたのVBプロジェクトへの参照を追加します。 Workbook_Open() 'がコードを持っているのは、' Workbook_Open() 'が***を実行したかどうかを判断することとは大きく異なります。そこにコードがあるのか、それとも実行されたのかを知る必要がありますか? – Comintern
@ Comintern、いずれにしても良いです。いずれかの解決策がある場合、両方を知ることは素晴らしいことです! – hardish