vba Excel ячейка. Значение, не извлекающее возврат каретки в ячейке - PullRequest
0 голосов
/ 11 декабря 2018

Мои ячейки Excel имеют возврат каретки (s) \ перевод строки, но при чтении в cell.value возврат каретки исчезает.Есть ли способ справиться с этим, чтобы я мог определить, где были разрывы строк (без изменения исходных данных листа Excel)?

В приведенном ниже коде (внизу этого потока) я ожидалпеременная ProductText, которая должна быть установлена ​​как:

Orange<CR> 
Red<CR>
Yellow<CR>

, где <cr> означает возврат каретки.

Я могу подтвердить, что переводы строки присутствуют, когда я копирую из ячейки Excel в Блокнот.

Но в VBA ProductText заполняется как: "Оранжево-красный-желтый", и возврат каретки пропал.

'YOU MAY SKIP TO THE ******************************************* for the purposes of this post

Public Sub ProcessCharmMingFile(Excel_UNC_Path As String)

    Dim src As Workbook

    Dim ProdPushWorkbook As Workbook

    Set ProdPushWorkbook = ActiveWorkbook


    Set src = Workbooks.Open(Excel_UNC_Path, True, True)

    Dim c As Range
    Dim r As Range
    Dim LastRow As Long

    Dim Text As String

    src.Sheets("Table 1").Activate

    src.ActiveSheet.Range("A1").Select
    LastRow = src.ActiveSheet.Range("A30000").End(xlUp).Row
    Text = LastRow
    Text = "A1:T" + CStr(Text)

    Set r = Range(Text)

    Dim i As Integer

    For i = 1 To MaxItems
        PONumber(i) = ""
    Next


    Dim PageCounter As Integer
    PageCounter = 0
    RecordCounter = 0


    Dim ProductText As String
    Dim QtyText As String
    Dim HeatText As String


       '***********************************************************
       '***********************************************************
       '***********************************************************

    For Each c In r
        If c.Value = "ALLIED FITTING Product Code" Then
            PageCounter = PageCounter + 1
            ProductText = c.Offset(1, 0).Value
            HeatText = c.Offset(1, 1).Value
            QtyText = c.Offset(1, 2).Value

        End If
    Next

       '***********************************************************
       '***********************************************************
       '***********************************************************



    If RecordCounter = 0 Then
        Call AbortFileProcessing("No Valid Reoords Dected", False, ProdPushWorkbook)
    End If


    src.Close


End Sub

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Дело в том, что вам нужен перевод строки, чтобы строки отображались отдельно в ячейке.

VBA имеет соответствующие константы для этого:

Sub CRLFString()
Dim str As String

str = "hello" & vbCr & "world!"
Range("A1").Value = str 'Reads: "helloworld!" - Wrap Text won't change this.

str = "hello" & vbLf & "world!"
Range("A2").Value = str 

str = "hello" & vbCrLf & "world!"
Range("A3").Value = str 'Both of these read
    'hello
    'world!

End Sub

Однако, если вывыведет эти строки, используя Debug.Print, все три из них будут в 2 строки, как и ожидалось.

Вкратце: добавьте перевод строки, в противном случае вы получите результат, описанный в вопросе.Вы можете просто использовать Replace на vbCr, чтобы сделать это:

Sub AddLineBreaksAndOutput(str As String)
    str = Replace(str, vbCr, vbCrLf)
    Range("A4").Value = str
End Sub

Sub Test()
Dim str As String
str = "hello" & vbCr & "world!"
AddLineBreaksAndOutput str
End Sub
0 голосов
/ 11 декабря 2018

Я хочу улучшить ответ, уже опубликованный ....

Вы должны заменить все типы LF и CR на vbCRLF, а затем использовать их в качестве сплиттера.

Вот мой код... это может быть улучшено в зависимости от ваших потребностей.В моем случае виновником был vbLF, а не vbCR.Я заменил оба, тем не менее, на vbCrLF, а затем использовал это как мой сплиттер ...

ProductText = Replace(Replace(c.Offset(1, 0).Value, vbCr, vbCrLf), vbLf, vbCrLf)
ProdAry = Split(ProductText, vbCrLf)
0 голосов
/ 11 декабря 2018

Проблема возврата каретки

Из любопытства, какой номер кода у символа "CR".Вы можете получить его, используя следующую формулу: =CODE(MID(A1,7,1)) в Excel (соответственно отрегулируйте A1 и 7).

Если это поведение не исчезнет, ​​вы можете разбить строку на массив и объединить с соответствующим символом, например, Chr (10):

Объявите две переменные, затем после строки ProductText = ... вы знаете, что делать.

  Dim j As Integer
  Dim vntText As Variant

  ProductText = c.Offset(1, 0).Value
  vntText = Split(ProductText, " ")

  For j = 0 To UBound(vntText)
    If j > 0 Then
      ProductText = ProductText & Chr(10) & vntText(j)
     Else
      ProductText = vntText(0)
    End If
  Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...