我有两个电子表格,我正在之间复制行。当我打开和关闭包含电子表格的源和目标工作簿时,我有一个单独的工作簿中的宏保持打开状态。
我将用
选择目标行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
答案 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版本,所以我猜记录的数量不应该达到该数字。