我已經創建了一對可重用的子例程,它們一起工作以保存不同擴展名中的文件。創建通用參考表:是一個正確的方法嗎?
第一個Sub接收目錄路徑,文件名和所需的Excel擴展名。然後,它調用第二次找到了正確的Excel的FileFormat號並用它來將文件保存在新的格式:
Sub SaveFileWithNewExtension(DirectoryPath As String, NameOfFile As String, ExtensionToUse As String)
Dim ExcelFileFormatNumber As String
GetExcelFormatNumber ExtensionToUse, ExcelFileFormatNumber
ActiveWorkbook.SaveAs DirectoryPath & "\" & NameOfFile & ExtensionToUse, FileFormat:=ExcelFileFormatNumber
End Sub
第二次主要是爲Excel FileFormats我會用一個參考。對於參考的FileFormat我同時存儲在的FileFormat號碼和名稱中鍵入到不同的文件擴展的陣列中,所有存儲在一個集合,我可以添加到根據需要:
Sub GetExcelFormatNumber(Extension As String, Optional Number As String, Optional ExcelFormat As String)
'http://msdn.microsoft.com/en-us/library/office/ff198017.aspx
'http://www.rondebruin.nl/mac/mac020.htm
Dim ExtensionReference As New Collection
ExtensionReference.Add Array("51", "xlOpenXMLWorkbook"), ".xlsx"
ExtensionReference.Add Array("52", "xlOpenXMLWorkbookMacroEnabled"), ".xlsm"
ExtensionReference.Add Array("50", "xlExcel12"), ".xlsb"
ExtensionReference.Add Array("56", "xlExcel8"), ".xls"
On Error GoTo NoMatch:
ExcelFormat = ExtensionReference.Item(Extension)(1)
Number = ExtensionReference.Item(Extension)(0)
Exit Sub
NoMatch:
msgbox "No Matching Extension was Found in the ExcelExtensionsAndNumbers Collection"
End Sub
保持數組這樣的集合看起來相當笨重和不雅,這讓我覺得我已經做到了這一點。
這裏是我的問題: 有沒有更好的方式來存儲信息,以供其他潛艇使用?或者採用另一種方式表達:您是否有一種最喜歡的數據抽象方式(如本示例中的FileFormat代碼),因此可以反覆使用它,而無需每次都記住和重寫它?
代碼進行了修訂,使用情況,而不是一個集合,以更好地處理錯誤(由代碼亞洲時報Siddharth潰敗的重寫輕輕建議)。這工作,和案例結構使我的眼睛更有意義:
Public Sub SaveFileWithNewExtension(DirectoryPath As String, NameOfFile As String, ExtensionToUse As String)
Dim ExcelFileFormatNumber As String
GetExcelFormatNumber ExtensionToUse, ExcelFileFormatNumber
If ExcelFileFormatNumber <> "" Then
ActiveWorkbook.SaveAs DirectoryPath & "\" & NameOfFile & ExtensionToUse, FileFormat:=ExcelFileFormatNumber
Else
msgbox "Invalid file extension. Case does not exist."
End If
End Sub
Public Sub GetExcelFormatNumber(ExtensionToFind As String, Optional Number As String, Optional ExcelFormat As String)
'reference - http://msdn.microsoft.com/en-us/library/office/ff198017.aspx
'reference - http://www.rondebruin.nl/mac/mac020.htm
Select Case ExtensionToFind
Case ".xlsx": Number = "51"
ExcelFormat = "xlOpenXMLWorkbook"
Case ".xlsm": Number = "52"
ExcelFormat = "xlOpenXMLWorkbookMacroEnabled"
Case ".xlsb": Number = "50"
ExcelFormat = "xlExcel12"
Case ".xls": Number = "56"
ExcelFormat = "xlExcel8"
Case ".csv": Number = "6"
ExcelFormat = "xlCSV"
Case Else: Number = ""
ExcelFormat = ""
End Select
End Sub
您的方式是正確的。看看http://stackoverflow.com/questions/9178177以通過類實例替換這些數組。 –
@amadeus:謝謝!我一直在想關於類對象,現在看起來是我開始學習的機會。我顯然必須稍微學習一下如何調用類對象,但是一旦我做了,它似乎會更好。 –