Excel 在工作簿之间复制工作表并覆盖当前工作表
我编写了VBA代码,用于打开目标工作簿,复制其中一个工作表,并将其粘贴到当前工作簿中Excel 在工作簿之间复制工作表并覆盖当前工作表,excel,vba,Excel,Vba,我编写了VBA代码,用于打开目标工作簿,复制其中一个工作表,并将其粘贴到当前工作簿中 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") 'C
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
当我第二次或第三次运行它时,等等。。。它不会覆盖当前工作表,而是创建一个全新的工作表
例:工作表称为“数据”,第一次传输“数据”,第二次传输“数据(2)”
我有另一个工作表,它使用VLOOKUP函数查看这个数据工作表的一些单元格,所以它有正确的名称“data”是至关重要的
我想在运行宏之前删除当前(数据)文件,但是如果某个文件崩溃,我的工作表丢失了怎么办?有更好的解决办法吗
注意:我正在从主工作簿运行宏,以获取要从外部工作簿复制的工作表
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): 注: 它确实存在问题:如果工作表上的A1包含错误,它将返回假阴性。ActiveWorkbook vs ThisWorkbook,工作表vs工作表 您在代码中使用了“Activeworkbook”和“Sheet”,所以我就这样做了 但是 虽然您可以使用第三个工作簿来运行代码,但我猜您是从“ActiveWorkbook”中的模块运行代码。如果这是真的,那么使用“ThisWorkbook”更为正确,因为它总是指包含代码(模块)的工作簿,以避免在第三个工作簿上意外运行代码
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
工作表指的是工作表和图表工作表,我再次猜测此代码中没有图表工作表,因此使用“工作表”而不是“工作表”更为正确
下次要对工作表执行某些操作时,必须取消对其的保护,否则代码将失败可以删除隐藏的工作表。没有问题。检查工作表名称是否首先存在于目标工作簿中。如果是,请删除(或重命名)然后移动图纸,如果不是,请仅移动sheet@urdearboy我需要一个循环来遍历所有的表单吗?(大约有15个)我会在工作表中循环并使用
.Name
属性进行比较。对于一个自定义函数,有许多解决方案返回TRUE
或FALSE
“工作表是否已经存在”。您的意思是:函数SheetExists(ws-As-String)作为布尔值(因为它即使没有“Boolean”部分也可以工作),还是我缺少了什么?@vbasic208实际上,该函数返回变量,但是它的子类型是布尔型的。