




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Excel-VBA操作文件四大方法Excel-VBA操作文件四大方法之一在我們?nèi)粘J褂肊xcel的時(shí)候,不僅會(huì)用到當(dāng)前Excel文件的數(shù)據(jù),還經(jīng)常需要訪問(wèn)其他的數(shù)據(jù)文件。這些數(shù)據(jù)文件可能是Excel文件、文本文 件或數(shù)據(jù)庫(kù)文件等。經(jīng)常有朋友會(huì)問(wèn)如何在vba代碼里操作這些數(shù)據(jù)文件?本文就系統(tǒng)地介紹一下在Excel中應(yīng)用VBA操作數(shù)據(jù)文件的方法。本文主要介紹四種常用的方法:1、利用Excel對(duì)象來(lái)處理文件;2、利用VBA文件處理語(yǔ)句來(lái)處理文件;3、利用FileSystemObject對(duì)象來(lái)處理文件;4、利用API函數(shù)來(lái)處理文件。當(dāng)然對(duì)于數(shù)據(jù)庫(kù)文件,還可以利用ADOSQL的方法操作,不過(guò)論壇已經(jīng)有前
2、輩詳細(xì)介紹過(guò)此類方法,本文就不再重復(fù)了。一、利用Excel對(duì)象來(lái)處理文件利用Excel對(duì)象自帶的方法來(lái)操作文件是最方便,也是最簡(jiǎn)單的。我們主要利用Workbooks集合和Workbook對(duì)象的方法來(lái)操作文件。1、打開Excel文件我們可以用Workbooks.Open方法打開一個(gè)Excel工作簿。Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Con
3、verter, AddToMru, Local, CorruptLoad)其中FileName是必選的參數(shù),表示要打開的工作簿名,如果沒有指定路徑,則代表當(dāng)前路徑。另外14個(gè)是可選參數(shù),除了密碼參數(shù),其他的一般很少用。具體的含義可以參看VBA的幫助。例:Workbooks.Open F:test.xls可以打開F盤的test.xls文件。2、打開文本文件使用Open方法也可以打開文本文件,但建議使用OpenText方法。此方法是載入一個(gè)文本文件,并將其作為包含單個(gè)工作表的工作簿進(jìn)行分列處理,然后在此工作表中放入經(jīng)過(guò)分列處理的文本文件數(shù)據(jù)。完整語(yǔ)法如下:Workbooks.OpenText(Fi
4、leName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)關(guān)于以上參數(shù)的具體含義可以參看VBA的幫助,這里就不重復(fù)了。在實(shí)際的編程中,一般無(wú)需對(duì)這些復(fù)雜的參數(shù)進(jìn)行處理??梢酝ㄟ^(guò)錄制宏來(lái)得到打開一個(gè) 文本文件的VBA代碼。具體方
5、法就是選擇“文件打開”,然后選擇打開文本文件,就會(huì)出現(xiàn)文本導(dǎo)入向?qū)В徊揭徊綀?zhí)行完,直到文本打開后,停止錄制。以下是錄制宏得到的代碼:Sub Macro1() Macro1 Macro 宏由 MC SYSTEM 錄制,時(shí)間: 2007-3-292 / 52Workbooks.OpenText Filename:=F:CallWindowProc.txt, Origin:=xlWindows, _StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ConsecutiveDelimiter:=False, Tab:=
6、True, Semicolon:=False, Comma:=False _, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _TrailingMinusNumbers:=TrueEnd Sub在實(shí)際編程中只要做相應(yīng)的修改就可以使用了。3、打開其他文件利用Excel對(duì)象還可以打開XML文件和一些數(shù)據(jù)庫(kù)(如Access)文件,對(duì)應(yīng)XML文件,需要Excel2003以上的版本。OpenXML方法的語(yǔ)法如下:Workbooks.OpenXML(Filename, Stylesheets, LoadOption)FileName String
7、類型,必需。要打開的文件名。Stylesheets Variant 類型,可選。單個(gè)值或值的數(shù)組,用于指定要應(yīng)用哪些 XSL 轉(zhuǎn)換 (XSLT) 樣式表處理指令。LoadOption Variant 類型,轉(zhuǎn)換。指定 Excel 打開 XML 數(shù)據(jù)文件的方式??蔀?XlXmlLoadOption 常量之一。XlXmlLoadOption 可為以下 XlXmlLoadOption 常量之一: xlXmlLoadImportToList 將 XML 數(shù)據(jù)文件的內(nèi)容置于 XML 列表中。 xlXmlLoadMapXml 在“XML 結(jié)構(gòu)”任務(wù)窗格中顯示 XML 數(shù)據(jù)文件的架構(gòu)。 xlXmlLoadO
8、penXml 打開 XML 數(shù)據(jù)文件。文件的內(nèi)容將展開。 xlXmlLoadPromptUser 提示用戶選擇打開文件的方式。 示例下面的代碼打開了 XML 數(shù)據(jù)文件“customers.xml”并在 XML 列表中顯示了此文件的內(nèi)容。Sub UseOpenXML()Application.Workbooks.OpenXML _Filename:=customers.xml, _LoadOption:=xlXmlLoadImportToListEnd SubOpenDatabase 方法語(yǔ)法如下:Workbooks.OpenDatabase(FileName, CommandText, Com
9、mandType, BackgroundQuery, ImportDataAs)FileName String 類型,必需。連接字符串。CommandText Variant 類型,可選。查詢的命令文本。CommandType Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。BackgroundQuery Variant 類型,可選。查詢的背景。ImportDataAs Variant 類型,可選。確定查詢的格式。示例本示例中,Excel 打開了“northwind.mdb”文件。Sub OpenDatabase()Workbooks.
10、OpenDatabase FileName:=C:northwind.mdbEnd Sub4、保存文件文件的保存使用Workbook對(duì)象的Save或SaveAs方法。Save方法使用簡(jiǎn)單,語(yǔ)法為expression.Save,expression是某個(gè)Workbook對(duì)象。如:ActiveWorkbook.Save即保存當(dāng)前活動(dòng)工作簿。如果是第一次保存工作簿或要另存為,請(qǐng)使用 SaveAs 方法為該文件指定文件名。其語(yǔ)法為:expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommende
11、d, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)具體參數(shù)含義可參看VBA幫助,使用都比較簡(jiǎn)單。示例本示例新建一個(gè)工作簿,提示用戶輸入文件名,然后保存該工作簿。Set NewBook = Workbooks.AddDofName = Application.GetSaveAsFilenameLoop Until fName FalseNewBook.SaveAs Filename:=fNameApplication.GetSaveAsFilename為
12、調(diào)出標(biāo)準(zhǔn)的“另存為”對(duì)話框,獲取用戶文件名,但并不真正保存任何文件,然后使用代碼保存文件。還有Application.GetOpenFileName可以調(diào)出標(biāo)準(zhǔn)的“打開”對(duì)話框。5、關(guān)閉文件關(guān)閉文件可以使用Workbooks集合或Workbook對(duì)象的 Close 方法。前者是關(guān)閉所有打開的工作簿,后者關(guān)閉特定的工作簿。Workbook對(duì)象的 Close 方法語(yǔ)法為:expression.Close(SaveChanges, Filename, RouteWorkbook)SaveChanges參數(shù)表示是否保存更改,對(duì)許多不需要更改的操作,可設(shè)置為False以免彈出保存更改提示的對(duì)話框。Fil
13、eName 可選。以此文件名保存所做的更改。RouteWorkbook 可選。如果指定工作簿不需要傳送給下一個(gè)收件人(沒有傳送名單或已經(jīng)傳送),則忽略該參數(shù)。示例本示例關(guān)閉 Book1.xls,并放棄所有對(duì)此工作簿的更改。Workbooks(BOOK1.XLS).Close SaveChanges:=False本示例關(guān)閉所有打開的工作簿。如果某個(gè)打開的工作簿有改變,Microsoft Excel 將顯示詢問(wèn)是否保存更改的對(duì)話框和相應(yīng)提示。Workbooks.Close6、綜合實(shí)例假如F盤有一個(gè)Excel文件test.xls,現(xiàn)在有另一個(gè)Excel文件要訪問(wèn)test.xls的數(shù)據(jù),我們來(lái)看用VB
14、A代碼如何操作。代碼如下:Public Sub test()Application.ScreenUpdating = FalseWorkbooks.Open f:test.xlsThisWorkbook.Sheets(1).Range(b1) = ActiveWorkbook.Sheets(1).Range(a2)ActiveWorkbook.CloseApplication.ScreenUpdating = TrueEnd Sub首先關(guān)閉屏幕刷新,是為了防止test.xls在打開時(shí)被看見(有時(shí)候還是看的見)。打開后,見test.xls的Sheet1的單元格A2中的值賦給當(dāng)前工作簿的Sheet
15、1的單元格B2,然后關(guān)閉test.xls。當(dāng)要打開的工作簿不確定的時(shí)候,可以通過(guò)調(diào)用打開對(duì)話框來(lái)讓用戶自己選擇??筛臑槿缦拢篜ublic Sub test()Application.ScreenUpdating = FalseDim Filename as StringFilename = Application.GetOpenFileNameWorkbooks.Open FilenameThisWorkbook.Sheets(1).Range(b1) = ActiveWorkbook.Sheets(1).Range(a2)ActiveWorkbook.CloseApplication.Scr
16、eenUpdating = TrueEnd Sub7、總結(jié)利用Excel對(duì)象的方法進(jìn)行文件操作是最簡(jiǎn)單,也是最方便的,適合初學(xué)者。對(duì)于Excel文件格式,如果我們僅僅是讀取其表格中的內(nèi)容,這種方法也是首選。對(duì)于文本文件的操作,使用第二種方法比較方便,若要將文本轉(zhuǎn)換成表格,那么使用此方法也是合適的。如何在d:test.xls已打開的情況下不讓以下的語(yǔ)句再去創(chuàng)建一個(gè)test.xls的實(shí)例(雖然它標(biāo)識(shí)為只讀),并給出文件已打開的提示.先做一個(gè)判斷!判斷該工作簿是否打開了? 例如:Set xlexcel = CreateObject(excel.application)dim wb as object
17、 set wb = xlexcel.workbooks(test.xls)if wb is nothing then msgbox 工作簿未打開!xlexcel.Workbooks.Open d:test.xlsxlexcel.Visible = Trueend if Excel-VBA操作文件四大方法之二二、利用VBA文件處理語(yǔ)句來(lái)處理文件VBA包含了許多用于文件操作的語(yǔ)句和函數(shù),可以滿足絕大多數(shù)情況下的文件操作要求。下面我們按照操作目的進(jìn)行一一介紹。(一)文件處理1.Name 語(yǔ)句語(yǔ)法:Name oldpathname As newpathname功能:重命名一個(gè)文件、目錄、或文件夾,移動(dòng)
18、一個(gè)文件。說(shuō)明:在一個(gè)已打開的文件上使用 Name,將會(huì)產(chǎn)生錯(cuò)誤。進(jìn)行文件操作時(shí),一定要注意錯(cuò)誤處理。示例:On Error Resume Next 錯(cuò)誤處理Name f:TEST.xls As f:TEST123.xls 重命名Name f:TEST.xls As f:dllTEST.xls 移動(dòng)文件Name f:TEST.xls As d:TEST123.xls 跨驅(qū)動(dòng)器移動(dòng)并重命名文件注意:Name不能移動(dòng)一個(gè)目錄或文件夾。2、FileCopy 語(yǔ)句語(yǔ)法:FileCopy source, destination功能:復(fù)制一個(gè)文件。說(shuō)明:如果對(duì)一個(gè)已打開的文件使用 FileCopy 語(yǔ)句,
19、則會(huì)產(chǎn)生錯(cuò)誤。示例:FileCopy f:TEST.xls, e:TEST.xls 從F盤復(fù)制TEST.xls到E盤3、Kill 語(yǔ)句語(yǔ)法:Kill pathname功能:從磁盤中刪除文件。說(shuō)明:Kill 支持多字符 (*) 和單字符 (?) 的統(tǒng)配符來(lái)指定多重文件。如果使用 Kill 來(lái)刪除一個(gè)已打開的文件,則會(huì)產(chǎn)生錯(cuò)誤。示例:Kill f:TEST.xls 刪除F盤的TEST.xls文件Kill f:*.xls 刪除F盤所有xls文件4、GetAttr 函數(shù)語(yǔ)法:GetAttr(pathname)功能:獲取一個(gè)文件、目錄、或文件夾的屬性。返回一個(gè) Integer值。返回值由 GetAttr
20、 返回的值,是下面這些屬性值的總和:常數(shù) 值 描述 vbNormal 0 常規(guī) vbReadOnly 1 只讀 vbHidden 2 隱藏 vbSystem 4 系統(tǒng)文件vbDirectory 16 目錄或文件夾 vbArchive 32 存檔文件 vbalias 64 指定的文件名是別名。只在Macintosh中可用。 說(shuō)明:若要判斷是否設(shè)置了某個(gè)屬性,在 GetAttr 函數(shù)與想要得知的屬性值之間使用 And 運(yùn)算符與逐位比較。如果所得的結(jié)果不為零,則表示設(shè)置了這個(gè)屬性值。示例:Debug.Print GetAttr(F:test.txt) 若為存檔文件,在立即窗口可看到值為32Debug
21、.Print GetAttr(F:test.txt) 將屬性高級(jí)可存檔文件的勾去掉后,值為0為判斷一個(gè)文件是否只讀,可用下法:Debug.Print GetAttr(F:test.txt) And vbReadOnly若值非零,說(shuō)明時(shí)只讀的。5、SetAttr 語(yǔ)句語(yǔ)法:SetAttr pathname, attributes功能:為一個(gè)文件設(shè)置屬性。說(shuō)明:如果想要給一個(gè)已打開的文件設(shè)置屬性,則會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤。示例:SetAttrF:test.txt, vbHidden 設(shè)置隱藏屬性。SetAttrF:test.txt, vbHidden + vbReadOnly 設(shè)置隱藏并只讀。6、Fil
22、eLen 函數(shù)語(yǔ)法:FileLen(pathname)功能:獲取一個(gè)文件的長(zhǎng)度,單位是字節(jié)。說(shuō)明:當(dāng)調(diào)用 FileLen 函數(shù)時(shí),不需要打開文件,如果所指定的文件已經(jīng)打開,則返回的值是這個(gè)文件在打開前的大小。7、FileDateTime 函數(shù)語(yǔ)法:FileDateTime(pathname)功能:獲取一個(gè)文件被創(chuàng)建或最后修改后的日期和時(shí)間。示例:Debug.Print FileDateTime(F:TEST.xls) 在立即窗口可看到2007-3-29 19:28:27 (二)目錄處理1、CurDir 函數(shù)語(yǔ)法:CurDir(drive)功能:返回當(dāng)前的路徑。說(shuō)明:drive 參數(shù)是可選的,它
23、指定一個(gè)存在的驅(qū)動(dòng)器。如果沒有指定驅(qū)動(dòng)器,或 drive 是零長(zhǎng)度字符串 (),則 CurDir 會(huì)返回當(dāng)前驅(qū)動(dòng)器的路徑。示例:Debug.Print CurDir 返回“C:Documents and SettingsycMy Documents”。Debug.Print CurDir(C) 返回“C:Documents and SettingsycMy Documents”。Debug.Print CurDir(D) 返回“D:”。2、ChDir 語(yǔ)句語(yǔ)法:ChDir path功能:改變當(dāng)前的目錄或文件夾。說(shuō)明:ChDir 語(yǔ)句改變?nèi)笔∧夸浳恢茫粫?huì)改變?nèi)笔◎?qū)動(dòng)器位置。缺省驅(qū)動(dòng)器一般是C
24、。示例:ChDir D:tempDebug.Print CurDir 返回“C:Documents and SettingsycMy Documents”。Debug.Print CurDir(D) 返回“D:temp”。與上例比較,此時(shí)D盤的當(dāng)前目錄已經(jīng)變?yōu)椤癉:temp”,但是缺省驅(qū)動(dòng)器還是C。3、ChDrive 語(yǔ)句語(yǔ)法:ChDrive drive功能:改變當(dāng)前的驅(qū)動(dòng)器。說(shuō)明:如果使用零長(zhǎng)度的字符串 (),則當(dāng)前的驅(qū)動(dòng)器將不會(huì)改變。如果 drive 參數(shù)中有多個(gè)字符,則 ChDrive 只會(huì)使用首字母。示例:ChDrive DChDir D:tempDebug.Print CurDir
25、返回“D:temp”。Debug.Print CurDir(D) 返回“D:temp”。與上例比較,用CurDir返回的是“D:temp”,當(dāng)前驅(qū)動(dòng)器已經(jīng)變?yōu)镈了。4、Dir 函數(shù)語(yǔ)法:Dir(pathname, attributes)兩個(gè)參數(shù)都是可選的,attributes表示文件屬性。功能:返回一個(gè)文件名、目錄名或文件夾名稱,它必須與指定的模式或文件屬性、或磁盤卷標(biāo)相匹配。說(shuō)明:在第一次調(diào)用 Dir 函數(shù)時(shí),必須指定 pathname,否則會(huì)產(chǎn)生錯(cuò)誤。如果也指定了文件屬性,那么就必須包括 pathname。Dir 會(huì)返回匹配 pathname 的第一個(gè)文件名。若想得到其它匹配 pathna
26、me 的文件名,再一次調(diào)用 Dir,且不要使用參數(shù)。如果已沒有合乎條件的文件,則 Dir 會(huì)返回一個(gè)零長(zhǎng)度字符串 ()。一旦返回值為零長(zhǎng)度字符串,并要再次調(diào)用 Dir 時(shí),就必須指定 pathname,否則會(huì)產(chǎn)生錯(cuò)誤。不必訪問(wèn)到所有匹配當(dāng)前 pathname 的文件名,就可以改變到一個(gè)新的 pathname 上。但是,不能以遞歸方式來(lái)調(diào)用 Dir 函數(shù)。以 vbDirectory 屬性來(lái)調(diào)用 Dir 不能連續(xù)地返回子目錄。示例:Debug.Print Dir(F:TEST.xls) 返回TEST.xlsDebug.Print Dir(F:*.xls) 返回按條件第一個(gè)找到的文件名。Debug.
27、Print Dir(F:*.txt,vbReadOnly) 返回第一個(gè)只讀的txt文件以下過(guò)程可顯示C盤根目錄下的所有目錄.Sub DirC()MyPath = c: MyName = dir(MyPath, vbDirectory) 找尋第一項(xiàng)。Do While MyName 開始循環(huán)。 跳過(guò)當(dāng)前的目錄及上層目錄。If MyName . And MyName . Then 使用位比較來(lái)確定 MyName 代表一目錄。If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory ThenDebug.Print MyName 如果它是一個(gè)
28、目錄,將其名稱顯示出來(lái)。End IfEnd IfMyName = dir 查找下一個(gè)目錄。LoopEnd Sub以下過(guò)程利用遞歸可以查找目錄和子目錄下的所有文件。Public Sub FindFile(mPath As String, Optional sFile As String = )On Error Resume NextDim s As String, sDir() As StringDim i As Long, d As LongIf Right(mPath, 1) ThenmPath = mPath & End If查找目錄下的文件s = dir(mPath & sFile, v
29、bArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)Do While s Debug.Print mPath & ss = dirLoop查找目錄下的子目錄s = dir(mPath, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)Do While s If s . And s . ThenIf (GetAttr(mPath & s) And vbDirectory) = vbDirectory Thend = d
30、+ 1ReDim Preserve sDir(d)sDir(d) = mPath & sEnd IfEnd Ifs = dirLoop開始遞歸 For i = 1 To dFindFile sDir(d) & NextEnd Sub5、MkDir 語(yǔ)句語(yǔ)法:MkDir path功能:創(chuàng)建一個(gè)新的目錄或文件夾。說(shuō)明:path 可以包含驅(qū)動(dòng)器。如果沒有指定驅(qū)動(dòng)器,則 MkDir 會(huì)在當(dāng)前驅(qū)動(dòng)器上創(chuàng)建新的目錄或文件夾。示例:MkDir MYDIR 在當(dāng)前目錄建立新的目錄或文件夾。6、RmDir 語(yǔ)句語(yǔ)法:RmDir path功能:刪除一個(gè)存在的目錄或文件夾。說(shuō)明:如果想要使用 RmDir 來(lái)刪除一個(gè)
31、含有文件的目錄或文件夾,則會(huì)發(fā)生錯(cuò)誤。在試圖刪除目錄或文件夾之前,先使用 Kill 語(yǔ)句來(lái)刪除所有文件。示例:RmDir MYDIR 將 MYDIR 刪除。(三)處理文本文件1、Open 語(yǔ)句語(yǔ)法:Open pathname For mode Access access lock As #filenumber Len=reclength其中access、lock、reclength為可選參數(shù),一般不用。mode 指定打開文件的方式。有5種:Input:以輸入方式打開,即讀取方式。Output:以輸出方式打開,即寫入方式。Append:以追加方式打開,即添加內(nèi)容到文件末尾。Binary:以二進(jìn)制
32、方式打開。Random:以隨機(jī)方式打開,如果未指定方式,則以 Random 方式打開文件。filenumber 是一個(gè)有效的文件號(hào),范圍在 1 到 511 之間??梢灾付?,也可使用 FreeFile 函數(shù)可得到下一個(gè)可用的文件號(hào)。 說(shuō)明:如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打開文件時(shí),可以建立這一文件。示例:Open F:TEST.txt For Input As #1 以輸入方式打開Open F:TEST.xls For Binary As #1 以二進(jìn)制方式打開2、Close 語(yǔ)句語(yǔ)法:Close filen
33、umberlistfilenumberlist 參數(shù)為一個(gè)或多個(gè)文件號(hào),若省略 filenumberlist,則將關(guān)閉 Open 語(yǔ)句打開的所有活動(dòng)文件。說(shuō)明:打開文件后,必須在使用完后關(guān)閉文件。示例:Dim I, FileNameFor I = 1 To 3 FileName = TEST & I 創(chuàng)建文件名。Open FileName For Output As #I 打開文件。Print #I, This is a test. 將字符串寫入文件。Next IClose 將三個(gè)已打開的文件全部關(guān)閉。3、Reset 語(yǔ)句語(yǔ)法:Reset功能:關(guān)閉所有用 Open 語(yǔ)句打開的磁盤文件。說(shuō)明:R
34、eset 語(yǔ)句關(guān)閉 Open 語(yǔ)句打開的所有活動(dòng)文件,并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。示例:Dim FileNumberFor FileNumber = 1 To 5 Open TEST & FileNumber For Output As #FileNumberWrite #FileNumber, Hello World 將數(shù)據(jù)寫入文件。Next FileNumberReset 關(guān)閉文件并將緩沖區(qū)內(nèi)的數(shù)據(jù)寫到磁盤中。4、FreeFile 函數(shù)語(yǔ)法:FreeFile(rangenumber)參數(shù) rangenumber指定一個(gè)范圍,以便返回該范圍之內(nèi)的下一個(gè)可用文件號(hào)。指定 0(缺省值)則返
35、回一個(gè)介于 1 255 之間的文件號(hào)。指定 1 則返回一個(gè)介于 256 511 之間的文件號(hào)。功能:提供一個(gè)尚未使用的文件號(hào)。示例:Dim fnum As Integerfnum = FreeFileOpen F:TEST.txt For Input As #fnumClose #fnum5、EOF 函數(shù)語(yǔ)法:EOF(filenumber)功能:返回一個(gè) Integer,它包含 Boolean 值 True,表明已經(jīng)到達(dá)為 Random 或順序 Input 打開的文件的結(jié)尾。6、LOF 函數(shù)語(yǔ)法:LOF(filenumber)功能:返回一個(gè) Long,表示用 Open 語(yǔ)句打開的文件的大小,該
36、大小以字節(jié)為單位。7、Loc 函數(shù)語(yǔ)法:LOc(filenumber)功能:返回一個(gè) Long,在已打開的文件中指定當(dāng)前讀/寫位置。8、Input # 語(yǔ)句語(yǔ)法:Input #filenumber, varlist功能:從已打開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)指定給變量。說(shuō)明:通常用 Write # 將 Input # 語(yǔ)句讀出的數(shù)據(jù)寫入文件。為了能夠用 Input # 語(yǔ)句將文件的數(shù)據(jù)正確讀入到變量中,在將數(shù)據(jù)寫入文件時(shí),要使用 Write # 語(yǔ)句而不使用 Print # 語(yǔ)句。使用 Write # 語(yǔ)句可以確保將各個(gè)單獨(dú)的數(shù)據(jù)域正確分隔開。示例:本示例使用 Input # 語(yǔ)句將文件內(nèi)的數(shù)據(jù)
37、讀入兩個(gè)變量中。本示例假設(shè) TESTFILE文件內(nèi)含數(shù)行以 Write # 語(yǔ)句寫入的數(shù)據(jù);也就是說(shuō),每一行數(shù)據(jù)中的字符串部分都是用雙引號(hào)括起來(lái),而與數(shù)字用逗號(hào)隔開,例如,(Hello, 234)。Dim MyString, MyNumberOpen TESTFILE For Input As #1 打開輸入文件。Do While Not EOF(1) 循環(huán)至文件尾。Input #1, MyString, MyNumber 將數(shù)據(jù)讀入兩個(gè)變量。Debug.Print MyString, MyNumber 在立即窗口中顯示數(shù)據(jù)。LoopClose #1 關(guān)閉文件。9、Write # 語(yǔ)句語(yǔ)法:W
38、rite #filenumber, outputlist功能:將數(shù)據(jù)寫入順序文件。說(shuō)明:通常用 Input # 從文件讀出 Write # 寫入的數(shù)據(jù)。如果省略 outputlist,并在 filenumber 之后加上一個(gè)逗號(hào),則會(huì)將一個(gè)空白行打印到文件中。多個(gè)表達(dá)式之間可用空白、分號(hào)或逗號(hào)隔開。空白和分號(hào)等效。用 Write # 將數(shù)據(jù)寫入文件時(shí)將遵循幾個(gè)通用的約定,使得無(wú)論什么區(qū)域都可用 Input # 讀出并正確解釋數(shù)據(jù): 在寫入數(shù)值數(shù)據(jù)時(shí)總使用句號(hào)作為十進(jìn)制分隔符。對(duì)于 Boolean 類型的數(shù)據(jù),或者打印 #TRUE# 或者打印 #FALSE#。無(wú)論在什么地區(qū),都不將 True 和
39、 False 這兩個(gè)關(guān)鍵字翻譯出來(lái)。使用通用的日期格式將 Date 類型的數(shù)據(jù)寫入文件中。當(dāng)日期或時(shí)間的部件丟失或?yàn)榱銜r(shí),只將現(xiàn)有部分寫入文件中。如果 outputlist 的數(shù)據(jù)為 Empty,則不將任何數(shù)據(jù)寫入文件。但對(duì) Null 數(shù)據(jù),則要寫入 #NULL#。如果 outputlist 數(shù)據(jù)為 Null 數(shù)據(jù),則將 #NULL# 寫入文件中。對(duì)于 Error 類型的數(shù)據(jù),輸出看起來(lái)與 #ERROR errorcode# 一樣。無(wú)論在什么地區(qū),都不將關(guān)鍵字 Error 翻譯出來(lái)。 與 Print # 語(yǔ)句不同,當(dāng)要將數(shù)據(jù)寫入文件時(shí),Write # 語(yǔ)句會(huì)在項(xiàng)目和用來(lái)標(biāo)記字符串的引號(hào)之間插入
40、逗號(hào)。沒有必要在列表中鍵入明確的分界符。Write # 語(yǔ)句在將 outputlist 中的最后一個(gè)字符寫入文件后會(huì)插入一個(gè)新行字符,即回車換行符,(Chr(13) + Chr(10)。 示例:Open F:test.txt For Output As #1 打開輸出文件。Write #1, Hello World, 1234 寫入以逗號(hào)隔開的數(shù)據(jù)。Write #1, 寫入空白行。Dim MyBool, MyDate, MyNull, MyError 賦值 Boolean、Date、Null 及 Error 等。MyBool = False : MyDate = #February 12, 1
41、969# : MyNull = NullMyError = CVErr(32767) Boolean 數(shù)據(jù)以 #TRUE# 或 #FALSE# 的格式寫入。 日期以通用日期格式寫入,例如:#1994-07-13# 代表 1994 年 1 月 13 日。Null 數(shù)據(jù)以 #NULL# 格式寫入。 Error 數(shù)據(jù)以 #ERROR 錯(cuò)誤代號(hào)# 的格式寫入。Write #1, MyBool; is a Boolean valueWrite #1, MyDate; is a dateWrite #1, MyNull; is a null valueWrite #1, MyError; is an er
42、ror valueClose #1 關(guān)閉文件。我們可以看到寫入的內(nèi)容為:Hello World,1234#FALSE#, is a Boolean value#1969-02-12#, is a date#NULL#, is a null value#ERROR 32767#, is an error value10、Line Input # 語(yǔ)句語(yǔ)法:Line Input #filenumber, varname功能:從已打開的順序文件中讀出一行并將它分配給 String 變量。說(shuō)明:通常用 Print # 與 Line Input # 語(yǔ)句配合使用。Line Input # 語(yǔ)句一次只從文
43、件中讀出一個(gè)字符,直到遇到回車符 (Chr(13) 或回車換行符 (Chr(13) + Chr(10) 為止?;剀嚀Q行符將被跳過(guò),而不會(huì)被附加到字符串上。示例:Dim TextLineOpen TESTFILE For Input As #1 打開文件。Do While Not EOF(1) 循環(huán)至文件尾。Line Input #1, TextLine 讀入一行數(shù)據(jù)并將其賦予某變量。Debug.Print TextLine 在立即窗口中顯示數(shù)據(jù)。LoopClose #1 關(guān)閉文件。11、Input 函數(shù)語(yǔ)法:Input(number, #filenumber)其中number 指定要返回的字符
44、個(gè)數(shù)。 功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。說(shuō)明:通常用 Print # 或 Put 將 Input 函數(shù)讀出的數(shù)據(jù)寫入文件。Input 函數(shù)只用于以 Input 或 Binary 方式打開的文件。與 Input # 語(yǔ)句不同,Input 函數(shù)返回它所讀出的所有字符,包括逗號(hào)、回車符、空白列、換行符、引號(hào)和前導(dǎo)空格等。示例:Dim MyCharOpen f:test.txt For Input As #1Do While Not EOF(1) 循環(huán)至文件尾。MyChar = Input(1, #1) 讀入一個(gè)字符。Debug.Print M
45、yChar 顯示到立即窗口。LoopClose #1下面這個(gè)函數(shù)可以將文本文件的數(shù)據(jù)一次讀入到一個(gè)字符串(但是若包含中文時(shí)會(huì)出錯(cuò),因?yàn)橐粋€(gè)中文字占2個(gè)字節(jié))。Public Function ReadText(FileName As String)Dim fnum%, isopen As BooleanOn Error GoTo errofnum = FreeFile()Open FileName For Input As #fnumisopen = TrueReadText = Input(LOF(fnum), fnum)erro:If isopen Then Close #fnumIf er
46、r Then Debug.Print err.Number, err.DescriptionEnd Function12、Print # 語(yǔ)句語(yǔ)法:Print #filenumber, outputlistoutputlist 參數(shù)的設(shè)置如下:Spc(n) | Tab(n) expression charposSpc(n) 用來(lái)在輸出數(shù)據(jù)中插入空白字符,而 n 指的是要插入的空白字符數(shù)。 Tab(n) 用來(lái)將插入點(diǎn)定位在某一絕對(duì)列號(hào)上,這里,n 是列號(hào)。使用無(wú)參數(shù)的 Tab 將插入點(diǎn)定位在下一個(gè)打印區(qū)的起始位置。 expression 要打印的數(shù)值表達(dá)式或字符串表達(dá)式。 charpos 指定下
47、一個(gè)字符的插入點(diǎn)。使用分號(hào)將插入點(diǎn)定位在上一個(gè)顯示字符之后。用 Tab(n) 將插入點(diǎn)定位在某一絕對(duì)的列號(hào)上,用無(wú)參數(shù)的 Tab 將插入點(diǎn)定位在下一個(gè)打印區(qū)的起始處。如果省略 charpos,則在下一行打印下一個(gè)字符。 功能:將格式化顯示的數(shù)據(jù)寫入順序文件中。說(shuō)明:通常用 Line Input # 或 Input 讀出 Print # 在文件中寫入的數(shù)據(jù)。示例:Open F:test.txt For Output As #1 打開輸出文件。Print #1, This is a test 將文本數(shù)據(jù)寫入文件。Print #1, 將空白行寫入文件。Print #1, Zone 1; Tab; Z
48、one 2 數(shù)據(jù)寫入兩個(gè)區(qū)(print zones)。Print #1, Hello; ; World 以空格隔開兩個(gè)字符串。Print #1, Spc(5); 5 leading spaces 在字符串之前寫入五個(gè)空格。Print #1, Tab(10); Hello 將數(shù)據(jù)寫在第十列。 賦值 Boolean、Date、Null 及 Error 等。Dim MyBool, MyDate, MyNull, MyErrorMyBool = False: MyDate = #2/12/1969#: MyNull = NullMyError = CVErr(32767) True、False、Nul
49、l 及 Error 會(huì)根據(jù)系統(tǒng)的地區(qū)設(shè)置自動(dòng)轉(zhuǎn)換格式。 日期將以標(biāo)準(zhǔn)的短式日期的格式顯示。Print #1, MyBool; is a Boolean valuePrint #1, MyDate; is a datePrint #1, MyNull; is a null valuePrint #1, MyError; is an error valueClose #1以上代碼寫入的內(nèi)容如下:This is a testZone 1 Zone 2Hello World5 leading spaces HelloFalse is a Boolean value1969-2-12 is a date
50、Null is a null valueError 32767 is an error value13、Width # 語(yǔ)句語(yǔ)法:Width #filenumber, widthwidth 必要。范圍在 0255 之間的數(shù)值表達(dá)式,在新的一行開始之前,指出在該行上可出現(xiàn)多少字符。如果 width 等于 0,則行的長(zhǎng)度不受限制。width 的缺省值為 0。 功能:將一個(gè)輸出行的寬度指定給用 Open 語(yǔ)句打開的文件。示例:Dim IOpen f:TESTFILE.txt For Output As #1Width #1, 5 設(shè)置輸出行寬為 5。For I = 0 To 9 循環(huán) 10 次。Pr
51、int #1, Chr(48 + I); 每行輸出五個(gè)字符。Next IClose #1以上代碼寫入的內(nèi)容如下:0123456789(四)處理二進(jìn)制文件打開二進(jìn)制文件可以使用Open語(yǔ)句的Random和Binary方式打開。二進(jìn)制文件讀寫使用Get和Put語(yǔ)句。1、Put 語(yǔ)句語(yǔ)法:Put #filenumber, recnumber, varnamerecnumber 可選。Variant (Long)。記錄號(hào)(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),指明在此處開始寫入。 說(shuō)明:通常用 Get 將 Put 寫入的文件數(shù)據(jù)讀出來(lái)。示例:Dim num As Long,
52、text As Stringnum = 12345text = a stringOpen f:data.bin For Binary As #1 打開或創(chuàng)建一個(gè)二進(jìn)制文件Put #1, , num 寫入4個(gè)字節(jié)Put #1, , text 寫入8個(gè)字節(jié)(字符串長(zhǎng)為8)Close #12、Get 語(yǔ)句語(yǔ)法:Get #filenumber, recnumber, varname recnumber 可選。Variant (Long)。記錄號(hào)(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),以表示在此處開始讀出數(shù)據(jù)。 功能:將一個(gè)已打開的磁盤文件讀入一個(gè)變量之中。說(shuō)明:通常用 Put
53、 將 Get 讀出的數(shù)據(jù)寫入一個(gè)文件。示例:讀取以上代碼寫入的內(nèi)容Dim num As Long, text As StringOpen f:data.bin For Binary As #1Get #1, , numtext = Space$(8) 準(zhǔn)備8個(gè)字節(jié)的字符串Get #1, , text 讀入Debug.Print num, textClose #1在立即窗口可以看到如下內(nèi)容:12345 a string3、Seek 語(yǔ)句語(yǔ)法:Seek #filenumber, position其中position 為介于 1 2,147,483,647(相當(dāng)于 231 1)之間的數(shù)字,指出下一個(gè)
54、讀寫操作將要發(fā)生的位置。 功能:在 Open 語(yǔ)句打開的文件中,設(shè)置下一個(gè)讀/寫操作的位置。說(shuō)明:可以用Seek語(yǔ)句指定Get語(yǔ)句的讀取位置,但在 Get 及 Put 語(yǔ)句中指定的記錄號(hào)將覆蓋由 Seek 語(yǔ)句指定的文件位置。示例:Dim MaxSize, NextChar, MyCharOpen TESTFILE For Input As #1 MaxSize = LOF(1) 取得文件的總字符數(shù)。 用循環(huán)讀入所有記錄,但是從最后的記錄開始往前讀。For NextChar = MaxSize To 1 Step -1 Seek #1, NextChar 設(shè)置讀寫位置。MyChar = Input(1, #1) 讀入一字符。Next NextCharClose #1 4、Seek 函數(shù)語(yǔ)法:Seek(filenumber)功能:返回一個(gè) Long,在 Open 語(yǔ)句打開的文件中指定當(dāng)前的讀/寫位置。說(shuō)明:在使用Get語(yǔ)句讀取文件時(shí),必須用LOF函數(shù)來(lái)判斷是否到達(dá)文件末尾,而不是用EO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司節(jié)日回顧活動(dòng)方案
- 公司籃球組織活動(dòng)方案
- 公司放假團(tuán)建策劃方案
- 公司漢堡活動(dòng)策劃方案
- 公司節(jié)日套餐活動(dòng)方案
- 公司每月vip活動(dòng)方案
- 公司組織廣場(chǎng)舞活動(dòng)方案
- 公司標(biāo)準(zhǔn)化活動(dòng)方案
- 公司美食大賽策劃方案
- 公司生日會(huì)西餐策劃方案
- 2025年湖北省中考道德與法治真題含答案
- 2024年上海浦東新區(qū)公辦學(xué)校儲(chǔ)備教師招聘筆試真題
- 物流司機(jī)獎(jiǎng)罰管理制度
- 體裁教學(xué)法在高中英語(yǔ)閱讀教學(xué)中的應(yīng)用研究-以說(shuō)明文為例
- 7數(shù)滬科版期末考試卷-2024-2025學(xué)年七年級(jí)(初一)數(shù)學(xué)下冊(cè)期末考試模擬卷02
- 人教版(2024)2025年春季學(xué)期七年級(jí)下冊(cè)地理期末復(fù)習(xí)模擬試卷(原卷)
- 2025年全國(guó)統(tǒng)一高考英語(yǔ)試卷(全國(guó)一卷)含答案
- 2025年全國(guó)普通高校招生全國(guó)統(tǒng)一考試數(shù)學(xué)試卷(新高考Ⅰ卷)含答案
- 生物●廣東卷丨2024年廣東省普通高中學(xué)業(yè)水平選擇性考試生物試卷及答案
- 2025年河南省豫地科技集團(tuán)有限公司社會(huì)招聘169人筆試參考題庫(kù)附帶答案詳解析集合
- 2025年中國(guó)電風(fēng)扇行業(yè)市場(chǎng)現(xiàn)狀、進(jìn)出口貿(mào)易、市場(chǎng)規(guī)模預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論