Excel VBA 程式設計教學:檔案輸入與輸出 - GT Wang

文章推薦指數: 80 %
投票人數:10人

這裡介紹如何在Excel VBA 中讀取與寫入文字檔,並提供基本的參考範例。

通常Excel VBA 程式都會 ... 更多 Print 的範例,可以參考MSDN 的說明文件。

Blogger舊站 關於 Facebook Flickr 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 ExcelVBA程式設計教學:檔案輸入與輸出 2017/07/13 2則留言 這裡介紹如何在ExcelVBA中讀取與寫入文字檔,並提供基本的參考範例。

通常ExcelVBA程式都會從Excel表格中取得資料,經過處理之後再送回Excel表格中,但有些時候我們也會需要直接從外部的文字檔讀取資料,或是將處理完的資料儲存至外部的文字檔中,以下是ExcelVBA中檔案讀取與寫入的教學。

讀取外部文字檔 若要在VBA中讀取外部的文字檔,可以使用Open來開啟檔案,其語法為: Open檔案位置ForInputAs檔案代碼 檔案位置就是檔案在硬碟中的路徑,VBA在開啟檔案之後,會使用檔案代碼來辨識檔案,每個已開啟的檔案都會對應一個不重複的檔案代碼,例如#1、#2等,編號可以不連續,但不可以重複。

開啟檔案之後,通常我們會使用迴圈的方式來讀取整個檔案內容,每次以Line讀取一行資料,然後藉由EOF(endoffile)來判斷檔案是否已經讀取到結尾,如果讀取至結尾則跳出迴圈。

在檔案開啟之後,後續所有的檔案讀取以及判斷檔案結尾等動作,都會使用檔案代碼的方式來指定檔案。

以下是一個簡單的範例: DimFilePathAsString '文字檔案位置 FilePath="C:ExcelDemodemo.txt" '開啟FilePath文字檔,使用編號#1檔案代碼 OpenFilePathForInputAs#1 '執行迴圈,直到編號#1檔案遇到結尾為止 DoUntilEOF(1) '從編號#1檔案讀取一行資料 LineInput#1,LineFromFile '輸出一行資料 MsgBox(LineFromFile) Loop '關閉編號#1檔案 Close#1 VBA讀取文字檔案 這個範例會開啟C:ExcelDemodemo.txt這個文字檔(執行時請自己建立這個檔案),並將其設定為編號#1的檔案,如果要開啟多個檔案時,則可自行變更每個檔案的代碼,例如#2、#3等。

在迴圈的判斷式中,我們使用EOF(1)來判斷編號#1的檔案是否已經到達結尾處。

在讀檔的動作則使用Line從Input#1之中讀取一行資料,然後將這一行資料儲存在LineFromFile這個變數當中。

當檔案使用完畢之後,要使用Close將開啟的檔案關閉。

寫入外部文字檔 若要將資料寫入外部的文字檔,一開始也是使用Open開啟檔案: Open檔案位置ForOutputAs檔案代碼 這個語法跟之前讀檔的語法類似,只是把開檔的模式改為Output,檔案位置就填入要寫入的檔案路徑,而檔案代碼也是自己取一個不重複的數字即可。

開啟檔案之後,即可使用Print函數將指定的資料寫入檔案中。

DimOutputFilePathAsString DimContentAsString '文字檔案位置 OutputFilePath="C:ExcelDemodemo_output.txt" '開啟OutputFilePath文字檔,使用編號#2檔案代碼 OpenOutputFilePathForOutputAs#2 '要寫入檔案的內容 Content="Thisisatest." '將Content的內容寫入編號#2的檔案 Print#2,Content '關閉編號#2檔案 Close#2 VBA寫入文字檔案 這個範例會打開C:ExcelDemodemo_output.txt這個檔案,然後將Content變數的內容以Print寫入其中,最後呼叫Close將檔案關閉。

而在寫入完成後,demo_output.txt的檔案內容如下: 寫入檔案的內容 如果呼叫Print時,省略要寫入的資料,就會寫入空白行至檔案中: '寫入空白行 Print#2, 若要拼湊多個變數,產生想要的排版格式,可以使用分號將多個資料串起來: '以空白分隔 Print#2,"Hello";"";"World" '以5個空白分隔 Print#2,"Hello";Spc(5);"World" DimMyBoolAsBoolean MyBool=True '輸出字串與布林變數 Print#2,"The";MyBool;"isaBooleanvalue." DimMyIntAsInteger MyInt=123 '輸出字串與整數變數 Print#2,"The";MyInt;"isaIntegervalue." 這是寫入的檔案內容: 寫入檔案的內容 更多Print的範例,可以參考MSDN的說明文件。

除了使用Print之外,還有一個Write也可以寫入檔案,它會自動將文字的內容加上雙引號,並以逗號分隔多個輸入變數,以下是一個範例(將上面Print的位置直接替換成Write即可): '以逗號分隔,寫入檔案 Write#2,"Hello,World",123 Write在寫入檔案時,會將幾種VBA變數轉換為特殊的格式,例如True就會轉為#TRUE#,詳細的說明請參考MSDN的說明文件。

繼續閱讀:12 Windows,程式設計 ExcelOfficeVBA G.T.Wang 個人使用Linux經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

2留言 新增留言→ NewStudent 請問如果不知道Excel表格內的資料的範圍,要怎麼使用陣列呢? ‘取得Excel表格內的資料 SheetValues=Sheets(“工作表1”).Range(“A1:C6”).Value ‘動態調整陣列大小 ReDimLineValues(1To3) ForRowNum=1To5 ForColNum=1To3 ‘把Excel資料表的一列資料放進陣列中 LineValues(ColNum)=SheetValues(RowNum,ColNum) Next ‘將陣列中的資料以逗號連接起來 Line=Join(LineValues,“,”) ‘將CSV資料寫入檔案 Print#OutputFileNum,Line Next 2019/09/11 回覆 marson 你好有個問題請教 我該如何把輸出的csv檔 改成UTF-8的格式呢? 我嘗試用以下這個還是失敗XD https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/stream-object-properties-methods-and-events?redirectedfrom=MSDN&view=sql-server-ver15 2019/11/21 回覆 LeaveaReply取消回覆 留言* Name* Email* Website 搜尋 分類Arduino(5) BeagleBoneBlack(1) DIY(54) Linux(317) macOS(33) Octave(15) Perl(12) R(47) Windows(98) WordPress(16) 個人(15) 免費(35) 兒童(30) 實用工具(85) 手機(13) 技巧(45) 有趣(99) 樹莓派(57) 物聯網(55) 玄學(11) 生活(209) 程式設計(137) 統計學(8) 網頁空間(36) 網頁開發(128) 虛擬化(7) 農業(42) 遊戲(9) 開箱(132) 雲端(4) 宗教 如何戒邪淫、遠離婚外情 戒淫寶典:《壽康寶鑑》白話有聲書 公益 社團法人新竹縣愛心物資集發協會 智邦公益網 台灣世界展望會 家扶基金會 igiving公益網 ©2022G.T.Wang



請為這篇文章評分?