2013-02-01 28 views
0

我下載的文件需要根據單元格A1中包含的名稱對它們進行重命名。該文件已經保存在當前目錄中,所以我是後是隻保存到當前目錄中的呼叫A1文件名和擴展名是「.xls」將工作簿保存在當前目錄中,標題爲單元格

嘗試這種代碼:

Sub SaveToRelativePath() 
    Dim relativePath As String, sname As String 
    sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls" 
    relativePath = Application.ActiveWorkbook.Path & "\" & sname 
    ActiveWorkbook.SaveAs Filename:=relativePath 
End Sub 

但調試器在最後一行報告錯誤:ActiveWorkbook.SaveAs文件名:=相對路徑

任何線索如何做到這一點?

+1

什麼是錯誤信息?請嘗試使用'Debug.Print relativePath'來查看名稱是否正確... –

+0

您能否分享錯誤屏幕/文本? –

回答

0

未指定的錯誤,但如果你看到:

macro-free WB save warning

這意味着您嘗試保存工作簿與上面的代碼爲「XLS」(實際上,不完全,見下文) - 這意味着一個宏無格式格式。 Excel警告你,你會失去代碼。

還有一個問題 - 無論擴展的代碼,你將在本書保存爲默認格式您使用的Excel版本(這是XLSX或xlOpenXMLWorkbook 2007年,也許未來的版本中,我有2007年)。其結果是,你會得到保存的文件打開這樣的事情:

Incorrect format

解決方案:

  1. 爲了避免第一次警告 - 保存工作簿初期(即一個在那裏你保持VBA代碼)爲Macro-Enabled運行宏之前。
  2. 添加正確的格式說明保存方法 - 在你的情況下將是FileFormat:=xlExcel8 - 因此你會得到真正的XLS。
  3. 還有一件事 - 爲避免將文件另存爲XLS時發生aby兼容性警報,請在保存之前添加.CheckCompatibility = False。生成的代碼應該是水木清華這樣的:

    Sub SaveToRelativePath() 
        Dim relativePath As String, sname As String 
        sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls" 
        relativePath = Application.ActiveWorkbook.Path & "\" & sname 
        Application.DisplayAlerts = False 
        ActiveWorkbook.CheckCompatibility = False 
        ActiveWorkbook.SaveAs Filename:=relativePath, FileFormat:=xlExcel8 
        Application.DisplayAlerts = True 
    End Sub 
    

但是要小心 - 這種結構會悄悄地覆蓋任何現有的文件。希望這有些幫助。

+0

http://msdn.microsoft.com/en-us/library/office/bb241279%28v=office.12%29.aspx - 詳細瞭解允許的保存格式。 –

+0

非常感謝彼得!我正在使用一個非常舊的Excel版本(2002),所以也許由於這個原因我在調試器中出現這個錯誤: – mlun

+0

@mlun ...哪一個? –

相關問題