2016-04-04 65 views
0

我有打開的文件在Excel中打開,但它們本身不是Excel文件(它們只是在打開時轉換)。我希望能夠將這些文件中的一些信息放入另一個Excel工作表中,但由於它們不是Excel文件,因此我無法連接這些文件。使用VBA打開和保存非Excel文件

我想用VBA打開這些文件(它們將作爲Excel文件打開),然後將它們保存爲永久的excle文件,以便我可以根據需要使用它們。

要打開文件,我有這樣的代碼:

Option Explicit 

Declare Function ShellExecute Lib "shell32.dll" _ 
Alias "ShellExecuteA" (_ 
ByVal hWnd As Long, _ 
ByVal lpOperation As String, _ 
ByVal lpFile As String, _ 
ByVal lpParameters As String, _ 
ByVal lpDirectory As String, _ 
ByVal nShowCmd As Long) As Long 

Function OpenAnyFile(FileToOpen As String) 

Call ShellExecute(0, "Open", FileToOpen & vbNullString, _ 
vbNullString, vbNullString, 1) 

End Function 

Sub OpenFile() 

Call OpenAnyFile("C:\Filename") 

End Sub 

但我不能確定如何將現在打開的文件保存在這個代碼。

+1

如果使用Workbooks.Open或Workbooks.OpenText代替使用API​​調用,會發生什麼? – Rory

+0

@Rory它在Excel中打開文件,但它的格式不正確。當您打開文件然後轉換爲適當的excel文件時,會發生一些特殊的進程/轉換。 – ryangicn

+0

然後你可能需要指定一些參數。文件格式是什麼? – Rory

回答

0

如果你把這個代碼進入並從Excel的VBE運行它,那麼你就應該能夠使用的SaveAs方法(記錄here)爲Workbook像這樣

Dim owb As Workbook 

With Application 
    .DisplayAlerts = False 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

fname = "Filename goes here (include .extension)" 
fpath = "Path goes here" 

Set owb = Application.Workbooks.Open(fpath & "\" & fname) 

With owb 
    .SaveAs fpath & "\" & fname & ".xlsx", 51 
    .Close 
End With 

另存爲參數根據MSDN文檔

表達式.SaveAs(FileName,FileFormat,Password,WriteResPassword,ReadOnlyRecommended,CreateBackup,AccessMode,ConflictResolution,AddToMru,TextCodepage,TextVisua lLayout,Local)*

+0

它如何知道我想保存新打開的excel文件,而不是運行宏的excel文件? – ryangicn

+0

請嘗試更新的代碼 – CaffeinatedCoder

+0

謝謝。這將工作,但我不能使用Workbooks.Open(無論出於何種原因,格式不能繼承) – ryangicn