Comment faire pour Supprimer le Saut de Ligne dans le String

Je veux supprimer le saut de ligne de la chaîne si ma chaîne se termine par un saut de ligne.

Sub linebreak(myString)
If Len(myString) <> 0 Then
If Right$(myString, 1) = vbCrLf Or Right$(myString, 1) = vbNewLine Then myString = Left$(myString, Len(myString) - 1)
End If
End Sub
26
demandé sur Community 2012-04-05 11:34:17

10 réponses

vbCrLf et vbNewLine sont en fait deux caractères longs, alors changez en Right$(myString, 2)

Sub linebreak(myString)
    If Len(myString) <> 0 Then
        If Right$(myString, 2) = vbCrLf Or Right$(myString, 2) = vbNewLine Then 
            myString = Left$(myString, Len(myString) - 2)
        End If
    End If
End Sub
20
répondu chris neilsen 2012-04-09 04:15:42
str = Replace(str, vbLf, "")

Ce code prend tous la ligne du saut du code

si vous voulez juste le dernier:

If Right(str, 1) = vbLf Then str = Left(str, Len(str) - 1)

est la manière dont on a essayé OK.


mise à Jour:

saut de ligne = ASCII 10,form feed = ASCII 12 et retour chariot = ASCII 13. Ici, nous voyons clairement ce que nous savons tous: le PC vient de la machine à écrire (électrique)

vbLf est Chr (10) et signifie que le curseur saute une ligne plus bas (Machine à écrire: tourner le rouleau) vbCrChr (13) signifie que le curseur saute au début (machine à écrire: retirez le rouleau)

DOS, un saut de ligne est toujours VBCrLf or Chr (13) & Chr (10), dans les fichiers de toute façon, mais par exemple aussi avec les zones de texte dans VB.

Dans un cellule Excel, d'autre part, un saut de ligne n'est VBLf, la deuxième ligne commence alors à la première position même sans vbCr. avec vbCrLf alors aller une cellule plus profond.

cela dépend donc de l'endroit où vous lisez et obtenez votre chaîne de caractères. si vous souhaitez supprimer toutes les vbLf (Char(10)) et vbCr (Char(13)) dans votre tring, vous pouvez le faire comme ça:

strText = Replace(Replace(strText, Chr(10), ""), Chr(13), "")

Si vous ne voulez pas supprimer la Dernière, vous pouvez tester sur de faire comme ceci:

If Right(str, 1) = vbLf or Right(str, 1) = vbCr Then str = Left(str, Len(str) - 1)
48
répondu Moosli 2018-03-04 13:02:42

comme vous utilisez Excel, vous n'avez pas besoin de VBA pour réaliser ceci, vous pouvez simplement utiliser la fonction "Clean()" intégrée, ce qui supprime les retours de chariot, les flux de lignes, etc. g:

=Clean(MyString)
6
répondu Matt Donnan 2012-04-05 09:11:57
mystring = Replace(mystring, Chr(10), "")
4
répondu user3117021 2013-12-21 23:08:24

la fonction Clean peut être appelée de VBA de cette façon:

Range("A1").Value = Application.WorksheetFunction.Clean(Range("A1"))

Cependant, comme l'écrit ici, la fonction CLEAN a été conçue pour supprimer les 32 premiers caractères non imprimants dans le code ASCII 7 bits (valeurs 0 à 31) du texte. Dans le jeu de caractères Unicode, il y a des caractères non-imprimants supplémentaires (valeurs 127, 129, 141, 143, 144, et 157). Par elle-même, la fonction CLEAN n'élimine pas ces non-imprimées supplémentaires caractère.

Rick Rothstein ont écrit le code pour gérer même cette situation ici comme ceci:

Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
  Dim X As Long, CodesToClean As Variant
  CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
                       21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
  If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
  For X = LBound(CodesToClean) To UBound(CodesToClean)
    If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
  Next
  CleanTrim = WorksheetFunction.Trim(S)
End Function
3
répondu Rocketq 2015-09-23 10:38:34

juste ceci:

str = Replace(str, vbCrLf, "")
3
répondu decas 2017-01-23 17:14:29

Remplacer(yourString, vbNewLine, "", , , vbTextCompare)

1
répondu Divyank Sabhaya 2015-02-17 10:17:22

je sais que ce post est très vieux, mais je ne pouvais pas trouver quelque chose qui ferait cela. Donc j'ai finalement assemblé ça à partir de tous les forums.

ceci supprimera toutes les ruptures de ligne à gauche et à droite, et supprimera toutes les lignes vides. Puis couper tout pour avoir l'air bien. Modifier comme bon vous semble. J'en ai aussi fait un qui supprime toutes les sauts de ligne, si intéressé. TY

    Sub RemoveBlankLines()
    Application.ScreenUpdating = False
    Dim rngCel As Range
    Dim strOldVal As String
    Dim strNewVal As String

    For Each rngCel In Selection
        If rngCel.HasFormula = False Then
            strOldVal = rngCel.Value
            strNewVal = strOldVal
            Debug.Print rngCel.Address

            Do
            If Left(strNewVal, 1) = vbLf Then strNewVal = Right(strNewVal, Len(strNewVal) - 1)
            If strNewVal = strOldVal Then Exit Do
                strOldVal = strNewVal
            Loop

            Do
            If Right(strNewVal, 1) = vbLf Then strNewVal = Left(strNewVal, Len(strNewVal) - 1)
            If strNewVal = strOldVal Then Exit Do
                strOldVal = strNewVal
            Loop

            Do
            strNewVal = Replace(strNewVal, vbLf & vbLf, "^")
            strNewVal = Replace(strNewVal, Replace(String(Len(strNewVal) - _
                        Len(Replace(strNewVal, "^", "")), "^"), "^", "^"), "^")
            strNewVal = Replace(strNewVal, "^", vbLf)

            If strNewVal = strOldVal Then Exit Do
                strOldVal = strNewVal
            Loop

            If rngCel.Value <> strNewVal Then
                rngCel = strNewVal
            End If

        rngCel.Value = Application.Trim(rngCel.Value)
        End If
    Next rngCel
    Application.ScreenUpdating = True
End Sub
1
répondu Mouthpear 2017-08-25 10:32:44
Private Sub Form_Load()
    Dim s As String

    s = "test" & vbCrLf & "this" & vbCrLf & vbCrLf
    Debug.Print (s & Len(s))

    s = Left(s, Len(s) - Len(vbCrLf))
    Debug.Print (s & Len(s))
End Sub
0
répondu user1537510 2017-08-25 10:15:53

dans le cas où quelqu'un vient les chercher et trouve ce vieux post:

lorsque vous cherchez la dernière ou les premiers caractères de newline / vbcrlf etc, essayez:

trim(string) à retirer de l'avant et de l'arrière

rtrim(string) pour supprimer à partir de la fin

ltrim(string) pour supprimer à partir de l'avant

0
répondu kaberna 2018-03-04 23:15:23