我的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
答案 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)