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
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
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)
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)
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
Remplacer(yourString, vbNewLine, "", , , vbTextCompare)
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
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
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èrertrim(string)
pour supprimer à partir de la finltrim(string)
pour supprimer à partir de l'avant