你好:)如果Sheet2中该行的D列(库存号)与表1中任何一行的G列匹配,并且如果列AY的值,我需要自动excel(因此vba将是首选的)删除Sheet2中的一行对于sheet1中的那一行是一个日期。有谁知道如何做到这一点?如果我不清楚,请告诉我,我很乐意进一步澄清。 非常感谢,elias
答案 0 :(得分:0)
我会从第一张纸上读取数据,然后查看第二张表格中的匹配项。您需要为adodb记录集添加引用。在工具下拉菜单的VBA IDE中选择引用。选择“Microsoft ActiveX Data Objects 2.8 Library”。
Private Sub CommandButton8_Click()
Dim rs As New ADODB.Recordset
Dim ws As Excel.Worksheet
Dim lRow As Long
Set ws = ActiveWorkbook.Sheets("Sheet1")
ws.Activate
'Add fields to your recordset for storing data.
With rs
.Fields.Append "Row", adInteger
.Fields.Append "StockNumber", adChar, 50
'.Fields.Append "DateAY", adChar, 50
.Fields.Append "DateAY", adDate
.Open
End With
lRow = 1
'Loop through and record what is in the columns
Do While lRow <= ws.UsedRange.Rows.count
rs.AddNew
rs.Fields("Row").Value = lRow
rs.Fields("StockNumber").Value = ws.Range("G" & lRow).Value
rs.Fields("DateAY").Value = ws.Range("AY" & lRow).Value
rs.Update
lRow = lRow + 1
ws.Range("A" & lRow).Activate
Loop
If rs.EOF = False Then
rs.MoveFirst
End If
'Switch to the second worksheet
Set ws = Nothing
Set ws = ActiveWorkbook.Sheets("Sheet2")
ws.Activate
'Loop through the second sheet looking at the stock numbers.
lRow = 1
Do While lRow <= ws.UsedRange.Rows.count
rs.Filter = ""
rs.Filter = "StockNumber='" & ws.Range("D" & lrow).Value & "'"
if rs.RecordCount > 0 Then
'We have a match, now check if there is a date.
If trim(rs.Fields("DateAY")) <> "" then
'It has a date, delete the current row
ws.Rows(lRow).entireRow.Delete
lRow = lRow - 1
End if
End if
lRow = lRow + 1
ws.Range("A" & lRow).Activate
Loop
End sub
我不确定删除行时是否需要增加行,因为下一行现在将是您当前的行。您可能需要添加
lRow = lRow - 1
删除当前行后立即。这将使它返回一行,然后正常的增量将有效地将其设置回当前行。