★Excel-VBA操作文件四大方法之一

 http://club.excelhome.net/dispbbs.asp?boardid=2&id=229959&star=1

很好的學習Excel的網站,發現了自己喜歡的東西。

在我們日常使用Excel的時候,不僅會用到當前Excel文件的數據,還經常需要訪問其他的數據文件。這些數據文件可能是Excel文件、文本文件或數據庫文件等。經常有朋友會問如何在vba代碼裏操作這些數據文件?本文就係統地介紹一下在Excel中應用VBA操作數據文件的方法。

本文主要介紹四種常用的方法:
1、利用Excel對象來處理文件;
2、利用VBA文件處理語句來處理文件;
3、利用FileSystemObject對象來處理文件;
4、利用API函數來處理文件。

當然對於數據庫文件,還可以利用ADO+SQL的方法操作,不過論壇已經有前輩詳細介紹過此類方法,本文就不再重複了。

一、利用Excel對象來處理文件

利用Excel對象自帶的方法來操作文件是最方便,也是最簡單的。
我們主要利用Workbooks集合和Workbook對象的方法來操作文件。

1、打開Excel文件

我們可以用Workbooks.Open方法打開一個Excel工作簿。
Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
  其中FileName是必選的參數,表示要打開的工作簿名,如果沒有指定路徑,則代表當前路徑。另外14個是可選參數,除了密碼參數,其他的一般很少用。具體的含義可以參看VBA的幫助。
例:
   Workbooks.Open "F:/test.xls"
可以打開F盤的test.xls文件。

2、打開文本文件

  使用Open方法也可以打開文本文件,但建議使用OpenText方法。此方法是載入一個文本文件,並將其作爲包含單個工作表的工作簿進行分列處理,然後在此工作表中放入經過分列處理的文本文件數據。完整語法如下:
Workbooks.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

關於以上參數的具體含義可以參看VBA的幫助,這裏就不重複了。在實際的編程中,一般無需對這些複雜的參數進行處理。可以通過錄制宏來得到打開一個文本文件的VBA代碼。具體方法就是選擇“文件——打開”,然後選擇打開文本文件,就會出現文本導入嚮導,一步一步執行完,直到文本打開後,停止錄製。
以下是錄製宏得到的代碼:
Sub Macro1()
'
' Macro1 Macro
' 宏由 MC SYSTEM 錄製,時間: 2007-3-29
'

'
    Workbooks.OpenText Filename:="F:/CallWindowProc.txt", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
End Sub

在實際編程中只要做相應的修改就可以使用了。

3、打開其他文件

利用Excel對象還可以打開XML文件和一些數據庫(如Access)文件,對應XML文件,需要Excel2003以上的版本。

OpenXML方法的語法如下:
Workbooks.OpenXML(Filename, Stylesheets, LoadOption)
FileName      String 類型,必需。要打開的文件名。

Stylesheets      Variant 類型,可選。單個值或值的數組,用於指定要應用哪些 XSL 轉換 (XSLT) 樣式表處理指令。

LoadOption    Variant 類型,轉換。指定 Excel 打開 XML 數據文件的方式。可爲 XlXmlLoadOption 常量之一。

XlXmlLoadOption 可爲以下 XlXmlLoadOption 常量之一:
xlXmlLoadImportToList 將 XML 數據文件的內容置於 XML 列表中。
xlXmlLoadMapXml 在“XML 結構”任務窗格中顯示 XML 數據文件的架構。
xlXmlLoadOpenXml 打開 XML 數據文件。文件的內容將展開。
xlXmlLoadPromptUser 提示用戶選擇打開文件的方式。


示例
下面的代碼打開了 XML 數據文件“customers.xml”並在 XML 列表中顯示了此文件的內容。

Sub UseOpenXML()
    Application.Workbooks.OpenXML _
        Filename:="customers.xml", _
        LoadOption:=xlXmlLoadImportToList
End Sub

OpenDatabase 方法語法如下:
Workbooks.OpenDatabase(FileName, CommandText, CommandType, BackgroundQuery, ImportDataAs)

FileName      String 類型,必需。連接字符串。

CommandText      Variant 類型,可選。查詢的命令文本。

CommandType      Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。

BackgroundQuery      Variant 類型,可選。查詢的背景。

ImportDataAs      Variant 類型,可選。確定查詢的格式。

示例
本示例中,Excel 打開了“northwind.mdb”文件。

Sub OpenDatabase()

Workbooks.OpenDatabase FileName:="C:/northwind.mdb"

End Sub

4、保存文件

文件的保存使用Workbook對象的Save或SaveAs方法。
Save方法使用簡單,語法爲
expression.Save,expression是某個Workbook對象。
如:ActiveWorkbook.Save
即保存當前活動工作簿。

如果是第一次保存工作簿或要另存爲,請使用 SaveAs 方法爲該文件指定文件名。
其語法爲:
expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

具體參數含義可參看VBA幫助,使用都比較簡單。
示例
本示例新建一個工作簿,提示用戶輸入文件名,然後保存該工作簿。

Set NewBook = Workbooks.Add
Do
    fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName

Application.GetSaveAsFilename爲調出標準的“另存爲”對話框,獲取用戶文件名,但並不真正保存任何文件,然後使用代碼保存文件。還有Application.GetOpenFileName可以調出標準的“打開”對話框。

5、關閉文件

關閉文件可以使用Workbooks集合或Workbook對象的 Close 方法。前者是關閉所有打開的工作簿,後者關閉特定的工作簿。
Workbook對象的 Close 方法語法爲:
expression.Close(SaveChanges, Filename, RouteWorkbook)

SaveChanges參數表示是否保存更改,對許多不需要更改的操作,可設置爲False以免彈出保存更改提示的對話框。
FileName 可選。以此文件名保存所做的更改。
RouteWorkbook  可選。如果指定工作簿不需要傳送給下一個收件人(沒有傳送名單或已經傳送),則忽略該參數。

示例
本示例關閉 Book1.xls,並放棄所有對此工作簿的更改。

Workbooks("BOOK1.XLS").Close SaveChanges:=False
  
本示例關閉所有打開的工作簿。如果某個打開的工作簿有改變,Microsoft Excel 將顯示詢問是否保存更改的對話框和相應提示。

Workbooks.Close

6、綜合實例

假如F盤有一個Excel文件test.xls,現在有另一個Excel文件要訪問test.xls的數據,我們來看用VBA代碼如何操作。代碼如下:
Public Sub test()
Application.ScreenUpdating = False
Workbooks.Open "f:/test.xls"
ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub
首先關閉屏幕刷新,是爲了防止test.xls在打開時被看見(有時候還是看的見)。打開後,見test.xls的Sheet1的單元格A2中的值賦給當前工作簿的Sheet1的單元格B2,然後關閉test.xls。
當要打開的工作簿不確定的時候,可以通過調用打開對話框來讓用戶自己選擇。
可改爲如下:
Public Sub test()
Application.ScreenUpdating = False
Dim Filename as String
Filename = Application.GetOpenFileName
Workbooks.Open Filename
ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

7、總結

利用Excel對象的方法進行文件操作是最簡單,也是最方便的,適合初學者。對於Excel文件格式,如果我們僅僅是讀取其表格中的內容,這種方法也是首選。對於文本文件的操作,使用第二種方法比較方便,若要將文本轉換成表格,那麼使用此方法也是合適的。

發佈了46 篇原創文章 · 獲贊 16 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章