W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
你已經(jīng)從前面的章節(jié)里知道了如何使用VBA打開一個電子表格,例如指令:
Application.Workbooks.Open Filename:= "C:\Excel\Report.xls"
打開位于文件夾C:\Excel里面的文件Report.xls。除了使用專門的應(yīng)用程序打開文件之外,你如果也想要創(chuàng)建VBA過程能夠打開其它類型的文件并使用它們的內(nèi)容的話,你就應(yīng)該學(xué)習(xí)一些關(guān)于被稱為低級別的文件I/O(input/output)。接下來關(guān)于順序,隨機(jī)和二進(jìn)制文件的章節(jié)將會帶你直接接觸你的數(shù)據(jù)。
你的電腦硬盤上有成百上千的順序文件。參數(shù)文件,錯誤日志,HTML文件以及所有類型的無格式文本文件都是順序文件。這些文件以字母順序在硬盤上儲存。新文本行的開始以兩個專門的字符表示,一個叫做carriage return (回車),另一個叫l(wèi)ine feed(換行)。當(dāng)你使用順序文件時,你從文件的開頭始,一個字符一個字符的向前移動,一行接一行,直到文件的結(jié)尾。順序文件容易打開和操作,任何文本編輯器都可以。
技巧:什么是順序文件?
順序文件就是訪問它里面的記錄時必須按它占據(jù)的順序進(jìn)行的文件,這意味著在你想訪問第三個記錄之前,你必須先訪問第一個記錄,接著是第二個記錄。
技巧:使用Open語句打開文件
當(dāng)你使用順序訪問來打開一個文件時,該文件必須是已經(jīng)存在的。
Open pathname For mode [Access access][lock] As [#]filenumber [Len=reclength]
Open語句有三個必須的參數(shù),它們是pathname, mode, 和 filenumber。上面的語法里,這三個參數(shù)前面都有用粗體顯示的關(guān)鍵字。Open "C:\Autoexec.bat" For Input As #1
如果某文件已經(jīng)打開輸入了,那么從它讀取數(shù)據(jù)。在打開一格順序文件后,你就可以使用下面的語句讀取它的內(nèi)容:Line Input #或者 Input # 或者使用Input 函數(shù)。使用下面的語句來逐行讀取Autoexec.bat或者其它任何順序文件里的內(nèi)容:
Line Input #filenumber, variableName
#filenumber是用Open語句打開文件時使用的數(shù)字,variableName是個String或者Variant變量,用來儲存讀取的行。
Line Input #語句僅讀取一開啟順序文件里的一行并且儲存在一變量里。記住,Line Input # 語句一次讀取順序文件里的一個字符,直到它遇到回車字符(Chr(13))或者回車-換行字符(Chr(13)& Chr(10))。這些字符(回車,換行)在讀取過程中返回的文本里是會忽略掉的。
接下來的過程ReadMe示范如何使用Open和Line Input #語句逐行讀取Autoexec.bat文件的內(nèi)容。試試用同樣的方法來讀取其它順序文件。
1. 在當(dāng)前工程里面插入新模塊并重命名為SeqFiles
2. 輸入下列過程ReadMe:
Sub ReadMe()
Dim rLine As String
Dim i As Integer ' line number
i = 1
Open "C:\Autoexec.bat" For Input As #1
' stay inside the loop until the end of file is reached
Do While Not EOF(1)
Line Input #1, rLine
MsgBox "Line " & i & " in Autoexec.bat reads: " _
& Chr(13) & Chr(13) & rLine
i = i + 1
Loop
MsgBox i & " lines were read."
Close #1
End Sub
3. 按下F8,逐句運(yùn)行該過程
為了讀取內(nèi)容,過程ReadMe將文件Autoexec.bat在模式Input里作為文件號碼1打開。Do…While循環(huán)告訴VB一直執(zhí)行循環(huán)里面的語句,直到到達(dá)文件結(jié)尾。文件的結(jié)尾由函數(shù)EOF的結(jié)果決定。
EOF函數(shù)當(dāng)下個要讀取的字符已經(jīng)過了文件結(jié)尾時,返回邏輯值True。注意,EOF要求一個參數(shù)——你要檢查的打開了的文件號碼,是前面Open語句使用的同一個數(shù)字。使用EOF函數(shù)來確保VB不會超出文件結(jié)尾處。
Line Input # 語句將每行內(nèi)容儲存于變量rLine里,然后,信息框顯示行號和它的內(nèi)容。之后如果函數(shù)EOF的結(jié)果還是為假(還未到達(dá)文件結(jié)尾處)的話,VBA給行計數(shù)器增加1,并且開始讀取下一行。當(dāng)函數(shù)EOF結(jié)果為真是,VB就會退出循環(huán)。在VBA結(jié)束前,還會再運(yùn)行兩條語句,顯示讀取行的總數(shù),以及關(guān)閉該打開的文件。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: