31

Вопрос по excel, vba – Как удалить разрыв строки в строке

Я хочу удалить разрыв строки из строки, если моя строка заканчивается разрывом строки.

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
  • Error: User Rate Limit ExceededallError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededfilesystemobjectError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededvbCrError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • WebComer HasFormula - это базовая функция. Я ничего не могу исправить, если ваш компьютер не распознает это.docs.microsoft.com/en-us/office/vba/api/excel.range.hasformula

    от
  • rngCel. HasFormula не найдена, пожалуйста, исправьте это.

    от
  • Windows использует Chr (13) & amp; Chr (10), так что это не правильно.

    от
  • Нирадж: Крис абсолютно прав. @ Крис: +1, пожалуйста, опубликуйте это как ответ :)

    от Siddharth Rout
  • vbCrLf а такжеvbNewLine на самом деле два символа длиной, так что измените наRight$(myString, 2)

    от chris neilsen
10 ответов
  • 3

    Code:

    mystring = Replace(mystring, Chr(10), "")
    

  • 0

    Code:

    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
    

  • 4

    просто это: str = Replace(str, vbCrLf, "")

    просто это:

    str = Replace(str, vbCrLf, "")
    

  • 22

    Sub linebreak(myString)

    vbCrLf а такжеvbNewLine на самом деле два символа длиной, так что измените наRight$(myString, 2)

        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
    

  • 1

    Я знаю

    что этот пост очень старый, но я не смог найти ничего, что могло бы сделать это. Итак, я наконец собрал это на всех форумах.

    Это удалит все разрывы строк слева и справа и удалит все пустые строки. Затем обрежьте все это, чтобы хорошо выглядеть. Переделай как хочешь. Я также сделал один, который удаляет все разрывы строк, если интересно. 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

    Заменить (yourString, vbNewLine, &

    quot; & quot ;,, vbTextCompare)

  • -1

    в случае, если кто-то заходит и ищет этот старый пост

    При поиске последних или первых символов, являющихся символами новой строки / vbcrlf и т. Д., Попробуйте:

    trim(string) снять спереди и сзади
    rtrim(string) убрать с конца
    ltrim(string) снять с фронта

  • 53

    Этот код удаляет все разрывы строк из кода

    str = Replace(str, vbLf, "")
    

    если вы просто хотите, чтобы последний вышел:

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

    это способ, как вы попробовали ОК.

    Обновить:

    line feed = ASCII 10, form feed = ASCII 12 а такжеcarriage return = ASCII 13, Здесь мы ясно видим, что все мы знаем: компьютер поставляется с (электрической) машинки

    vbLf являетсяChr (10) и означает, что курсор переходит на одну строку ниже (пишущая машинка: поверните ролик) vbCr являетсяChr (13) означает, что курсор переходит на начало (пишущая машинка: отведите рулон)

    ВDOSразрыв строки всегдаVBCrLf or Chr (13) & Chr (10)в любом случае в файлах, но, например, также с текстовыми полями в VB.

    ВExcel cellс другой стороны, разрыв строки толькоVBLfвторая строка начинается с первой позиции даже без vbCr.With vbCrLf then go one cell deeper.

    Так что это зависит от того, где вы читаете и откуда берете свою строку. если вы хотите удалить все vbLf (Char (10)) и vbCr (Char (13)) в вашем тринге, вы можете сделать это следующим образом:

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

    Если вы хотите удалить только последний, вы можете проверить это следующим образом:

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

  • 4

    Чистая функция может быть вызвана из VBA следующим образом:

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

    Однако, как написаноВотфункция CLEAN была разработана для удаления первых 32 непечатаемых символов в 7-битном коде ASCII (значения от 0 до 31) из текста. В наборе символов Unicode есть дополнительные непечатаемые символы (значения 127, 129, 141, 143, 144 и 157). Сама по себе функция CLEAN не удаляет эти дополнительные непечатаемые символы.

    Rick Rothstein  написал код, чтобы справиться даже с этой ситуациейВот сюда:

    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
    

  • 6

    Поскольку вы используете Excel

    вам не нужен VBA для этого, вы можете просто использовать встроенный & quot; Clean () & quot; Функция удаляет возврат каретки, перевод строки и т. д., например:

    =Clean(MyString)