Vba 在列中查找下一个空单元格时避免合并单元格
我有一个宏,可以打开文档,复制某列中的最后一行,并将该值粘贴到另一个工作簿中我遇到问题的下一个空单元格中。这在以前是有效的,但是在这个特定的文档中,第一行有合并并居中的单元格,包括(B)列,我希望找到下一个空单元格并粘贴其中的值。当我运行代码时,会收到一条“此操作要求合并的单元格大小相同”的消息。在下面的代码中,我尝试将rowToPaste更改为2(用合并的单元格绕过第一行),这会使excel崩溃。如何使宏在检查第一个空单元格时绕过第一行,或找到另一种方法来避免大小相同的合并单元格问题?提前谢谢Vba 在列中查找下一个空单元格时避免合并单元格,vba,excel,Vba,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
我开始对你的问题发表评论,但我认为这将更容易理解为答案
有一些事情需要清理或澄清
wbData
未声明。在VBE中,转到工具-->选项以设置此选项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”语句中的第一行。谢谢你的帮助,希望在我继续编写代码的同时,我自己能够更好地找到这样的更正,这样我就不必给你们带来麻烦了!不客气,你没有打扰任何人。我们都去过你现在的地方。祝你旅途愉快!