[英]Archiving to another workbook in VBA
一旦列(V)標記為“是”,我試圖創建一個存檔工作簿。 我有宏功能,但今天下午再次測試時,收到超出范圍的錯誤。 我已經檢查了我的工作簿/工作表的名稱,它們的名稱正確無誤,並且兩個工作簿都在同一文件夾中。 我嘗試進行故障排除,並且發現它僅在兩個工作簿都打開時才運行。 有沒有一種方法可以在不打開存檔工作簿的情況下運行?(我是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
問題中代碼的編寫方式要求打開“存檔工作簿”才能使其正常工作。
下面的重構代碼應該可以滿足您的需求。 每次需要時,它將打開存檔工作簿,對其進行更新,然后將其關閉。
您可以通過先檢查工作簿是否已打開來使其變得更好。 (互聯網上有一些功能)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.