【问题标题】:Excel VBA Copying to Blank RowExcel VBA复制到空白行
【发布时间】:2013-10-14 02:02:30
【问题描述】:

我在使用 VBA 子例程时遇到了一些困难,该例程获取在 Excel 工作簿的第一张表 -“条目”上输入的信息,并将其粘贴到同一工作簿 -“数据库”内的单独工作表中。我需要的是将数据添加到数据库的下一个空行中。

我明白这是一个很常见的问题,但我一直在 Google 上寻找今天早上最好的部分,但无法完全理解!到目前为止我管理的代码会复制数据,但总是会覆盖第一行:

Sub CopyDataToDatabase()

Application.ScreenUpdating = False

Dim r As Range
Set r = Sheets("Entry").Range("B6:M6")
For Each cell In r
    If IsEmpty(cell) Then
        MsgBox ("Error - all boxes must be filled in!")
        Cancel = True
        Exit Sub
        Exit For
    End If
Next

Dim NextRow As Range
Set NextRow = Sheets("Database").Range("A2:L2").End(xlUp).Offset(1, 0)
'  Set NextRow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Entry").Range("B6:M6").Copy
NextRow.PasteSpecial (xlValues)

MsgBox ("Data added successfully!")

Sheets("Entry").Range("B6:M6").ClearContents

Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Set NextRow 的注释是我尝试的另一种方法,但不起作用(错误是“需要对象”)。

感谢您提供任何帮助,如果您能解释一下就更是如此 - 因为我对 VBA 有点陌生!

提前致谢。

【问题讨论】:

  • 我建议查看此链接stackoverflow.com/questions/11169445/… 要查找 Col A 中的最后一个单元格,请使用下面@ChrisNeilson 指定的方法。但是,如果 Col A Last 单元格可能与 Col B - Col L 不同,则使用方法 .Find 查找最后一个单元格,然后使用它来创建范围。

标签: vba excel


【解决方案1】:

您注释掉的行几乎是正确的方法。试试这个

Set NextRow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Offset(1,0)

【讨论】:

  • + 1 如果所有列(A 到 L)都具有相同的 lastrow,这应该可以工作。
  • 完美运行 - 感谢您的帮助。是的,幸运的是所有数据值都必须填写,因此不同的列最后一行不是问题!
【解决方案2】:

有Sheet属性UsedRange,但根据我的经验,它很容易出错。我总是这样做的方式是遍历行以找到第一个空行。

Dim iRow as integer
iRow = 1
Dim ws as Worksheet
Set ws = Worksheets("Database")
Do While ws.Cells(iRow, 1) <> ""
    iRow = iRow + 1
Loop

一般而言,在编写 VBA 代码时,我会尽量避免模仿我作为用户使用 Excel 所做的事情(例如使用 Selection 对象或模拟按键)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多