如何以编程方式确定VBA中Option Base
的当前设置? Option Base
可以设置为0
或1
,这可以确定数组索引是从0
还是1
开始(请参阅MSDN)。
但是,我无法找到任何简单的方法来了解当前的设置。我希望可能有一个Option()
函数,我可以传递参数,如:
Debug.Print Option("Base")
它会告诉我,但它似乎并不存在。
答案 0 :(得分:8)
虽然我同意@jonsharpe,如果您使用的是Lbound(arr)
和Ubound(arr)
,那么您不需要在运行时知道这一点,但我认为这是一个有趣的问题。
首先,正确循环数组的示例。
For i = LBound(arr) To Ubound(arr)
' do something
Next
现在,为了完全 您要求的内容,您需要访问使用VBIDE
库。否则称为“Microsoft Visual Basic for Applications Extensibility”库。它提供对IDE及其代码的访问。您可以使用它来发现是否已声明Option Base 1
。我不建议尝试在运行时执行此操作。这在开发过程中作为一种静态代码分析会更有用。
首先,您需要add a reference to the library和grant the code access to itself。完成后,以下代码应该按照您的意愿执行。
Public Sub FindOptionBase1Declarations()
Dim startLine As Long
startLine = 1
Dim startCol As Long
startCol = 1
Dim endLine As Long
endLine = 1 ' 1 represents the last line of the module
Dim endCol As Long
endCol = 1 ' like endLine, 1 designates the last Col
Dim module As CodeModule
Dim component As VBComponent
For Each component In Application.VBE.ActiveVBProject.VBComponents ' substitute with any VBProject you like
Set module = component.CodeModule
If module.Find("Option Base 1", startLine, startCol, endLine, endCol, WholeWord:=True, MatchCase:=True, PatternSearch:=False) Then
Debug.Print "Option Base 1 turned on in module " & component.Name
' variables are passed by ref, so they tell us the exact location of the statement
Debug.Print "StartLine: " & startLine
Debug.Print "EndLine: " & endLine
Debug.Print "StartCol: " & startCol
Debug.Print "EndCol: " & endCol
' this also means we have to reset them before we look in the next module
startLine = 1
startCol = 1
endLine = 1
endCol = 1
End If
Next
End Sub
有关详细信息,请参阅CodeModule.Find documentation。
如果使用加载项是一个选项,@ Mat'sMug和我的开源项目Rubberduck都有一个Code Inspection,它将在整个活动项目中显示所有这些实例。
答案 1 :(得分:3)
Function GetBaseOption() As Long
Dim arr
arr = Array("a")
GetBaseOption = LBound(arr)
End Sub
答案 2 :(得分:1)
LBound(Array())
...返回当前的 Option Base
设置。
Function optionBase() As Byte
optionBase = LBound(Array())
End Function