Last active
July 24, 2021 15:59
-
-
Save jim-oflaherty-jr-qalocate-com/abc191d0e76bbc015a086b133b2521e4 to your computer and use it in GitHub Desktop.
VBA Array Size for CodeReview Question/Answers - Tests Crossing Zero Index...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Public Function f_test() | |
Dim blnResult As Boolean | |
Dim astrTemp() As String | |
On Error GoTo NormalExit | |
ReDim astrTemp(-1 To 1) | |
astrTemp(-1) = "A" | |
astrTemp(0) = "B" | |
astrTemp(1) = "C" | |
Debug.Print "1. LBound: " + CStr(LBound(astrTemp)) | |
Debug.Print "1. UBound: " + CStr(UBound(astrTemp)) | |
Debug.Assert f_ua_lngSize(astrTemp) = 3 | |
ReDim astrTemp(-2 To 0) | |
astrTemp(-2) = "A" | |
astrTemp(-1) = "B" | |
astrTemp(0) = "C" | |
Debug.Print "2. LBound: " + CStr(LBound(astrTemp)) | |
Debug.Print "2. UBound: " + CStr(UBound(astrTemp)) | |
Debug.Assert f_ua_lngSize(astrTemp) = 3 | |
ReDim astrTemp(0 To 2) | |
astrTemp(0) = "A" | |
astrTemp(1) = "B" | |
astrTemp(2) = "C" | |
Debug.Print "3. LBound: " + CStr(LBound(astrTemp)) | |
Debug.Print "3. UBound: " + CStr(UBound(astrTemp)) | |
Debug.Assert f_ua_lngSize(astrTemp) = 3 | |
ReDim astrTemp(-3 To -1) | |
astrTemp(-3) = "A" | |
astrTemp(-2) = "B" | |
astrTemp(-1) = "C" | |
Debug.Print "4. LBound: " + CStr(LBound(astrTemp)) | |
Debug.Print "4. UBound: " + CStr(UBound(astrTemp)) | |
Debug.Assert f_ua_lngSize(astrTemp) = 3 | |
ReDim astrTemp(1 To 3) | |
astrTemp(1) = "A" | |
astrTemp(2) = "B" | |
astrTemp(3) = "C" | |
Debug.Print "5. LBound: " + CStr(LBound(astrTemp)) | |
Debug.Print "5. UBound: " + CStr(UBound(astrTemp)) | |
Debug.Assert f_ua_lngSize(astrTemp) = 3 | |
blnResult = True | |
NormalExit: | |
f_test = blnResult | |
End Function | |
'Return Value: | |
' -1 - Not an Array | |
' 0 - Empty | |
' > 0 - Defined | |
Public Function f_ua_lngSize( _ | |
ByRef pr_avarValues As Variant _ | |
, Optional ByVal pv_lngDimensionOneBased As Long = 1 _ | |
) As Long | |
Dim lngSize As Long: lngSize = M_UA_SIZE_NOT_ARRAY 'Default to not an Array | |
Dim lngLBound As Long | |
Dim lngUBound As Long | |
On Error GoTo Recovery | |
If (IsArray(pr_avarValues) = True) Then | |
lngSize = M_UA_SIZE_EMPTY 'Move default to Empty | |
lngLBound = LBound(pr_avarValues, pv_lngDimensionOneBased) | |
lngUBound = UBound(pr_avarValues, pv_lngDimensionOneBased) | |
If (lngLBound <= lngUBound) Then | |
lngSize = lngUBound - lngLBound + 1 'Non-Empty, so return size | |
End If | |
End If | |
NormalExit: | |
f_ua_lngSize = lngSize | |
Exit Function | |
Recovery: | |
GoTo NormalExit | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment