如果库存号相同且在sheet1中输入日期,则自动删除表2中的行?

时间:2015-07-17 18:02:22

标签: excel vba excel-vba

你好:)如果Sheet2中该行的D列(库存号)与表1中任何一行的G列匹配,并且如果列AY的值,我需要自动excel(因此vba将是首选的)删除Sheet2中的一行对于sheet1中的那一行是一个日期。有谁知道如何做到这一点?如果我不清楚,请告诉我,我很乐意进一步澄清。 非常感谢,elias

1 个答案:

答案 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
删除当前行后立即

。这将使它返回一行,然后正常的增量将有效地将其设置回当前行。