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