Benutzer mit den meisten Antworten
Acc2007: Wie stelle ich die Ausdehnung eines Arrays fest (Fehler bei UBound)

Frage
-
Ich habe eine VBA-Funktion geschrieben, die ein String-Array zurückliefert.
Das funktionert zwar wunderbar, Probleme gibt es aber, falls die Funktion kein ERgebnis zurückliefert.
Dies habe ich versucht festzustellen, indem ich die Funktion Ubound(termine) anwende.
Leider liefert UbOund offenbar nicht "0" zurück wenn termine() gar keine Mitglieder enthält, sondern löst einen Fehler aus.
Wie gehe ich dabei vor ?
Antworten
-
Hallo NicoNi,
NicoNi schrieb folgendes:
Ich habe eine VBA-Funktion geschrieben, die ein String-Array
zurückliefert.
Das funktionert zwar wunderbar, Probleme gibt es aber, falls die
Funktion kein ERgebnis zurückliefert.
Dies habe ich versucht festzustellen, indem ich die Funktion
Ubound(termine) anwende.
Leider liefert UbOund offenbar nicht "0" zurück wenn termine() gar keine Mitglieder enthält, sondern löst einen Fehler aus. Wie gehe ich dabei vor ?mit einer Fehlerbehandlung:
On Error GoTo FuncErr Debug.Print UBound(termine()) ExitFunc: Exit Sub FuncErr: Select Case Err Case 9 ' Fehler 9 ' Hier deinen Code wenn Array nicht gefüllt Resume ExitFunc Case Else MsgBox "Fehler in Funktion" & vbCrLf & _ "Nr: " & Err.Number & vbCrLf & _ "Description: " & Err.Description, vbCritical Resume ExitFunc End Select
Gruß
Gunter
Access FAQ: http://www.donkarl.comhttp://www.avenius.de - http://www.AccessRibbon.de
http://www.ribboncreator.de - http://www.ribboncreator2010.de- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06
-
Hallo NicoNi
NicoNi wrote:
Ich habe eine VBA-Funktion geschrieben, die ein String-Array
zurückliefert.
Das funktionert zwar wunderbar, Probleme gibt es aber, falls die Funktion
kein ERgebnis zurückliefert.
Dies habe ich versucht festzustellen, indem ich die Funktion
Ubound(termine) anwende.
Leider liefert UbOund offenbar nicht "0" zurück wenn termine() gar keine
Mitglieder enthält, sondern löst einen Fehler aus.Wie gibst Du das Array zurück? Als Variant? Falls nicht, versuche es damit. Dann kannst Du beim Aufrufer folgendes machen:
Dim varArray as Variant
varArray = DeineFunktion()
If VarType(varArray) And vbArray = vbArray Then
MsgBox "es wurden " & UBound(varArray()) & " Strings zurückgeliefert"
Else
MsgBox "Da kam nix zurück, ätsch"
End IfDie Alternative, die man häufig sieht, den Code in einen Fehler laufen zu lassen und dann den Fehler zu prüfen, ist irgendwie nicht mein Stil. Da greife ich lieber auf den Varaint Datentyp zurück, der auch Arrays aufnehmen kann.
Gruss
Henry- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06
-
Hallo!
Zum Überpürfen, ob ein dynamisches Array initialisiert wurde, kann man folgende Variante probieren:
Dim Termine() As Date If (0 / 1) + (Not Not Termine) = 0 Then Debug.Print "Array ist nicht dimensioniert" End If
siehe: http://www.vbarchiv.net/tipps/tipp_798-pruefen-ob-array-dimensioniert-ist-ii.html
mfg
Josef
Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendun- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06
Alle Antworten
-
Hallo NicoNi,
NicoNi schrieb folgendes:
Ich habe eine VBA-Funktion geschrieben, die ein String-Array
zurückliefert.
Das funktionert zwar wunderbar, Probleme gibt es aber, falls die
Funktion kein ERgebnis zurückliefert.
Dies habe ich versucht festzustellen, indem ich die Funktion
Ubound(termine) anwende.
Leider liefert UbOund offenbar nicht "0" zurück wenn termine() gar keine Mitglieder enthält, sondern löst einen Fehler aus. Wie gehe ich dabei vor ?mit einer Fehlerbehandlung:
On Error GoTo FuncErr Debug.Print UBound(termine()) ExitFunc: Exit Sub FuncErr: Select Case Err Case 9 ' Fehler 9 ' Hier deinen Code wenn Array nicht gefüllt Resume ExitFunc Case Else MsgBox "Fehler in Funktion" & vbCrLf & _ "Nr: " & Err.Number & vbCrLf & _ "Description: " & Err.Description, vbCritical Resume ExitFunc End Select
Gruß
Gunter
Access FAQ: http://www.donkarl.comhttp://www.avenius.de - http://www.AccessRibbon.de
http://www.ribboncreator.de - http://www.ribboncreator2010.de- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06
-
Hallo NicoNi
NicoNi wrote:
Ich habe eine VBA-Funktion geschrieben, die ein String-Array
zurückliefert.
Das funktionert zwar wunderbar, Probleme gibt es aber, falls die Funktion
kein ERgebnis zurückliefert.
Dies habe ich versucht festzustellen, indem ich die Funktion
Ubound(termine) anwende.
Leider liefert UbOund offenbar nicht "0" zurück wenn termine() gar keine
Mitglieder enthält, sondern löst einen Fehler aus.Wie gibst Du das Array zurück? Als Variant? Falls nicht, versuche es damit. Dann kannst Du beim Aufrufer folgendes machen:
Dim varArray as Variant
varArray = DeineFunktion()
If VarType(varArray) And vbArray = vbArray Then
MsgBox "es wurden " & UBound(varArray()) & " Strings zurückgeliefert"
Else
MsgBox "Da kam nix zurück, ätsch"
End IfDie Alternative, die man häufig sieht, den Code in einen Fehler laufen zu lassen und dann den Fehler zu prüfen, ist irgendwie nicht mein Stil. Da greife ich lieber auf den Varaint Datentyp zurück, der auch Arrays aufnehmen kann.
Gruss
Henry- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06
-
Hallo!
Zum Überpürfen, ob ein dynamisches Array initialisiert wurde, kann man folgende Variante probieren:
Dim Termine() As Date If (0 / 1) + (Not Not Termine) = 0 Then Debug.Print "Array ist nicht dimensioniert" End If
siehe: http://www.vbarchiv.net/tipps/tipp_798-pruefen-ob-array-dimensioniert-ist-ii.html
mfg
Josef
Code-Bibliothek für Access-Entwickler
AccUnit - Testen von Access-Anwendun- Als Antwort markiert Peter DoeringMVP, Moderator Sonntag, 17. April 2011 13:06