Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 是否从用For Each循环填充的表中删除过时的值?_Excel_Vba - Fatal编程技术网

Excel 是否从用For Each循环填充的表中删除过时的值?

Excel 是否从用For Each循环填充的表中删除过时的值?,excel,vba,Excel,Vba,当前代码在以“Rev”开头的每个工作表中循环,并返回一个特定的单元格值,该值填充工作表“table”上的一个表 这个很好用。但是,如果删除了修订工作表,表工作表中的值将保留 有了这些背景信息,什么样的解决方案可以只保留当前版本工作表值而不填充表 Sub Rev_loop() Dim ws As Worksheet Dim n As Long For Each ws In Worksheets If ws.Name Like "Rev*" Then n = n + 1

当前代码在以“Rev”开头的每个工作表中循环,并返回一个特定的单元格值,该值填充工作表“table”上的一个表

这个很好用。但是,如果删除了修订工作表,表工作表中的值将保留

有了这些背景信息,什么样的解决方案可以只保留当前版本工作表值而不填充表

Sub Rev_loop()

Dim ws As Worksheet
Dim n As Long

For Each ws In Worksheets
    If ws.Name Like "Rev*" Then
        n = n + 1
        Worksheets("Table").Cells(n).Value = ws.Range("B2").Value

    End If

Next ws

End Sub

先清理桌子。然后像以前一样反复浏览工作表

大概是这样的:

Worksheets("Table").Range("B2:B99").ClearContents

先清理桌子。然后像以前一样反复浏览工作表

大概是这样的:

Worksheets("Table").Range("B2:B99").ClearContents

如果不想在下一个循环之前清除表,则必须记住某个地方的工作表名称

通过本例,您可以将图纸的名称及其值一起存储在前两列中:

Sub Rev_loop()
    Dim ws As Worksheet
    Dim n As Long

    With Worksheets("Table")
        n = 0
        For Each ws In Worksheets
            If ws.Name Like "Rev*" Then
                n = n + 1
                .Cells(n, 1).Value = ws.Name
                .Cells(n, 2).Value = ws.Range("B2").Value
            End If
        Next ws
    End With
End Sub
通过第二个循环,您可以比较存储的工作表的名称,并删除所有名称过期的行:

Sub Correct_loop()
    Dim ws As Worksheet
    Dim StillValid As Boolean
    Dim n As Long

    With Worksheets("Table")
        For n = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
            StillValid = False
            For Each ws In Worksheets
                If ws.Name = .Cells(n, 1).Value Then
                    StillValid = True
                    Exit For
                End If
            Next ws
            If Not StillValid Then .Rows(n).Delete
        Next n
    End With
End Sub

如果不想在下一个循环之前清除表,则必须记住某个地方的工作表名称

通过本例,您可以将图纸的名称及其值一起存储在前两列中:

Sub Rev_loop()
    Dim ws As Worksheet
    Dim n As Long

    With Worksheets("Table")
        n = 0
        For Each ws In Worksheets
            If ws.Name Like "Rev*" Then
                n = n + 1
                .Cells(n, 1).Value = ws.Name
                .Cells(n, 2).Value = ws.Range("B2").Value
            End If
        Next ws
    End With
End Sub
通过第二个循环,您可以比较存储的工作表的名称,并删除所有名称过期的行:

Sub Correct_loop()
    Dim ws As Worksheet
    Dim StillValid As Boolean
    Dim n As Long

    With Worksheets("Table")
        For n = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
            StillValid = False
            For Each ws In Worksheets
                If ws.Name = .Cells(n, 1).Value Then
                    StillValid = True
                    Exit For
                End If
            Next ws
            If Not StillValid Then .Rows(n).Delete
        Next n
    End With
End Sub

这段代码从哪里运行?工作表在运行时会消失吗?我使用窗体控件按钮运行此函数。工作表不会消失?那么,如果Rev工作表消失,为什么会出现问题?听起来好像您正在执行过程中删除它们。如果Rev工作表消失(被删除)。。。。然后下次运行此函数时(更新表值)。。。。我希望删除的工作表的值也从该for循环函数生成的表中删除。如果您不想要过时的数据,那么最好在重新生成它们之前清除持久值。此代码从何处运行?工作表在运行时会消失吗?我使用窗体控件按钮运行此函数。工作表不会消失?那么,如果Rev工作表消失,为什么会出现问题?听起来好像您正在执行过程中删除它们。如果Rev工作表消失(被删除)。。。。然后下次运行此函数时(更新表值)。。。。我希望删除的工作表的值也从这个for循环函数生成的表中删除。如果您不想要过时的数据,那么最好在重新生成它们之前清除持久值。