Vba 在列中查找下一个空单元格时避免合并单元格

Vba 在列中查找下一个空单元格时避免合并单元格,vba,excel,Vba,Excel,我有一个宏,可以打开文档,复制某列中的最后一行,并将该值粘贴到另一个工作簿中我遇到问题的下一个空单元格中。这在以前是有效的,但是在这个特定的文档中,第一行有合并并居中的单元格,包括(B)列,我希望找到下一个空单元格并粘贴其中的值。当我运行代码时,会收到一条“此操作要求合并的单元格大小相同”的消息。在下面的代码中,我尝试将rowToPaste更改为2(用合并的单元格绕过第一行),这会使excel崩溃。如何使宏在检查第一个空单元格时绕过第一行,或找到另一种方法来避免大小相同的合并单元格问题?提前谢谢

我有一个宏,可以打开文档,复制某列中的最后一行,并将该值粘贴到另一个工作簿中我遇到问题的下一个空单元格中。这在以前是有效的,但是在这个特定的文档中,第一行有合并并居中的单元格,包括(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
Private子命令按钮1\u单击()
下一排一样长,最后一排一样长
Dim vMax作为变量
Dim rowToPaste为整数
将lastRowToPaste设置为整数
Dim lastCheckedRow为整数
设置wsMaster=ThisWorkbook.Sheets(“2013财年预算——东海岸”)
NextRow=wsMaster.Range(“A”&Rows.Count).End(xlUp).Row+1
设置wbDATA=Workbooks.Open(“C:\Documents and Settings\Michael Palkovitz\My Documents\Test\PDF to excel.xlsm”)
带WBS数据表(“8A”)
LastRow=.Range(“B”和.Rows.Count).End(xlUp).Row
如果LastRow>1,则
.Range(“B”和LastRow)。复制
lastRowToPaste=LastRow+1000
rowToPaste=lastCheckedRow
做
rowToPaste=rowToPaste+1
如果为空(wsMaster.Range(“B”和rowtopast)),则
wsMaster.Range(“B”和rowtopast).paste特殊XLPaste值
wsMaster.Range(“B”和rowtopast).paste特殊XLPaste格式
lastCheckedRow=rowToPaste
退出Do
如果结束
循环时(rowToPaste
我开始对你的问题发表评论,但我认为这将更容易理解为答案

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

  • 始终需要变量声明<代码>wsMaster和
    wbData
    未声明。在VBE中,转到工具-->选项以设置此选项
  • 您可以将一些行变量声明为整数,而将其他行变量声明为long。始终使用long以避免溢出错误
  • 您将
    lastrowtoplaste
    设置为比
    LastRow
    大1000。1000的意义是什么
  • NextRow
    LastRow
    将第一个字母大写。所有其他变量都有一个小写的第一个字母。您应该使用一致的命名约定
  • 下一步的目的是什么?您设置了它的值,然后再也不用它了
  • 您将
    rowToPaste
    设置为
    lastCheckedRow
    ,该变量本身尚未初始化。它的默认值为0,因此
    rowtopast
    为0。在
    Do…Loop
    的第一次迭代中,您将rowtopast增加1,因此第一次通过时,它等于1,这是导致错误的原因
  • 要克服此问题,请对代码进行以下更改:

    改变

    rowToPaste = lastCheckedRow
    
    为此:

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

        ...
        End If
        rowToPaste = rowToPaste + 1
    Loop While (rowToPaste < lastRowToPaste)
    
    。。。
    如果结束
    rowToPaste=rowToPaste+1
    循环时(rowToPaste
    出现错误的行是“wsMaster.Range(“B”&rowtopast.pasteValues”。我很感谢关于其他编码技巧的建议,我仍然处于编写代码的学习过程的开始阶段。在这种情况下,如果我可以绕过第一行数据,我相信不会发生错误,但我不确定如何绕过我的“if IsEmpty”语句中的第一行。谢谢你的帮助,希望在我继续编写代码的同时,我自己能够更好地找到这样的更正,这样我就不必给你们带来麻烦了!不客气,你没有打扰任何人。我们都去过你现在的地方。祝你旅途愉快!