Chociaż zgadzam się z @jonsharpe, że jeśli używasz Lbound(arr)
i Ubound(arr)
, nie musisz wiedzieć o tym w czasie wykonywania, ale myślę, że to interesujące pytanie.
Najpierw przykład prawidłowego zapętlenia się w tablicy.
For i = LBound(arr) To Ubound(arr)
' do something
Next
Teraz, w tym celu dokładnie co prosiłeś, będziesz mieć dostęp do korzystania z biblioteki VBIDE
. Inaczej nazywana biblioteką "Microsoft Visual Basic for Applications Extensibility". Zapewnia dostęp do IDE i kodu za pomocą niego. Możesz go użyć, aby dowiedzieć się, czy zostało zadeklarowane, czy zostało ono oznaczone jako Option Base 1
. Nie polecam jednak próbować tego zrobić w czasie wykonywania. Byłoby to bardziej przydatne jako rodzaj statycznej analizy kodu podczas tworzenia.
Najpierw musisz add a reference to the library i grant the code access to itself. Gdy to zrobisz, poniższy kod powinien zrobić to, co chcesz.
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
Aby uzyskać więcej informacji, patrz CodeModule.Find documentation.
przypadku korzystania dodatek jest opcją, @ projektu open source Mat'sMug a ja za Rubberduck ma Code Inspection że pokaże wszystkie wystąpienia tego całego aktywnego projektu.
See this for more information on that particular inspection.
Czy istnieje powód, dla którego tego potrzebujesz? Jeśli użyjesz 'LBound' i' UBound', nie ma znaczenia, które ustawienie zostanie użyte. – jonrsharpe
Możesz zdefiniować tablicę i sprawdzić, czy 'LBound' to' 0' lub '1'. Ale jeśli "podstawa opcji" jest określona przez koder, dlaczego ta sama osoba musi ją znaleźć. Wyszukaj w kodzie instrukcję 'Option Base', aby ją znaleźć. –
Downvoter/Close voter. Byłoby miło, gdyby zostawić komentarz wyjaśniający, co jest tak niejasne. Wygląda dla mnie całkiem jasno. – RubberDuck