如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库
Posted
技术标签:
【中文标题】如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库【英文标题】:How to copy a reusable multi row/column table from one excel worksheet to a database on another worksheet 【发布时间】:2018-07-24 10:57:22 【问题描述】:我对 VBA 编码相当陌生,我想知道是否可以执行以下操作?
我有一个可重复使用的输入工作表,其中包含一个包含 24 列和 10 行的表格等元素。我希望能够将许多行添加到另一个工作表上的数据库中。 我设法找到了一些允许单行更新但多行没有成功的代码。
任何建议将不胜感激。
谢谢
伊恩
代码如下所示:
子 UpdateLogWorksheet()
Dim historyWks As Worksheet
Dim inputWks As Worksheet
Dim nextRow As Long
Dim oCol As Long
Dim myCopy As Range
Dim myTest As Range
Dim lRsp As Long
Set inputWks = Worksheets("Input")
Set historyWks = Worksheets("PartsData")
oCol = 3 'order info is pasted on data sheet, starting in this column
'check for duplicate order ID in database
If inputWks.Range("CheckID") = True Then
lRsp = MsgBox("Order ID already in database. Update record?", vbQuestion + vbYesNo, "Duplicate ID")
If lRsp = vbYes Then
UpdateLogRecord
Else
MsgBox "Please change Order ID to a unique number."
End If
Else
'cells to copy from Input sheet - some contain formulas
Set myCopy = inputWks.Range("OrderEntry")
With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With inputWks
'mandatory fields are tested in hidden column
Set myTest = myCopy.Offset(0, 2)
If Application.Count(myTest) > 0 Then
MsgBox "Please fill in all the cells!"
Exit Sub
End If
End With
With historyWks
'enter date and time stamp in record
With .Cells(nextRow, "A")
.Value = Now
.NumberFormat = "mm/dd/yyyy hh:mm:ss"
End With
'enter user name in column B
.Cells(nextRow, "B").Value = Application.UserName
'copy the order data and paste onto data sheet
myCopy.Copy
.Cells(nextRow, oCol).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End With
'clear input cells that contain constants
ClearDataEntry
如果结束
结束子
并附上输入表enter image description here
【问题讨论】:
是的,这是可能的,请您分享您的代码,或者您的数据布局的屏幕截图,以便我们给出适当的答案?谢谢。 您应该能够复制工作簿 1 中的整个新范围并将其复制,然后将其粘贴到数据库工作簿中的单元格(lastrow+1,1)中。 谢谢 Cyril - 你有我可以看的示例代码吗?正如我所说,我对此很陌生,所以我不能 100% 确定在哪些情况下使用哪些表扬等 @Iain 只是未来的一个 FYI,你应该使用 @username 来引起对预期人的注意,尽管每个评论行只能有一个电话,否则这个人很可能不会知道你已经回复了他们。我碰巧检查了这个,因为这个名字看起来很熟悉,只是碰巧看到你对我的评论。 @Cyril,谢谢!才刚刚开始在这里发帖所以还在学习绳索......谢谢你的代码,我看看能不能完成这项工作 【参考方案1】:回复评论的示例代码:
Dim lr as long, lc as long, lr2 as long
with ThisWorkbook.Sheets("Source")
lr = .cells(.rows.count,1).end(xlup).row
lc = .cells(1,.columns.count).end(xltoleft).column
.range(.cells(2,1),.cells(lr,lc)).copy
end with
with Workbooks("Database").Sheets("Dest")
lr2 = .cells(.rows.count,1).end(xlup).row
.cells(lr2+1,1).pastespecial xlvalues
end with
【讨论】:
稍作修改,效果很好,谢谢 @Iain 所以这不会保持打开状态,请您接受答案,并说明您所做的修改吗? mods 用于工作表名称和单元格行/列引用,以便将其复制到我的目标工作表上的特定区域。 @Iain 啊,标准的东西。不确定您是否意味着必须更改 with 语句或任何对象的工作方式。谢谢! 标准它可能对我来说很新!但我想我快到了……以上是关于如何将可重复使用的多行/多列表从一个 Excel 工作表复制到另一个工作表上的数据库的主要内容,如果未能解决你的问题,请参考以下文章