在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来说有点新鲜!
提前致谢。
答案 0 :(得分:1)
您注释掉的行几乎是正确的方法。试试这个
Set NextRow = Sheets("Database").Range("A" & Rows.Count).End(xlUp).Offset(1,0)
答案 1 :(得分:0)
有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
对象或模拟按键)。