在VBA中存档到另一个工作簿
一旦列(V)标记为“是”,我将尝试创建存档工作簿。我有宏功能,但当我今天下午再次测试它时,我收到了超出范围的错误。我已经检查了工作簿/工作表的名称,它们是正确的,并且两个工作簿位于同一文件夹中。我试着排除故障,发现它只在两个工作簿都打开时运行。是否有一种方法可以在不打开归档工作簿的情况下运行此功能?(我是VBA新手,正在自学,因此非常感谢您的帮助!)在VBA中存档到另一个工作簿,vba,excel,Vba,Excel,一旦列(V)标记为“是”,我将尝试创建存档工作簿。我有宏功能,但当我今天下午再次测试它时,我收到了超出范围的错误。我已经检查了工作簿/工作表的名称,它们是正确的,并且两个工作簿位于同一文件夹中。我试着排除故障,发现它只在两个工作簿都打开时运行。是否有一种方法可以在不打开归档工作簿的情况下运行此功能?(我是VBA新手,正在自学,因此非常感谢您的帮助!) 您问题中的代码的编写方式要求归档工作簿处于打开状态才能正常工作 下面的重构代码应该为您提供所需的信息。它将在每次需要时打开归档工作簿,更新它,然后
您问题中的代码的编写方式要求归档工作簿处于打开状态才能正常工作 下面的重构代码应该为您提供所需的信息。它将在每次需要时打开归档工作簿,更新它,然后关闭它 您可以先检查工作簿是否已打开,这样做会更好。(互联网上到处都有这方面的功能)
如果保存宏的书已关闭,宏将如何运行?Scott,我在解决其他问题时一直在使用您的代码,今天下午我再次测试了它,收到了超出范围的错误。我已经检查了工作簿/工作表的名称,它们是正确的。我曾尝试进行故障排除,但现在当我在第V列中选择“是”时,宏根本没有注册。可能是什么问题?突出显示的行是“Set wb=…”
宏根本不注册
-确保Application.EnableEvents=True
。您可以使用即时窗口将其设置回原位。如果您的代码中途中断,它可能没有将其重新打开。对于此错误,请确保工作簿路径和名称对您的目录有效。
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
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