我有一个打开文档的宏,复制某列中的最后一行并将该值粘贴到我遇到问题的另一个工作簿中的下一个空单元格中。这在以前工作过,但在这个特定的文档中,第一行包含合并和居中的单元格,包括列(B),我想找到下一个空单元格并粘贴该值。当我运行代码时得到“此操作需要合并的单元格大小相同”的消息。在下面的代码中,我尝试将rowToPaste更改为2(绕过包含合并单元格的第一行),这会崩溃excel。如何在检查第一个空单元格时找到宏绕过第一行,或者找到另一种方法来避免同样大小的合并单元格问题?提前谢谢。
Private Sub CommandButton1_Click()
Dim NextRow As Long, LastRow As Long
Dim vMax As Variant
Dim rowToPaste As Integer
Dim lastRowToPaste As Integer
Dim lastCheckedRow As Integer
Set wsMaster = ThisWorkbook.Sheets("FY 13 Budgets -- East Coast")
NextRow = wsMaster.Range("A" & Rows.Count).End(xlUp).Row + 1
Set wbDATA = Workbooks.Open("C:\Documents and Settings\Michael Palkovitz\My Documents\Test\PDF to excel.xlsm")
With wbDATA.Sheets("8A")
LastRow = .Range("B" & .Rows.Count).End(xlUp).Row
If LastRow > 1 Then
.Range("B" & LastRow).Copy
lastRowToPaste = LastRow + 1000
rowToPaste = lastCheckedRow
Do
rowToPaste = rowToPaste + 1
If IsEmpty(wsMaster.Range("B" & rowToPaste)) Then
wsMaster.Range("B" & rowToPaste).PasteSpecial xlPasteValues
wsMaster.Range("B" & rowToPaste).PasteSpecial xlPasteFormats
lastCheckedRow = rowToPaste
Exit Do
End If
Loop While (rowToPaste < lastRowToPaste)
End If
End With
wbDATA.Close False
End Sub
答案 0 :(得分:0)
我开始回复您对您的问题的评论,但认为这将更容易作为答案阅读。
有一些事情需要清理或澄清。
wsMaster
和wbData
。在VBE中,转到工具 - &gt;设置此选项。lastRowToPaste
设置为大于LastRow
的1000。 1000的意义是什么?NextRow
和LastRow
首字母大写。所有其他变量都有一个小写的首字母。您应该使用一致的命名约定。NextRow
的目的是什么?您设置其值,然后再也不使用它。rowToPaste
设置为lastCheckedRow
,这是一个尚未初始化的变量。它的默认值是0,所以rowToPaste
是0.在你Do...Loop
的第一次迭代中,你将rowToPaste递增1,所以第一次通过,它等于1,这是你的错误的原因为了解决这个问题,请对代码进行以下更改:
更改
rowToPaste = lastCheckedRow
到此:
rowToPaste = 2
并在循环结束时增加rowToPaste而不是开头:
...
End If
rowToPaste = rowToPaste + 1
Loop While (rowToPaste < lastRowToPaste)