Excel 如何通过VBA检查行是否正确复制到其他图纸。擅长?

Excel 如何通过VBA检查行是否正确复制到其他图纸。擅长?,excel,vba,Excel,Vba,我已将工作簿包含到工作表(打开的项目和关闭的项目)。 我有一个宏,可以根据特定条件将一些行从工作表(已选择的项目)复制到工作表(已关闭的项目)。 大多数时候;宏可以正常工作。 但由于引用的工作簿是共享的,因此某些行没有完全复制。 因此,如何使用Vba检查数据是否正确复制到图纸(闭合项)。 注意:单元格(C:E)中的数据是唯一的,可用于检查是否复制了数据。 检查缺少的行 我想你想在另一张纸上看到它 添加一个名为'DeviationsSht'的工作表并运行以下代码 Sub CheckDiscrep

我已将工作簿包含到工作表(打开的项目和关闭的项目)。 我有一个宏,可以根据特定条件将一些行从工作表(已选择的项目)复制到工作表(已关闭的项目)。
大多数时候;宏可以正常工作。 但由于引用的工作簿是共享的,因此某些行没有完全复制。 因此,如何使用Vba检查数据是否正确复制到图纸(闭合项)。 注意:单元格(C:E)中的数据是唯一的,可用于检查是否复制了数据。

检查缺少的行

我想你想在另一张纸上看到它

添加一个名为'DeviationsSht'的工作表并运行以下代码

Sub CheckDiscrepancy()
    
    Dim sourceRng As Range, fndRng As Range, destlRow As Long, destRng As Range, rng As Range, ws As Worksheet
    
    Set sourceRng = Worksheets("Opened_Items").Range("B3", Worksheets("Opened_Items").Range("B" & Rows.Count).End(xlUp))
    Set fndRng = Worksheets("Closed_Items").Range("E3", Worksheets("Closed_Items").Range("E" & Rows.Count).End(xlUp))
    
    destlRow = Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Row
    
        With Worksheets("DeviationsSht").Range("A2", "F" & destlRow).Cells
        
            .Clear
            .UseStandardHeight = True
            .UseStandardWidth = True
        
        End With
    
        For Each rng In sourceRng
        
            If rng.Value = "Close" Then
            
                If fndRng.Find(What:=rng.Offset(0, 3).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
                    
                        rng.EntireRow.Copy Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                        destlRow = Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Row
                        
                        With Worksheets("DeviationsSht").Range("A2", "F" & destlRow)
                        
                            .WrapText = False
                            .Columns.AutoFit
                        
                        End With
                
                End If
            
            End If
        
        Next rng
    
End Sub
Sub Copy_to_Closed_Sheet()

    Dim sourceRng As Range, lastrow As Long, destRng As Range, rng As Range
    
    Set sourceRng = Worksheets("Opened_Items").Range("B3", Worksheets("Opened_Items").Range("B" & Rows.Count).End(xlUp))

    lastrow = Worksheets("Closed_Items").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
    
    Worksheets("Closed_Items").Range("A3", "F" & lastrow).Cells.ClearContents
    
    
        For Each rng In sourceRng
        
            If rng.Value = "Close" Then
            
                Set destRng = Worksheets("Closed_Items").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                rng.EntireRow.Copy destRng
                
            End If
            
        Next rng

End Sub
关于复制粘贴不适用于所有行,请尝试以下代码

Sub CheckDiscrepancy()
    
    Dim sourceRng As Range, fndRng As Range, destlRow As Long, destRng As Range, rng As Range, ws As Worksheet
    
    Set sourceRng = Worksheets("Opened_Items").Range("B3", Worksheets("Opened_Items").Range("B" & Rows.Count).End(xlUp))
    Set fndRng = Worksheets("Closed_Items").Range("E3", Worksheets("Closed_Items").Range("E" & Rows.Count).End(xlUp))
    
    destlRow = Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Row
    
        With Worksheets("DeviationsSht").Range("A2", "F" & destlRow).Cells
        
            .Clear
            .UseStandardHeight = True
            .UseStandardWidth = True
        
        End With
    
        For Each rng In sourceRng
        
            If rng.Value = "Close" Then
            
                If fndRng.Find(What:=rng.Offset(0, 3).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
                    
                        rng.EntireRow.Copy Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                        destlRow = Worksheets("DeviationsSht").Range("A" & Rows.Count).End(xlUp).Row
                        
                        With Worksheets("DeviationsSht").Range("A2", "F" & destlRow)
                        
                            .WrapText = False
                            .Columns.AutoFit
                        
                        End With
                
                End If
            
            End If
        
        Next rng
    
End Sub
Sub Copy_to_Closed_Sheet()

    Dim sourceRng As Range, lastrow As Long, destRng As Range, rng As Range
    
    Set sourceRng = Worksheets("Opened_Items").Range("B3", Worksheets("Opened_Items").Range("B" & Rows.Count).End(xlUp))

    lastrow = Worksheets("Closed_Items").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
    
    Worksheets("Closed_Items").Range("A3", "F" & lastrow).Cells.ClearContents
    
    
        For Each rng In sourceRng
        
            If rng.Value = "Close" Then
            
                Set destRng = Worksheets("Closed_Items").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                rng.EntireRow.Copy destRng
                
            End If
            
        Next rng

End Sub

您可以使用VLoopUp检查结果,您真的需要VBA吗?请考虑另一种设置:只保留一个具有真值或假值的列的表,这意味着“关闭”或“未关闭”。用户可以从验证下拉列表中选择True/False,也可以“根据特定条件”自动设置该值。通过应用过滤器,可以显示关闭或打开位置。如果要自动执行此操作,请创建一个切换按钮,用于调用应用一个过滤器或另一个过滤器的宏。这样,既然没有复制,就不会有复制错误。“有些行没有完全复制”-这是否意味着有些行根本没有复制,或者只复制了部分行?@Kin Siang。请您使用Vlookup帮助VBA。您能在未结项上添加公式以供检查吗?因为这将变得非常容易解决,我将根据您的意见考虑解决方案第一个代码(子检查差异),它复制了行(关闭),但在工作表上粘贴了多次相同的数据(“偏差”)。第二个代码(复制到关闭的工作表),粘贴的数据在行(1和2)中移动了单元格。甚至我将{Offset(1,0)}修改为Offset(2,0),但相同problem@Waleed_wwm它对我仍然有效。在第二个代码(复制到关闭的工作表)中,没有插入或向下移动单元格的行。如果当前的数据是机密的,你能在这里上传带有模拟数据的文件吗?关于第一个代码,您确定名为“Open_Items”的工作表中的数据没有重复吗?如果有重复的数据在那里,那么它将重复在'DeviationsSht'。我发现没有办法在这里上传文件,所以我上传到这个网站@Waleed_wwm上面给出的代码已经修改。请立即复制上述代码并检查。它应该是有效的。