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

Posted

技术标签:

【中文标题】在列中找到下一个空单元格时避免合并单元格【英文标题】:Avoiding merged cell when find next empty cell in a column 【发布时间】:2013-07-11 17:28:58 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

    始终需要变量声明。 wsMasterwbData 未声明。在 VBE 中,转到工具 --> 选项进行设置。 您将一些行变量声明为整数,而将其他变量声明为 long。始终使用 long 来避免溢出错误。 您将lastRowToPaste 设置为比LastRow 大1000。 1000有什么意义? NextRowLastRow 的第一个字母大写。所有其他变量都有一个小写的第一个字母。您应该使用一致的命名约定。 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)

【讨论】:

出现错误的行是 'wsMaster.Range("B" & rowToPaste).PasteSpecial xlPasteValues'。我感谢有关其他编码技巧的建议,我仍处于编写代码学习过程的开始阶段。在这种情况下,如果我可以绕过第一行数据,我相信不会发生错误,但我不知道该怎么做 绕过我的“if IsEmpty”语句中的第一行。 感谢您的帮助,希望随着我不断编写代码,我会更好地自己找到这样的更正,这样我就不必打扰你们了! 不客气,你没有打扰任何人。我们都去过你所在的地方。享受旅程!

以上是关于在列中找到下一个空单元格时避免合并单元格的主要内容,如果未能解决你的问题,请参考以下文章

根据单元格值合并范围内的单元格,但最后一个单元格没有被合并

java导出合并excel单元格时,导出的第一行可以显示出标题,第二行就先不出来是怎么回事?

如何将具有数据的单元格与同一列中的空白单元格合并?

在列中查找值,填充'直到非空白单元格

怎么把两个单元格合并成一个

java poi 导出 excel时 ,合并单元格的问题