归档到VBA中的另一个工作簿

我试图创build一个存档工作簿一旦列(V)被标记为“是”。 我有macrosfunction,但是当我今天下午再次testing时,我收到了超出范围的错误。 我检查了我的工作簿/工作表的名称,它们是正确的,两个工作簿都在同一个文件夹中。 我试图排除故障,并且发现只有在两个工作簿都打开时才会运行。 如果没有存档工作簿的打开,有没有办法可以运行?(我是VBA的新手,我正在教自己,所以对此有所帮助)

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 22 Then If Target = "Yes" Then Application.EnableEvents = False nxtRow = Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("V" & Rows.Count).End(xlUp).Row + 1 Target.EntireRow.Copy _ Destination:=Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("A" & nxtRow) Target.EntireRow.Delete End If End If Application.EnableEvents = True End Sub 

在你的问题中编写代码的方式需要存档工作簿打开才能工作。

下面的重构代码应该给你想要的。 它会在每次需要时打开存档工作簿,更新它,然后closures它。

您可以通过首先检查工作簿是否已经打开来使其更好。 (有互联网上的function)

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 22 and Target = "Yes" Then Application.EnableEvents = False Dim wb as Workbook Set wb = Workbooks.Open(ThisWorkbook.Path & "\FPPE Archive.xlsm" Dim ws as Worksheet Set ws = wb.Worksheets("EUHM Onboard") nxtRow = ws.Range("V" & Rows.Count).End(xlUp).Row + 1 Target.EntireRow.Copy Destination:=ws.Range("A" & nxtRow) Target.EntireRow.Delete wb.Close True Application.EnableEvents = True End If End Sub