簡體   English   中英

存檔到VBA中的另一個工作簿

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM