如何防止Excel在粘贴时将行数据合并到单个单元格中?
我有两个电子表格,我正在复制行之间。 我有一个单独的工作簿中的macros保持打开状态,同时打开和closures包含电子表格的源和目标工作簿。
我将select目标行
rows(activecell.row).copy
然后,我将closures源工作簿,因为它的名称与目标工作簿完全相同,请在另一个文件夹中打开目标工作簿并执行
activesheet.pastespecial ' this line copied from record macro generated code
有时它可以正常工作,其他时候,源行将被挤压到行的第一个单元格中,有时我会收到一条错误消息,指出对象不支持pastespecial。
我不能告诉我是不是搞乱了副本没有指定我的意思是复制整个行,或者如果我需要以某种方式指定源数据是从另一个工作簿和粘贴function应该将数据视为行的价值的数据,而不是单个单元的价值。
如上所述,我复制了从我使用“录制macros”function生成的macrosExcel中的pastespecial行,并手动执行行复制。
万一重要,这是整个例程。
Sub copyStudentsToEmail(emailApacket) ' copies student records to email Dim cel, nameCel, sourcePath As String Rows(ActiveCell.Row).Copy sourcePath = ActiveWorkbook.FullName ActiveWorkbook.Close (True) Workbooks.Open ThisWorkbook.path & "\\email\\records.xls" ' search for bottom row Range("a1").Select While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Select Wend ActiveSheet.PasteSpecial ' search for email cell Cells(ActiveCell.Row, 1).Select For Each cel In Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 10)) If cel Like "*@*" Then Exit For Next cel.Select ' if found email cell make adjustments If (ActiveCell.Column < 10) Then Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(0, 3).Select Set nameCel = ActiveCell.Offset(0, 2) ActiveCell.Value = Left(nameCel, InStr(nameCel, " ") - 1) ActiveCell.Offset(0, 1).Select cel = Right(nameCel, Len(nameCel) - Len(ActiveCell.Offset(0, -1)) - 1) ActiveCell.Value = Left(cel, InStr(cel, " ") - 1) Else MsgBox ("Didn't find email address. Not sure how to adjust record.") End If If (emailApacket) Then sendApacket ActiveWorkbook.Close True Workbooks.Open sourcePath End Sub
你的macros中的许多东西都可以改进,但是简单地说,如果问题是有时候行被粘贴到一个单元格中,请尝试将复制/粘贴的部分更改为:
ActiveCell.EntireRow.Copy ActiveWorkbook.Close Workbooks.Open ThisWorkbook.Path & "\\email\\records.xls" Range("A32767").End(xlUp).Offset(1, 0).EntireRow.PasteSpecial
ps:我使用A32767
因为你的目标文件似乎是来自2007年以前的Excel版本,所以我猜测logging的数量不应该达到这个数字。