Pat*_*rez 4 excel vba excel-vba
我正在编写一个报告工具来记录各种"合规性标准"的Excel文件,包括wkb.VBProject.Protection报告VBA是否被锁定.
但是,如何找到工作簿是否有任何项目?
如果我计算
wkb.VBProject.VBComponents.Count - wkb.Worksheets.Count - 1 '(for the workbook)
Run Code Online (Sandbox Code Playgroud)
这将给我模块+类模块+表单的数量,但我仍然可以在工作表后面有一些代码.
在Excel中有没有办法 - 比如Access frm.HasModule - 找出工作簿中是否有任何VBA代码?
小智 7
Excel 2007+有一个名为".HasVBProject"的新工作簿属性,您可以查询.
对于Excel 2003及更早版本,上述解决方案测试工作簿的任何VBComponent的CodeModule中的代码行是合适的.
您应该单独测试".CountOfLines"属性,因为代码模块的声明部分中的代码行(通过".CountOfDeclarationLines"获得)被Excel视为"宏代码",并且需要保存为启用宏的格式.
Public Function HasVBProject(Optional pWorkbook As Workbook) As Boolean
'
' Checks if the workbook contains a VBProject.
'
On Error Resume Next
Dim wWorkbook As Workbook
Dim wVBComponent As VBIDE.VBComponent ' As Object if used with Late Binding
' Default.
'
HasVBProject = False
' Use a specific workbook if specified, otherwise use current.
'
If pWorkbook Is Nothing _
Then Set wWorkbook = ActiveWorkbook _
Else Set wWorkbook = pWorkbook
If wWorkbook Is Nothing Then GoTo EndFunction
If (VBA.CInt(Application.Version) >= 12) _
Then
' The next method only works for Excel 2007+
'
HasVBProject = wWorkbook.HasVBProject
Else
' Signs the workbook has a VBProject is code in any of the VBComponents that make up this workbook.
'
For Each wVBComponent In wWorkbook.VBProject.VBComponents
If (wVBComponent.CodeModule.CountOfLines > 0) _
Then
' Found a sign of programmer's activity. Mark and quit.
'
HasVBProject = True: Exit For
End If
Next wVBComponent
End If
EndFunction:
Set wVBComponent = Nothing
Set wWorkbook = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
荷兰人
我以前使用以下内容来计算项目中的总行数.它将获取ThisWorkbook代码模块,类模块和表单.
Private Sub countCodeLines()
Dim obj As Object
Dim VBALineCount As Long
For Each obj In ThisWorkbook.VBProject.VBComponents
VBALineCount = VBALineCount + obj.CodeModule.CountOfLines
Next obj
Debug.Print VBALineCount
End Sub
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您的工作簿已Option Explicit强制,则每个对象将计为两行(Option Explicit和换行符).如果您知道这种情况,并且正在从另一个项目检查LOC,那么您可以简单地计算对象的数量,将其加倍并测试VBALineCount不超过此数量.
| 归档时间: |
|
| 查看次数: |
4984 次 |
| 最近记录: |