2015-10-02 26 views
0

以下宏從已關閉的工作簿導入名爲「已審覈」的特定工作表,導入該表並將其重命名爲「數據」。宏工作正常。但是,我希望宏覆蓋現有的「數據」表,這是代碼失敗的地方。我試圖使用On error resume NeXT .. on error goto 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 

回答

0

您不能只覆蓋現有工作表。您需要首先刪除現有的「數據」表,然後添加新的數據表,或者直接在現有工作表中寫入新數據(可能首先清除所有其他數據)。

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 
+0

嗨rohrl77。嗯,兩個版本似乎都沒有工作。我相信第二個缺少sheet.add語句,第一個語句中沒有with-statement。 – Saud

+0

嗨,沙特,你對「With」陳述的第一個評論是正確的。我更新了它以取出它。這不是必需的。第二個不添加工作表bcs我假定工作簿中已經存在「數據」工作表...所有代碼都會清除單元格。然後您可以寫入該表,留下名稱和工作表。 – rohrl77

+0

我收到以下錯誤消息:當我運行第一個宏時出現「下標超出範圍」。 Sry,也許我沒有解釋清楚,但它應該添加一個「數據」表,如果它尚不存在,並覆蓋它,如果它存在。 – Saud

0

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 
+1

嗨,沙特,好的。很高興你明白了。是的,如果您首先需要檢查表單是否存在,那麼它會起到作用,如果不是,則會覆蓋。 : - ) – rohrl77