Excel 更新代码,使其在选项卡已移动到新工作簿的情况下正常工作

Excel 更新代码,使其在选项卡已移动到新工作簿的情况下正常工作,excel,vba,loops,worksheet,Excel,Vba,Loops,Worksheet,我有一个检查表中数据的代码&如果在主表“Mini master”中添加新行,它会将其添加到另一个选项卡“Critical Path”的列表中 这确实很有效,但现在我希望将“关键路径”保存在自己的工作簿中,而不是同一工作簿的选项卡中 我试图更新代码以引用新的文件位置,但它不太起作用 Sub test() Dim Ws As Workbook, wsSource As Worksheet Set Ws = Workbook.Open("U:\Buying\BUYING\B

我有一个检查表中数据的代码&如果在主表“Mini master”中添加新行,它会将其添加到另一个选项卡“Critical Path”的列表中

这确实很有效,但现在我希望将“关键路径”保存在自己的工作簿中,而不是同一工作簿的选项卡中

我试图更新代码以引用新的文件位置,但它不太起作用

 Sub test()
    Dim Ws As Workbook, wsSource As Worksheet
    Set Ws = Workbook.Open("U:\Buying\BUYING\Buying Spreadsheets\MiniMaster.xlsm")
    Dim toWs As Workbook, wsTarget As Worksheet
    Set toWs = Workbook.Open("U:\Buying\BUYING\Buying Spreadsheets\CriticalPath.xlsm")
    
    Dim rngDB As Range, rngT As Range
    Dim vDB As Variant, vR() As Variant
    Dim i As Long, n As Long, j As Integer
    
    Set wsSource = Ws.Sheets("MINI MASTER")
    Set wsTarget = toWs.Sheets("CRITICAL PATH")

    vDB = wsSource.Range("a1").CurrentRegion
    With wsTarget
        Set rngDB = .Range("a2", .Range("a" & Rows.Count).End(xlUp))
        For i = 2 To UBound(vDB, 1)
            If WorksheetFunction.CountIf(rngDB, vDB(i, 1)) Then
            Else
                n = n + 1
                ReDim Preserve vR(1 To 4, 1 To n)
                For j = 1 To 4
                    vR(j, n) = vDB(i, j)
                Next j
            End If
        Next i
        Set rngT = .Range("a" & Rows.Count).End(xlUp)(2)
        If n Then
            rngT.Resize(n, 4) = WorksheetFunction.Transpose(vR)
        End If
    End With
End Sub

不确定我在这里做错了什么&希望能得到一些帮助来解决这个问题。

什么是“不太正常”呢?错误消息或只是不执行您想要的操作?您显示的代码是在哪个工作簿中编写的?是不是
MiniMaster.xlsm
?如果是这样,您无法再次打开它,需要将其更改为
Set Ws=Workbook.open(“U:\Buying\Buying\Buying Spreadsheets\MiniMaster.xlsm”)
Set Ws=ThisWorkbook
@SJR-我收到一个错误运行时错误424-需要对象。@Pᴇʜ-我希望它在“(“U:\Buying\Buying\Buying Spreadsheets\CriticalPath.xlsm”)中运行。我已尝试更改“toWs=thisworkbook”,但出现上述相同错误。
工作簿。打开
>
工作簿。打开
,但如上所述,如果工作簿已打开,请不要使用此选项。
 Sub test()
    Dim Ws As Workbook, wsSource As Worksheet
    Set Ws = Workbook.Open("U:\Buying\BUYING\Buying Spreadsheets\MiniMaster.xlsm")
    Dim toWs As Workbook, wsTarget As Worksheet
    Set toWs = Workbook.Open("U:\Buying\BUYING\Buying Spreadsheets\CriticalPath.xlsm")
    
    Dim rngDB As Range, rngT As Range
    Dim vDB As Variant, vR() As Variant
    Dim i As Long, n As Long, j As Integer
    
    Set wsSource = Ws.Sheets("MINI MASTER")
    Set wsTarget = toWs.Sheets("CRITICAL PATH")

    vDB = wsSource.Range("a1").CurrentRegion
    With wsTarget
        Set rngDB = .Range("a2", .Range("a" & Rows.Count).End(xlUp))
        For i = 2 To UBound(vDB, 1)
            If WorksheetFunction.CountIf(rngDB, vDB(i, 1)) Then
            Else
                n = n + 1
                ReDim Preserve vR(1 To 4, 1 To n)
                For j = 1 To 4
                    vR(j, n) = vDB(i, j)
                Next j
            End If
        Next i
        Set rngT = .Range("a" & Rows.Count).End(xlUp)(2)
        If n Then
            rngT.Resize(n, 4) = WorksheetFunction.Transpose(vR)
        End If
    End With
End Sub