7
votes

Gérer l'erreur 9 quand il y a un tableau vide

J'écris un script qui bougera via une feuille de calcul Excel et trouvera s'il existe des doublons de cellules sélectionnées. S'il y a des doublons, la fonction retourne une matrice de quelles lignes sont dupliquées et créera un commentaire pour me dire les lignes.

J'ai pu gérer l'erreur 0 mais je reçois maintenant l'erreur 9 lorsque je vérifie s'il y a Éléments de la matrice à l'aide de la fonction Ubound. p>

Comment puis-je valider si le tableau des entiers est vide? p>

Function IsArrayEmpty(anArray As Variant) As Boolean
    Dim i As Integer

    On Error Resume Next
        i = UBound(anArray, 1)
    Select Case (Err.Number)
        Case 0
            IsArrayEmpty = True
        Case 9
            IsArrayEmpty = True
        Case Else
            IsArrayEmpty = False
    End Select
End Function


0 commentaires

8 Réponses :


7
votes

Essayez ceci pour vérifier un tableau vide:

Dim arr() As String

If (Not arr) = -1 Then
   Debug.Print "empty"
Else
   Debug.Print "UBound is " & UBound(X)
End If  



7
votes

Votre fonction échoue car s'il n'y a pas d'erreur soulevée par ubound () code> (c'est-à-dire que le tableau est dimensionné) puis err.Number code> est 0 et:

Function IsArrayEmpty(anArray As Variant) As Boolean
On Error GoTo IS_EMPTY
If (UBound(anArray) >= 0) Then Exit Function
IS_EMPTY:
    IsArrayEmpty = True
End Function


2 commentaires

cela a fonctionné mieux, mais je reçois toujours l'erreur n ° 9 Script hors des limites


Dim A (): Debug.Print Isarrayempty (A) Fonctionne bien pour moi ... Assurez-vous de ne pas avoir d'outils> Options> Général> Pause sur toutes les erreurs Set



1
votes

.. je reçois toujours l'erreur n ° 9 Script hors limites

Si vous obtenez une erreur n ° 9 ... N'est-ce que cela signifie que vous obtenez les informations dont vous avez besoin (tableau est vide)?


3 commentaires

C'est l'information que je veux, mais le programme informatique ne saute pas au gestionnaire d'erreurs à la place, je reçois la pop qui dit l'erreur 9


Salut Talguy, avez-vous essayé Alex K. Subetion? Selon ce lien << a href = "http://www.pcreview.co.uk/forums/thread-3387988.php" rel = "nOfollow noreferrer"> pcreview.co.uk/forums/thread-3387988.php > Si vous le modifiez dans un programme Office, cela pourrait être transféré à l'autre.


Vérifiez également ce lien << a href = "http://www.cpearsarson.com/excel/errorhandling.htm" rel = "nofollow noreferrer"> Cpearson.com/excel/errorhandling.htm >. Section "Blocs de manipulation des erreurs et sur erreur goto". (Plusieurs instructions "sur l'erreur" dans la même procédure, ne prennent pas correctement.)



4
votes

est votre variante de matrice vide ou vide ()?

'vide' est une variante ininitialisée: ISPTY (myvar) retournera vrai ... et vous pourriez être dupe en pensant que vous avez un tableau vide (qui est ' Vide () ', pas' vide '- essayez de suivre de la hauteur, il y aura un court test après cette classe) car Isempty (myarray) revient aussi vrai aussi. P>

P>

  
If Instr(Typename(myVar), "(") > 0 then  

    ' we now know it is an array  
    If Not IsEmpty(myVar) Then  

       ' We can now check its dimensions  
        If Ubound(myVar) > 0  
             ' insert error-free code here  
        Endif  

    Endif  

Endif  


0 commentaires

0
votes

Vous pouvez vérifier si le tableau est vide en récupérant le nombre total d'éléments en utilisant l'objet VBARRAY () CODE> de JScript (Fonctionne avec des tableaux de type variant, unique ou multidimensionnel):

Sub Test()

    Dim a() As Variant
    Dim b As Variant
    Dim c As Long

    ' Uninitialized array of variant
    ' MsgBox UBound(a) ' gives 'Subscript out of range' error
    MsgBox GetElementsCount(a) ' 0

    ' Variant containing an empty array
    b = Array()
    MsgBox GetElementsCount(b) ' 0

    ' Any other types, eg Long or not Variant type arrays
    MsgBox GetElementsCount(c) ' -1

End Sub

Function GetElementsCount(aSample) As Long

    Static oHtmlfile As Object ' instantiate once

    If oHtmlfile Is Nothing Then
        Set oHtmlfile = CreateObject("htmlfile")
        oHtmlfile.parentWindow.execScript ("function arrlength(arr) {try {return (new VBArray(arr)).toArray().length} catch(e) {return -1}}"), "jscript"
    End If
    GetElementsCount = oHtmlfile.parentWindow.arrlength(aSample)

End Function


0 commentaires

0
votes

L'UBOUD et LBound retourneront les limites supérieure et inférieure d'un tableau donné. Donc, si Ubound (arr) est égal à LBound (arr), il est vide.

Dim arr() As String

If UBound(arr) = LBound(arr) Or UBound(arr) <= 0 Then
   Debug.Print "empty"
Else
   Debug.Print "not empty"
End If  


0 commentaires


1
votes

Vous pouvez toujours utiliser "Isarray ()" fonction

Dim yourArray as variant
if not isArray(your_array) then
   msgbox("empty")
else
   msgbox("with data")
end if


0 commentaires