0

我有一个宏,它可以打开一个文档,复制某一列中的最后一行并将该值粘贴到另一个我遇到问题的工作簿中的下一个空单元格中。这以前有效,但在这个特定的文档中,第一行包含合并和居中的单元格,包括列 (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
4

1 回答 1

0

我开始对您的问题发表评论,但认为这将更容易阅读作为答案。

有一些事情需要清理或澄清。

  1. 总是需要变量声明。wsMaster并且wbData没有声明。在 VBE 中,转到工具 --> 选项进行设置。
  2. 您将一些行变量声明为整数,将其他变量声明为 long。始终使用 long 来避免溢出错误。
  3. 您设置lastRowToPaste为大于 1000 LastRow。1000的意义是什么?
  4. NextRow并将LastRow第一个字母大写。所有其他变量都有一个小写的第一个字母。您应该使用一致的命名约定。
  5. 目的是NextRow什么?你设置它的值,然后永远不要使用它。
  6. 您设置rowToPasteequal to lastCheckedRow,一个本身尚未初始化的变量。它的默认值为 0,因此rowToPaste为 0。在第一次迭代中Do...Loop,您将 rowToPaste 增加 1,因此第一次通过时,它等于 1,这是导致错误的原因。

要克服这一点,请对您的代码进行以下更改:

改变

rowToPaste = lastCheckedRow

对此:

rowToPaste = 2

并在循环结束而不是开始时增加 rowToPaste:

    ...
    End If
    rowToPaste = rowToPaste + 1
Loop While (rowToPaste < lastRowToPaste)
于 2013-07-11T19:28:03.840 回答