2012-09-25 27 views
1

我想創建一個新的工作簿,在其中添加一個列表,然後保存這本書。如果它存在,我需要刪除以前的變體,然後保存當前。這裏是我的代碼:刪除打開的書

Private Sub GenerateReport_Click() 

    Dim wb As Workbook 
    Dim FilePath As String 


    FilePath = ThisWorkbook.Path + "\CommonReport.xls" 
    Set wb = Workbooks.Add 
    ActiveCell.FormulaR1C1 = "a1" 
    wb.ActiveSheet.Range("B1").Select 
    ActiveCell.FormulaR1C1 = "b1b" 
    wb.ActiveSheet.Range("C1").Select 
    ActiveCell.FormulaR1C1 = "3" 
    wb.ActiveSheet.Range("D1").Select 
    ActiveCell.FormulaR1C1 = "4" 
    wb.ActiveSheet.Range("E1").Select 
    ActiveCell.FormulaR1C1 = "5" 
    wb.ActiveSheet.Range("F1").Select 
    ActiveCell.FormulaR1C1 = "6" 
    wb.ActiveSheet.Range("G1").Select 
    ActiveCell.FormulaR1C1 = "7" 
    wb.ActiveSheet.Range("A1:G1").Select 
    wb.ActiveSheet.ListObjects.Add(xlSrcRange, wb.ActiveSheet.Range("$A$1:$G$1"), , xlYes).Name = "Ñïèñîê1" 
    wb.ActiveSheet.Range("A1:G2").Select 

    Application.DisplayAlerts = False 

     If Dir(FilePath) = vbNullString Then 
      wb.SaveAs Filename:=FilePath 
     Else 
     SetAttr FilePath, vbNormal 
      Kill FilePath 
     End If 



End Sub 

是否可以刪除打開時的圖書。當我想刪除已打開的書時,如何處理錯誤?

+1

作爲旁註。用&符串連接可能更好。 'ThisWorkbook.Path +「\ CommonReport.xls」' - >'ThisWorkbook.Path&「\ CommonReport.xls」'參見:http://stackoverflow.com/a/7750689/726127 – Brad

回答

3

我認爲這是沒有必要刪除工作簿時,只是簡單地覆蓋它。如果它被打開,請先關閉它。例如:

Option Explicit 

Private Const NEW_BOOK_NAME As String = "CommonReport" 

Public Sub Test() 
    Dim newWorkbook As Workbook 

    Set newWorkbook = Workbooks.Add 
    With newWorkbook.ActiveSheet 
     [a1] = "a1" 
     [b1] = "b1" 
     [c1] = "c1" 
    End With 

    Dim filePath As String 
    filePath = ThisWorkbook.Path & "\" & NEW_BOOK_NAME 

    On Error Resume Next 
    Workbooks(NEW_BOOK_NAME).Close 

    On Error GoTo 0 
    Application.DisplayAlerts = False 
    newWorkbook.SaveAs filePath 
End Sub 
+0

+1好的想法! –

0

您無法刪除打開的工作簿。看到

檢查是否有相同名稱的文件中使用這樣的事情是開放的:http://www.exceltip.com/st/Determine_if_a_workbook_is_already_open_using_VBA_in_Microsoft_Excel/472.html

如果這樣的文件打開後,檢查是否有你想要刪除的文件相同的路徑與打開的工作簿比較FilePath(如Workbooks("CommonReport.xls").FullName),如果是這樣,通過使用關閉命令關閉它:

Workbooks("CommonReport.xls").Close SaveChanges:=False 
0

OlleSjögren想法應該工作。

但是,簡單地使用worksheet.usedrange.clear方法清空現有工作表可能會更容易。然後你可以插入你的新數據。 這應該比刪除方法快很多。