0
votes

Utilisation d'un VBA ESSAY / SAUF EQUIVALENT POUR SI / AUTRE

J'essaie de traverser une plage de tableur et d'utiliser un essai / sauf pour construire une instruction if / else. La raison pour laquelle je le fais est parce que isnumeric () ne fonctionne pas pour moi, alors j'essaie de faire quelque chose comme ça (essayez, sauf le formatage de Python)

    Dim Myrange As Range
    Dim Myrow As Range
    Dim Temp As Variant
    Dim NextTemp As Variant

    Set Myrange = Selection
    For Each Myrow In Myrange.Rows
        NextTemp = Range("A" & Myrow.Row).Value
        If IsEmpty(Range("A" & Myrow.Row)) Then
          Exit For
        ElseIf IsNumeric(NextTemp) Then
            Temp = NextTemp
            Range("A" & Myrow.Row).Value = ""
        Else
            Range("B" & Myrow.Row).Value = Temp
                End If
    Next Myrow


9 commentaires

Qu'est-ce que cette ligne est censée faire myrow.value () - 0 ?


La meilleure gestion des erreurs n'est pas une manipulation d'erreur - si vous attribuez Temp à myrow.value jette un Mismachatch , lisez myrow.value < / code> dans un variante et déterminez si iSnumeric (myrow.value) avant d'essayer de le contraire à un integer ; Ensuite, vous n'avez pas besoin de vous inquiéter de la manipulation des erreurs.


Egalement sur erreur CV Suivant doit être jumelé avec un sur erreur goto 0 instructions qui restaient la manutention des erreurs - sans elle Oern supprimer toutes les erreurs de la portée de la procédure.


Quelle erreur vous essayez d'utiliser isnumeric (myrow.value) ?


@Matheuguindon J'allais vous demander plus de détails sur "La meilleure gestion des erreurs n'est pas une manipulation d'erreur", puis j'ai trouvé que vous avez déjà un Blog POST Couvrez-le. Utile pour une meilleure compréhension de ce sujet.


Dans le pour la plage est uniquement myRange et non myrange.row et besoin de changement valeur () to seulement < Code> Valeur .


@Mathieuguindon Je viens de lire votre blog que Robert a lié et c'est très utile. Je prévois de mettre en œuvre cela à l'avenir. Merci.


@Matheuguindon J'ai suivi vos conseils et j'ai cloué! Je ne sais pas comment le marquer comme répondu depuis que cela a été publié comme un commentaire VS Réponse.


Vous ne pouvez pas marquer un commentaire comme étant accepté - la réponse de SJR semble construire sur mon commentaire.


3 Réponses :


0
votes

Un moyen d'avoir un gestionnaire d'erreur dédié à la fin de votre substance et de vérifier le code d'erreur (13 pour la désactivation de type): xxx

de cette façon, si nous rencontrons une valeur Pour quel CDBL (ou la fonction équivalente) échouons, nous continuons simplement à la ligne suivante.


0 commentaires

1
votes

Un peu de simplification et ramassant sur les commentaires de Mathieu, essayez ceci. Je ne sais pas ce que vous faites ce que vous faites cependant peut ne pas être tout à fait raison.

Sub x()

Dim Temp As Variant
Dim Myrange As Range
Dim Myrow As Range

Set Myrange = Range("A1", "A1000")

For Each Myrow In Myrange
    If Not IsEmpty(Myrow) Then
        Temp = Myrow.Value - 0
            If IsNumeric(Temp) Then
               Myrow.Value = vbNullString
            Else
                Myrow.Offset(, 1).Value = Temp
            End If
    End If
Next Myrow

End Sub


2 commentaires

C'était essentiellement ce que j'ai fait, merci. Je ne sais pas comment je peux poster mon code.


Merci d'avoir accepté ma réponse. Cependant, vous pouvez publier votre propre code comme réponse si vous préférez.



0
votes

Bien que le premier exemple contienne Essayez: et sauf: comme étiquettes, ils ne fournissent aucun contrôle d'erreur. Essayez / sauf si vb.net méthodes de contrôle des erreurs, non VBA .

C'est pas clair si vous pourriez avoir un texte qui ressemble à des chiffres dans la colonne A. Si le Temp = (myrow.value () - 0) est uniquement destiné à déterminer si la valeur dans la colonne A est un nombre et non Utilisé comme une conversion, les spécialistes peuvent trouver rapidement les chiffres de la colonne A. xxx

Vous pouvez également utiliser xlcelltypeformulas pour renvoyer des chiffres ou du texte renvoyés par formules .


0 commentaires