2017-02-27 222 views
0

我正在運行的是需要輸入,並創建文件的一個副本的數據的代碼。沒事兒;但是,每次保存時都會打開新文件。我想保存文件而不會自動打開。我玩弄一些代碼,如下:Excel的VBA:禁用自動打開,當另存爲功能運行

Dim x As Object 
     Set x = Application.VBE.ActiveVBProject.VBComponents 
     x.Remove VBComponent:=x.Item("TestModule") 

下面是該代碼保存爲功能的全部。

Public sourceWB As Workbook 
Public sourceWS As Worksheet 
Public targetWB As Workbook 
Public targetWS As Worksheet 
Public sDate As String 

Sub Main() 

    sDate = Format(Now(), "mm.dd.yyyy") 
    Set sourceWB = ThisWorkbook 
    Set sourceWS = sourceWB.Sheets("**FILE NAME DISCREET") 


    Set targetWB = Workbooks.Add 
    Dim theFilename As String 
    theFilename = "**FILE NAME DISCREET**" + sDate + ".xlsx" 

    targetWB.SaveAs FileName:= **"FILE LOCATION TO BE KEPT DISCREET, SORRY "** 
    Set targetWS = targetWB.Sheets("Sheet1") 

    sourceWS.Range("A1:H45").Copy targetWS.Range("A1") 
    targetWB.Save 

End Sub 

Private Sub ManhExportData_Click() 
     Call Main 
End Sub 
+1

我不會想到每次保存工作簿時都會再次打開工作簿,因爲它已經**打開了,並且Excel不允許您在工作簿中打開兩次相同的工作簿Excel的相同實例。或者你只是問在保存後如何關閉工作簿(即'targetWB.Close')? – YowE3K

+0

我在保存時創建了一個新的工作簿。每個星期我都會將數字輸入電子表格,當我點擊「另存爲」時,我正在創建當前電子表格的副本,因此我每週都記錄下我的工作情況。然後我每週都會繼續編輯當前的工作簿。所以,當我按另存爲時,它每次打開新的工作簿。 – Eva

+0

您當前的代碼(1)執行一個'Workbooks.Add'來創建一個新的空工作簿,這意味着您現在已經打開了兩個工作簿; (2)在新工作簿上執行「另存爲」將其提交到磁盤; (3)將舊工作簿的範圍複製到新工作簿; (4)在新工作簿上執行「保存」以將更改提交到磁盤; (5)停止。您將剩下兩個工作簿打開 - 原始工作簿和您添加的工作簿,但在任何階段都沒有「保存」打開工作簿。你只是想知道如何關閉新的工作簿? – YowE3K

回答

0

爲了關閉你與Add方法創建的工作簿,您應在工作簿中使用一個Close方法。

Public sourceWB As Workbook 
Public sourceWS As Worksheet 
Public targetWB As Workbook 
Public targetWS As Worksheet 
Public sDate As String 

Sub Main() 

    sDate = Format(Now(), "mm.dd.yyyy") 
    Set sourceWB = ThisWorkbook 
    Set sourceWS = sourceWB.Sheets("**FILE NAME DISCREET") 

    Set targetWB = Workbooks.Add 
    Dim theFilename As String 
    theFilename = "**FILE NAME DISCREET**" + sDate + ".xlsx" 

    targetWB.SaveAs FileName:= **"FILE LOCATION TO BE KEPT DISCREET, SORRY "** 
    Set targetWS = targetWB.Sheets("Sheet1") 

    sourceWS.Range("A1:H45").Copy targetWS.Range("A1") 
    targetWB.Save 

    'Close the workbook 
    targetWB.Close 

End Sub 

Private Sub ManhExportData_Click() 
    Call Main 
End Sub