如何在粘贴时阻止Excel将行的数据合并到单个单元格中?

时间:2015-11-22 21:53:03

标签: excel vba excel-vba copy-paste

我有两个电子表格,我正在之间复制行。当我打开和关闭包含电子表格的源和目标工作簿时,我有一个单独的工作簿中的宏保持打开状态。

我将用

选择目标行
rows(activecell.row).copy

然后我将关闭源工作簿,因为它的名称与目标工作簿相同,在另一个文件夹中打开目标工作簿并执行

activesheet.pastespecial ' this line copied from record macro generated code

有时它会正常工作,有时候源行会被压缩到行的第一个单元格中,有时我会收到一条错误消息,说明该对象不支持pastespecial。

我无法判断我是否搞乱了副本,没有指定我的意思是复制整行,或者如果我需要以某种方式指定源数据来自另一个工作簿而且粘贴功能应该将数据视为一行的数据而不是单个单元格的价值。

如上所述,我在使用“记录宏”功能时生成的宏Excel中复制了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

1 个答案:

答案 0 :(得分:1)

宏中的许多内容都可以改进,但简单地说,如果问题是有时行被粘贴到一个单元格中,请尝试将复制/粘贴的部分更改为:

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版本,所以我猜记录的数量不应该达到该数字。