2013-08-01 86 views
0

我創建了一個xlam(Excel 2007加載項)文件來處理各種文件的操作。我試圖在xlam文件中編寫一個程序,該文件從已打開的xlsm文件中刪除一些工作表,並將其保存爲xlsx(即不含宏)。調用.SaveAs崩潰Excel

到目前爲止,我唯一能做的就是在遇到.SaveAs調用時崩潰Excel。崩潰來作爲Windows對話框說明:

Microsoft Office Excel已停止工作,Windows可以嘗試恢復您的信息並重新啓動程序。 [重新啓動程序] [調試程序]

在,我保存到文件夾,我離開每次崩潰之後我用一個臨時文件(如文件名:7A275000與大小:0)的它試圖保存到的文件夾。

爲後人這裏有些東西我都試過了,等一切都導致死機一樣:

  • 硬編碼的文件名值( 「C:\用戶\ MyUserName輸入\桌面\ temp.xlsx」)
  • 從用戶
  • 提示文件名(顯示在下面的代碼)
  • 文件名沒有路徑( 「temp.xlsx」)
  • 文件名不包括擴展名( 「C:\ Users \用戶名爲myUsername \桌面\ TEMP」)
  • 文件名作爲現有文件名無擴展名
  • 文件名作爲現有的文件名與擴展的.xlsx
  • 代替使用wb.SaveAs,我用隨後ActiveWorkbook.SaveAs
  • wb.Activate我試圖FileFormat:=xlOpenXMLWorkbookFileFormat:=xlWorkbookNormal
  • 保存到不同長度
  • 加入的幾個不同的目錄錯誤捕獲語句圍繞.SaveAs調用(它不捕獲任何錯誤,並使Excel崩潰)

最後一個奇怪的位是當我嘗試在文件上執行手動Save-As(即在調用ws.delete之後,我自己導航到「另存爲」菜單),Excel以同樣的方式崩潰。如果我自己手動刪除工作表,然後執行手動另存爲,它可以節省很多。


這裏是有問題的代碼:

Public Sub ConvertToStagingFile(ByRef wb As Workbook) 
    Dim reWS As Object, reFILE As Object 
    Dim ws As Worksheet 

    Set reWS = CreateObject("VBScript.regexp") 
    reWS.IgnoreCase = True: reWS.Global = False: reWS.MultiLine = False 

    Set reFILE = CreateObject("VBScript.regexp") 
    reFILE.IgnoreCase = True: reFILE.Global = False: reFILE.MultiLine = False 

    reWS.Pattern = "^(home|location settings|date reference|[\w\s]{1,8} (rating|inquire) data|pkl data - \w{1,8}|verbs - \w{1,8})" 
    reFILE.Pattern = "\.xlsm$" 

    For Each ws In wb.Worksheets 
     If (ws.Visible = xlSheetHidden) Or (ws.Visible = xlSheetVeryHidden) Then 
      ws.Visible = xlSheetVisible 
     End If 

     Select Case True 
      Case reWS.test(ws.name) 
       '// Do Nothing 
      Case Else 
       Application.DisplayAlerts = False 
       ws.Delete 
       Application.DisplayAlerts = True 
     End Select 
    Next ws 

    ActiveWindow.TabRatio = 0.75 

    If (reFILE.test(Cached.getAdhocReportFull)) Then 
     Dim newName As Variant 

     newName = Application.GetSaveAsFilename(reFILE.Replace(Cached.getAdhocReportFull, ""), "*.xlsx") 
     If newName = False Then Exit Sub 

     wb.Activate 

     Application.EnableEvents = False 
     '// CODE RELIABLY CRASHES HERE 
     wb.SaveAs _ 
      FileName:=newName, _ 
      FileFormat:=xlOpenXMLWorkbook, _ 
      CreateBackup:=False 

     Application.EnableEvents = True 

    End If 
End Sub 

在這個問題上的任何幫助,將不勝感激。

+0

是excel的大小巨大嗎? – Vasim

+0

是的......對於excel文件來說,這是一個很大的麻煩。它可以是2-4mb的大小。大文件保存需要考慮什麼? –

+0

嘗試減小大小,如果已經使用範圍(vlookup,index)嘗試縮小大小,請使用命名公式 - 減少範圍...否則您的文件可能已損壞嘗試創建新版本並嘗試.. 。 – Vasim

回答

0

我有什麼似乎是完全一樣的問題:

  • 的Excel 2013
  • 宏在XLSM文件刪除工作表
  • 後續調用。保存,或手動保存文件崩潰Excel文件(同一個對話的哈日)
  • 這個問題只出現於我們,當我們從.xls的更新,以「新」的辦公文件格式
  • 對於信息,我們的文件是沒有那麼大(只有300kB)

由於我們的目的是爲我們替換工作表,下列工作適用於我們:重命名舊工作表,創建新工作表(與舊工作表同名),刪除舊工作表。似乎爲我們工作。它爲什麼有效?不知道。