Excel 导入时忽略并覆盖现有图纸

Excel 导入时忽略并覆盖现有图纸,excel,overwrite,import-from-excel,vba,Excel,Overwrite,Import From Excel,Vba,以下宏从关闭的工作簿导入名为Review的特定工作表,导入该工作表并将其重命名为数据。宏工作正常。但是,我希望宏覆盖现有的数据表,这就是代码失败的地方。下一步我尝试使用错误恢复。。错误时转到0语句。但它只是添加了一个新的数据表,并没有覆盖现有的数据表 Sub Import() Dim wsmaster as workbook Dim rd as range Application.ScreenUpdating = False Application.DisplayAlerts = False

以下宏从关闭的工作簿导入名为Review的特定工作表,导入该工作表并将其重命名为数据。宏工作正常。但是,我希望宏覆盖现有的数据表,这就是代码失败的地方。下一步我尝试使用错误恢复。。错误时转到0语句。但它只是添加了一个新的数据表,并没有覆盖现有的数据表

Sub Import()

Dim wsmaster as workbook
Dim rd as range

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsmaster Is Nothing Then
        ThisWorkbook.Sheets.Add
        Set wsmaster = ActiveSheet
        Set rd = wsmaster.Range("A1")
        wsmaster.Name = "Data"
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub

不能只覆盖现有图纸。您需要先删除现有的数据表,然后添加新的数据表,或者只需在现有的数据表中写入新数据,可能需要首先清除所有其他数据

删除工作表的版本1可能如下所示:

Sub Import()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsmaster Is Nothing Then
        Worksheets("Data").Delete
        ThisWorkbook.Sheets.Add
        Set wsmaster = ActiveSheet
        Set rd = wsmaster.Range("A1")
        wsmaster.Name = "Data"
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub
Sub Import()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsmaster Is Nothing Then
        Set wsmaster = Worksheets("Data")
        Set rd = wsmaster.Range("A1")
        wsmaster.Cells.Clear
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub
第二种选择是这样的:

Sub Import()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsmaster Is Nothing Then
        Worksheets("Data").Delete
        ThisWorkbook.Sheets.Add
        Set wsmaster = ActiveSheet
        Set rd = wsmaster.Range("A1")
        wsmaster.Name = "Data"
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub
Sub Import()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsmaster Is Nothing Then
        Set wsmaster = Worksheets("Data")
        Set rd = wsmaster.Range("A1")
        wsmaster.Cells.Clear
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub

rohrl77,感谢您为我提供反馈。找到的解决方案如下:

Sub import_click()

    Call deletedatasheet

    Call import

    MsgBox "Data blev importeret", vbInformation

End Sub

Private Sub import()

Dim wsMaster As Worksheet
Dim rd As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False

    If wsMaster Is Nothing Then
        ThisWorkbook.Sheets.Add
        Set wsMaster = ActiveSheet
        Set rd = wsMaster.Range("A1")
        wsMaster.Name = "Data"
        filespec = Application.GetOpenFilename()
        Set wb = Workbooks.Open(Filename:=filespec)
        Sheets("Reviewed").Activate
        Cells.Copy rd
        wb.Close
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub

Sub deletedatasheet()
    Dim ws As Worksheet

    Application.DisplayAlerts = False
    For Each ws In ThisWorkbook.Sheets
        If ws.Name = "Data" Then
            ws.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub

你好,rohrl77。嗯,两个版本似乎都不起作用。我认为第二个缺少工作表。添加语句,第一个语句中没有with语句。嗨,Saud,你对with语句的第一个评论是正确的。我想把它拿出来。那里不需要它。第二个没有添加工作表,因为我假设工作簿中已经存在数据表。。。代码所做的就是清除单元格。然后,您可以写入该工作表,留下名称和工作表。我收到以下错误消息:当我运行第一个宏时,下标超出范围。Sry,也许我没有解释清楚,但如果数据表不存在,它应该添加一个数据表,如果它存在,它应该覆盖它。嗨,Saud,好的。很高兴你拿到了。是的,如果您首先需要检查工作表是否存在,或者如果不存在,则覆盖,则会产生不同:-