vba Excel单元格。值未检索单元格中的回车

时间:2018-12-10 21:35:04

标签: excel vba excel-vba range

我的Excel单元格有回车符\换行符,但是当读入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 :(得分:1)

问题是,您需要换行才能使行分别显示在单元格中。

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

答案 1 :(得分:0)

回车问题

出于好奇,“ CR”字符的代码是什么。您可以使用以下公式获取它:Excel中的=CODE(MID(A1,7,1))(分别调整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

答案 2 :(得分:0)

我想增强已经发布的答案。...

您应该用vbCRLF替换所有类型的LF和CR,然后将其用作拆分器。

这是我的代码...可以根据您的需要进行进一步增强。就我而言,是罪魁祸首是vbLF,而不是vbCR。不过,我用vbCrLF替换了两者,然后将其用作拆分器...

ProductText = Replace(Replace(c.Offset(1, 0).Value, vbCr, vbCrLf), vbLf, vbCrLf)
ProdAry = Split(ProductText, vbCrLf)