Excel 导入时忽略并覆盖现有图纸
以下宏从关闭的工作簿导入名为Review的特定工作表,导入该工作表并将其重命名为数据。宏工作正常。但是,我希望宏覆盖现有的数据表,这就是代码失败的地方。下一步我尝试使用错误恢复。。错误时转到0语句。但它只是添加了一个新的数据表,并没有覆盖现有的数据表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
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,好的。很高兴你拿到了。是的,如果您首先需要检查工作表是否存在,或者如果不存在,则覆盖,则会产生不同:-