我试图在Excel中创建一个VBA程序来删除某些行并将这些已删除的行发送到访问数据库 . 这就是我想要的 workflow :
-
个人下载一个名为print.xlsx的CSV文件,该文件在Excel中打开,包含类似于下表所示的内容(显然此处的内容是随机的)
-
那个人还有一个主要的工作簿(看起来与此类似),它总是在桌面上打开,我们称之为mike.xlsm
-
该个人单击mike.xlsm中的一个按钮,该按钮执行应执行以下操作的宏:
-
删除mike.xlsm中未包含在print.xlsx中的所有行(基于标识号(在标志列中) . 没有数字会复制,因此这不是问题 .
-
从print.xlsx获取不在mike.xlsm中的任何行,并将它们添加到mike.xlsm,因此基本上,mike.xlsm存在与print.xlsx相同的行 . 这样做的原因是print.xlsx不包含mike.xlsm所做的所有列 . 但是,这不应该干扰代码,因为列位于两个工作簿中存在的列之后 . 麦克风工作簿中的其他列用于用户输入 .
-
将这些已删除的行发送到Access数据库,但是将附加列附加到包含工作簿名称(mike)的那些行,以便将来轻松查询多个人
我目前用于删除行的代码是:
Sub Delete_DNE()
Dim lRow As Long
Dim iCntr As Long
lRow = 4000
For iCntr = lRow To 1 Step -1
If Cells(iCntr, 5).Value = "DNE" Then
Rows(iCntr).Delete
End If
Next
End Sub
My question is: Does anyone have good code that will execute the above workflow, or suggestions for part of the code, to ultimately get to the full workflow?
我只是手动使用vlookup确定需要标记的内容"DNE"这意味着它在print.xlsx中不存在,然后手动将不在mike中的print.xlsx行复制到mike中 . 显然,如果我们希望有几个员工这样做,以及一个大型的条目访问数据库,这不是一种自动或有效的方法 . 谢谢!
以下代码在一个标记为可能重复的问题中,并且有用,但没有解决问题,主要是因为它将整个工作表传输到访问而不仅仅是特定的行;我只希望发送的已删除行访问:
Sub AccImport()
Dim acc As New Access.Application
acc.OpenCurrentDatabase "C:\Users\Public\Database1.accdb"
acc.DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="tblExcelImport", _
Filename:=Application.ActiveWorkbook.FullName, _
HasFieldNames:=True, _
Range:="Folio_Data_original$A1:B10"
acc.CloseCurrentDatabase
acc.Quit
Set acc = Nothing
End Sub
2 回答
好的,我会这样做的 . 这是非常通用的......需要由您修改以满足您的特定需求......
从Column2开始在ColumnI中显示'Sheet2'的任何内容(如果没有 Headers ,可能想要在Row1中开始),会从Sheet1剪切/粘贴到Sheet2
现在,将所有内容从Sheet2移动到Access DB .
多年来我没有用VBA编码,但你当然可以做你所描述的 . 这个过程会像:
创建空数组以保存已删除的行(数组) .
迭代您的行,在删除之前,将该数据推送到tempArray .
迭代完所有行后,将tempArray写入数据库 .