Die Übergabe eines nicht dimensionierten Arrays an die Ubound-Funktion von VB6 führt zu einem Fehler. Ich möchte also überprüfen, ob das Array bereits dimensioniert wurde, bevor ich versuche, seine obere Grenze zu überprüfen. Wie kann ich dies tun?
Antworten
Zu viele Anzeigen?
Perry Pederson
Punkte
95
Wenn das Array ein String-Array ist, können Sie die Join()-Methode als Test verwenden:
Private Sub Test()
Dim ArrayToTest() As String
MsgBox StringArrayCheck(ArrayToTest) ' returns "false"
ReDim ArrayToTest(1 To 10)
MsgBox StringArrayCheck(ArrayToTest) ' returns "true"
ReDim ArrayToTest(0 To 0)
MsgBox StringArrayCheck(ArrayToTest) ' returns "false"
End Sub
Function StringArrayCheck(o As Variant) As Boolean
Dim x As String
x = Join(o)
StringArrayCheck = (Len(x) <> 0)
End Function
Evan TOder
Punkte
29
Ich sehe viele Vorschläge im Internet über wie man feststellt, ob ein Array initialisiert wurde . Nachfolgend finden Sie eine Funktion, die ein beliebiges Array nimmt, prüft, was der ubound dieses Arrays ist, das Array auf ubound +1 redimensioniert (mit oder ohne PRESERVER) und dann zurückgibt, was der aktuelle ubound des Arrays ist, ohne Fehler.
Function ifuncRedimUbound(ByRef byrefArr, Optional bPreserve As Boolean)
On Error GoTo err:
1: Dim upp%: upp% = (UBound(byrefArr) + 1)
errContinue:
If bPreserve Then
ReDim Preserve byrefArr(upp%)
Else
ReDim byrefArr(upp%)
End If
ifuncRedimUbound = upp%
Exit Function
err:
If err.Number = 0 Then Resume Next
If err.Number = 9 Then ' subscript out of range (array has not been initialized yet)
If Erl = 1 Then
upp% = 0
GoTo errContinue:
End If
Else
ErrHandler.ReportError "modArray", ifuncRedimUbound, "1", err.Number, err.Description
End If
End Function
Andrew Harmel-Law
Punkte
7479
- See previous answers
- Weitere Antworten anzeigen