【问题标题】:How to paste to the last filled row without including first row (headers)?如何粘贴到最后填充的行而不包括第一行(标题)?
【发布时间】:2019-09-05 14:23:36
【问题描述】:

我试图将数据粘贴到工作表中最后填充行的末尾,但在循环的第一次迭代期间,我的语法覆盖了第 1 行中的标题。

我正在运行一个循环代码,该代码将多个电子表格中的变量复制并转置在一张工作表上。变量在源文件中的两列中,但在目标文件中的一行中。我使用“下一行”函数将第一列中的数据放入第一个空行。然后我想使用“最后一行”函数将第二列中的数据附加到同一行。但是,在第一次操作期间,我的代码不知道第一行数据和第一行变量名称之间的区别,因此第二列数据最终从数据的前半部分向上移动了一行。

Dim lastrow As Long
Dim nextrow As Long

Set sht = ThisWorkbook.Worksheets("Sheet1")

lastrow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
nextrow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row + 1
    'assigns objects for the last filled row and the next unfilled row


wb1.Worksheets("Database").Range("B1:B578").Copy
Workbooks("zzmaster.xlsx").Worksheets("Sheet1").Cells(nextrow, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
DoEvents
Application.CutCopyMode = False
    'copies the relevant data from Column B in Sheet 3 of the source file...
    'then transposes and pastes into the next available row of the destination file


wb1.Worksheets("Database").Range("C32:C578").Copy
Workbooks("zzmaster.xlsx").Worksheets("Sheet1").Cells(lastrow, 579).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
DoEvents
Application.CutCopyMode = False
    'copies the relevant data from Column C in Sheet 3 of the source file...
    'then tranposes and pastes into the same row as the previous function, beginning with...
    'the next cell after the last data point

有没有一种好方法可以调整语法,使数据不会粘贴到电子表格的第一行?目标是将源电子表格中的两列粘贴到同一行,并将循环中的每个电子表格粘贴到下一个可用的空行。我很感激任何建议。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我认为您想更改要粘贴到的单元格,您不想粘贴到 lastrow 它应该是 nextrow

    你有;

    Workbooks("zzmaster.xlsx").Worksheets("Sheet1").Cells(lastrow, 579).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    

    改成;

    Workbooks("zzmaster.xlsx").Worksheets("Sheet1").Cells(nextrow, 579).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    

    看起来它不仅是循环的第一次迭代,而且是所有循环。尝试在设置 lastrow 的位置添加断点并逐步执行以查看问题出现的位置,这将有助于逐步完成循环的几次迭代并评估它是否只发生一次。

    【讨论】:

    • 这是正确的。我没有考虑“nextrow”函数在粘贴之前如何对工作表的状态进行快照,所以它会为两个操作引用同一行。我按照您的建议做了,并且经过多次迭代后它是准确的。谢谢!
    • @NeverBrave 没问题。仅供参考 nextrow 是一个变量而不是一个函数,它的值被存储并且在下一次迭代中再次设置之前不会改变。
    【解决方案2】:

    假设您的标题位于第 1 行,您能否在此之后添加编码:

    lastrow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row

    如果 lastrow=1 则 lastrow=2

    【讨论】:

    • 你说得对,我的标题在第 1 行。不幸的是,这个解决方案没有成功。还有一个覆盖问题,它只是在第二行而不是第一行。 @T4roy 的解决方案解决了我的问题。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多