Execl工具-宏-VBA操作文件

在我們日常使用Excel的時候,不僅會用到當前Excel文件的數據,還經常需要訪問其他的數據文件。這些數據文件可能是Excel文件、文本文件或數據庫文件等。

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

利用Excel對象自帶的方法來操作文件是最方便,也是最簡單的。

我們主要利用Workbooks集合Workbook對象的方法來操作文件。

打開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文件。

打開文本文件

使用Open方法也可以打開文本文件,但建議使用OpenText方法。

此方法是載入一個文本文件,并將其作為包含單個工作表的工作簿進行分列處理,然后在此工作表中放入經過分列處理的文本文件數據。

完整語法如下:

Workbooks.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

關于以上參數的具體含義可以參看VBA的幫助,這里就不重復了。

在實際的編程中,一般無需對這些復雜的參數進行處理。

可以通過錄制宏來得到打開一個文本文件的VBA代碼。

具體方法就是選擇“文件——打開”,然后選擇打開文本文件,就會出現文本導入向導,一步一步執(zhí)行完,直到文本打開后,停止錄制。

以下是錄制宏得到的代碼:

Sub Macro1()

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

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

打開其他文件

利用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

保存文件

文件的保存使用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可以調出標準的“打開”對話框。

關閉文件

關閉文件可以使用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

綜合實例

假如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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • VBA訂制工具欄 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴寫字的地方閱讀 2,357評論 0 0
  • 本例為設置密碼窗口 (1) If Application.InputBox(“請輸入密碼:”) = 1234 Th...
    浮浮塵塵閱讀 14,810評論 1 20
  • excel文件就是excel工作簿 workbooks 工作簿集合,泛指excel文件或工作簿, workbook...
    肉丸子豆閱讀 384評論 0 0
  • 1.1 VBA是什么 直到90年代早期,使應用程序自動化還是充滿挑戰(zhàn)性的領域.對每個需要自動化的應用程序,人們不得...
    浮浮塵塵閱讀 22,153評論 6 49
  • Microsoft Excel 幾乎無處不在,使用 Excel 既可以保存客戶、庫存和雇員數據,還可以跟蹤運營、銷...
    丘山Ivan閱讀 818評論 0 1

友情鏈接更多精彩內容