VBA-使用其他表格中的特定数据自动填充表格

时间:2018-07-24 15:26:39

标签: vba excel-vba

我有两个表,一个表包含项目的所有信息,另一个表显示主表中过期或几乎过期的行。

我想做的是每次打开工作表时,使用主表中的所有过期变量更新过期表。

我面临的问题是,在使用For循环时,它会在将下一个值添加到Expired表之前添加许多空单元格。

过期表代码:

    Private Sub warning_list()
    Dim wsExp As Worksheet: Set wsExp = Worksheets("EXPIRED_LIST")
    Dim wsList As Worksheet: Set wsList = Worksheets("LIST")
    Dim digsafe As String
    Dim exp_date As Date
    Dim time_left As Long
    Dim i As Integer
    Dim warning_val As String: warning_val = "OK"
    Dim warning_tbl As ListObject: Set warning_tbl = wsExp.ListObjects("Table3")
    Dim warning_or As ListRow
    Dim list_tbl As ListObject: Set list_tbl = wsList.ListObjects("Table1")
    Dim list_or As ListRow

    Set warning_or = warning_tbl.ListRows.Add

    For i = 1 To wsList.ListObjects("Table1").DataBodyRange.Rows.Count
        If wsList.ListObjects("Table1").DataBodyRange.Cells(i, 24).Value = warning_val Then
            digsafe = list_tbl.DataBodyRange.Cells(i, 1).Value
            exp_date = list_tbl.DataBodyRange.Cells(i, 2).Value

            warning_or.Range(1, 1).Value = digsafe
            warning_or.Range(1, 2).Value = exp_date

        End If
    Next i


End Sub

编辑: 我还具有以下代码来自动运行宏。

'Action whenever sheet is opened
 Private Sub Worksheet_Activate()
   Call warning_list
 End Sub

1 个答案:

答案 0 :(得分:2)

VBA宏的另一种解决方案是在“完成”表中创建最后一列,说明该列是否已过期。您可以使用=IF(函数进行测试。然后,使用PIVOT TABLE

仅过滤过期列上具有“ YES”的行

enter image description here