Excel 在工作簿之间复制工作表并覆盖当前工作表

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

我编写了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")

    '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实际上,该函数返回变量,但是它的子类型是布尔型的。