![](/img/trans.png)
[英]Copying a worksheet between workbooks using cells as guidance on what to copy
[英]Copy worksheet between workbooks and overwrite the current worksheet
我編寫了VBA代碼,用於打開目標工作簿,復制其中一個工作表,然后將其粘貼到當前工作簿中。
當我第二次或第三次運行它時...而不是覆蓋當前工作表,而是創建一個全新的工作表。
例如:工作表稱為“數據”,第一次是傳輸“數據”,第二次是“ data(2)”。
我還有另一個工作表,該工作表使用VLOOKUP函數查看此數據工作表的某些單元格,因此具有正確的名稱“數據”至關重要。
我曾考慮過在運行宏之前刪除當前(數據)文件,但是如果發生崩潰而丟失工作表怎么辦? 有更好的解決方案嗎?
注意:我正在從主工作簿運行宏,以獲取要從外部工作簿復制工作表。
Sub UpdateT()
Dim wb As Workbook
Dim aw As Workbook
'Open 2nd Workbook
Set aw = Application.ActiveWorkbook
Set wb = Workbooks.Open(Filename:="C:\Users\yilmadu00\Desktop\T.xlsx")
'Copy To Different Workbook
wb.Sheets("data").Copy After:=aw.Sheets("Data1")
'Close 2nd Workbook
aw.Save
wb.Close
aw.Sheets("data").Visible = False
ActiveWorkbook.Protect ("Password")
End Sub
檢查工作表是否存在的函數(貸記@ScottCrainer):
Function SheetExists(ws As String)
SheetExists = Not IsError(Application.Evaluate(ws & "!A1"))
End Function
注意:
它的確存在問題:如果工作表上的A1包含錯誤,它將返回假陰性。
您在代碼中使用了“ Activeworkbook”和“ Sheet(s)”,所以我一直在玩。
盡管您可以擁有第三本工作簿來運行代碼,但我猜您是從“ ActiveWorkbook ”中的模塊運行代碼的。 如果這是真的,那么使用“ ThisWorkbook ”代替它總是引用包含代碼(模塊)的工作簿會更正確 ,以避免在第三個工作簿上意外地運行代碼。
工作表是指工作表和統計表 ,再次,我猜想此代碼中不涉及工作表 ,因此使用“ 工作表 ”代替“ 工作表 ”會更正確)”。
Sub UpdateT()
Const cStrPath As String = "C:\Users\yilmadu00\Desktop\T.xlsx"
Const cStrAfter As String = "Data1"
Const cStrName As String = "data"
Const cStrOld As String = "data_old"
Dim aw As Workbook '1st workbook, 'ActiveWorkbook'
Dim wb As Workbook '2nd workbook
Dim oWs As Sheet 'Each sheet in workbook 'aw'
Dim blnFound As Boolean 'True if sheet(cStrName) was found
Set aw = ActiveWorkbook 'Create a reference to the ActiveWorkbook
Set wb = Workbooks.Open(Filename:=cStrPath) 'Open 2nd Workbook
With aw
' .UnProtect ("Password")
'Check each sheet in workbook 'aw'.
For Each oWs In aw.Sheets
With oWs
'Check if there already is a sheet with the name 'cStrName'.
If .Name = cStrName Then
.Name = cStrOld 'Rename the sheet.
blnFound = True 'Sheet(cStrName) was found.
Exit For 'Immediately stop checking, there can only be one.
End If
End With
Next
End With
With wb
'Copy sheet from 2nd workbook ('wb') to workbook 'wa'.
.Sheets(cStrName).Copy After:=aw.Sheets(cStrAfter)
.Close 'Close 2nd workbook ('wb').
End With
With aw
With Application
If blnFound = True Then 'Sheet(cStrName) was found.
.DisplayAlerts = False 'Disable showing delete message.
aw.Sheets(cStrOld).Delete 'Delete old version of sheet.
.DisplayAlerts = True
End If
End With
.Sheets(cStrName).Visible = False 'Hide sheet named 'cStrName'
.Protect ("Password")
.Save 'Save workbook 'aw'.
End With
End Sub
下次您要對工作表執行某些操作時,必須取消保護它,否則代碼將失敗。 隱藏的工作表可以毫無問題地刪除 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.