Excel中用VBA操作文件的方法匯總_第1頁(yè)
Excel中用VBA操作文件的方法匯總_第2頁(yè)
Excel中用VBA操作文件的方法匯總_第3頁(yè)
Excel中用VBA操作文件的方法匯總_第4頁(yè)
Excel中用VBA操作文件的方法匯總_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ù),表示要打開的工作簿名,如果沒(méi)有指定路徑,則代表當(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

4、.OpenText(FileName, 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è) 文本

5、文件的VBA代碼。具體方法就是選擇“文件打開”,然后選擇打開文本文件,就會(huì)出現(xiàn)文本導(dǎo)入向?qū)В徊揭徊綀?zhí)行完,直到文本打開后,停止錄制。以下是錄制宏得到的代碼:Sub Macro1()'' Macro1 Macro' 宏由 MC SYSTEM 錄制,時(shí)間: 2007-3-29''Workbooks.OpenText Filename:="F:CallWindowProc.txt", Origin:=xlWindows, _StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubl

6、eQuote, _ConsecutiveDelimiter:=False, Tab:=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(Filenam

7、e, Stylesheets, LoadOption)FileName String 類型,必需。要打開的文件名。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 列表中。 xlXmlLoadMapX

8、ml 在“XML 結(jié)構(gòu)”任務(wù)窗格中顯示 XML 數(shù)據(jù)文件的架構(gòu)。 xlXmlLoadOpenXml 打開 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 方

9、法語(yǔ)法如下:Workbooks.OpenDatabase(FileName, CommandText, CommandType, BackgroundQuery, ImportDataAs)FileName String 類型,必需。連接字符串。CommandText Variant 類型,可選。查詢的命令文本。CommandType Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。BackgroundQuery Variant 類型,可選。查詢的背景。ImportDataAs Variant 類型,可選。確定查詢的格式。示例本示例中,

10、Excel 打開了“northwind.mdb”文件。Sub OpenDatabase()Workbooks.OpenDatabase FileName:="C:northwind.mdb"End 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(F

11、ileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)具體參數(shù)含義可參看VBA幫助,使用都比較簡(jiǎn)單。示例本示例新建一個(gè)工作簿,提示用戶輸入文件名,然后保存該工作簿。Set NewBook = Workbooks.AddDofName = Application.GetSaveAsFilenameLoop Until fNam

12、e <> FalseNewBook.SaveAs Filename:=fNameApplication.GetSaveAsFilename為調(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,

13、 RouteWorkbook)SaveChanges參數(shù)表示是否保存更改,對(duì)許多不需要更改的操作,可設(shè)置為False以免彈出保存更改提示的對(duì)話框。FileName 可選。以此文件名保存所做的更改。RouteWorkbook 可選。如果指定工作簿不需要傳送給下一個(gè)收件人(沒(méi)有傳送名單或已經(jīng)傳送),則忽略該參數(shù)。示例本示例關(guān)閉 Book1.xls,并放棄所有對(duì)此工作簿的更改。Workbooks("BOOK1.XLS").Close SaveChanges:=False本示例關(guān)閉所有打開的工作簿。如果某個(gè)打開的工作簿有改變,Microsoft Excel 將顯示詢問(wèn)是否保存更改的

14、對(duì)話框和相應(yīng)提示。Workbooks.Close6、綜合實(shí)例假如F盤有一個(gè)Excel文件test.xls,現(xiàn)在有另一個(gè)Excel文件要訪問(wèn)test.xls的數(shù)據(jù),我們來(lái)看用VBA代碼如何操作。代碼如下:Public Sub test()Application.ScreenUpdating = FalseWorkbooks.Open "f:test.xls"ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")ActiveWorkbook.Clo

15、seApplication.ScreenUpdating = TrueEnd Sub首先關(guān)閉屏幕刷新,是為了防止test.xls在打開時(shí)被看見(有時(shí)候還是看的見)。打開后,見test.xls的Sheet1的單元格A2中的值賦給當(dāng)前工作簿的Sheet1的單元格B2,然后關(guān)閉test.xls。當(dāng)要打開的工作簿不確定的時(shí)候,可以通過(guò)調(diào)用打開對(duì)話框來(lái)讓用戶自己選擇??筛臑槿缦拢篜ublic Sub test()Application.ScreenUpdating = FalseDim Filename as StringFilename = Application.GetOpenFileNameWor

16、kbooks.Open FilenameThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")ActiveWorkbook.CloseApplication.ScreenUpdating = TrueEnd Sub7、總結(jié)利用Excel對(duì)象的方法進(jìn)行文件操作是最簡(jiǎn)單,也是最方便的,適合初學(xué)者。對(duì)于Excel文件格式,如果我們僅僅是讀取其表格中的內(nèi)容,這種方法也是首選。對(duì)于文本文件的操作,使用第二種方法比較方便,若要將文本轉(zhuǎn)換成表格,那么使用此方法也是合適的。如何在

17、d:test.xls已打開的情況下不讓以下的語(yǔ)句再去創(chuàng)建一個(gè)test.xls的實(shí)例(雖然它標(biāo)識(shí)為只讀),并給出文件已打開的提示.先做一個(gè)判斷!判斷該工作簿是否打開了? 例如:Set xlexcel = CreateObject("excel.application")dim wb as object set wb = xlexcel.workbooks("test.xls")if wb is nothing then msgbox "工作簿未打開!"xlexcel.Workbooks.Open "d:test.xls&quo

18、t;xlexcel.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)一個(gè)文件。說(shuō)明:在一個(gè)已打開的文件上使用 Name,將會(huì)產(chǎn)生錯(cuò)誤。進(jìn)行文件操作時(shí),一定要注意錯(cuò)誤處理。示例:On Error Resume Next '錯(cuò)誤處理Name "f:TEST.xl

19、s" 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ǔ)句,則會(huì)產(chǎn)生錯(cuò)誤。示例:Fi

20、leCopy "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)

21、功能:獲取一個(gè)文件、目錄、或文件夾的屬性。返回一個(gè) Integer值。返回值由 GetAttr 返回的值,是下面這些屬性值的總和:常數(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.Pri

22、nt GetAttr("F:test.txt") '若為存檔文件,在立即窗口可看到值為32Debug.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ò)誤

23、。示例:SetAttr"F:test.txt", vbHidden ' 設(shè)置隱藏屬性。SetAttr"F:test.txt", vbHidden + vbReadOnly ' 設(shè)置隱藏并只讀。6、FileLen 函數(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í)間。

24、示例:Debug.Print FileDateTime("F:TEST.xls") '在立即窗口可看到2007-3-29 19:28:27 (二)目錄處理1、CurDir 函數(shù)語(yǔ)法:CurDir(drive)功能:返回當(dāng)前的路徑。說(shuō)明:drive 參數(shù)是可選的,它指定一個(gè)存在的驅(qū)動(dòng)器。如果沒(méi)有指定驅(qū)動(dòng)器,或 drive 是零長(zhǎng)度字符串 (""),則 CurDir 會(huì)返回當(dāng)前驅(qū)動(dòng)器的路徑。示例:Debug.Print CurDir ' 返回“C:Documents and SettingsycMy Documents”。Debug.Prin

25、t 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。示例:ChDir "D:temp"Debug.Print CurDir ' 返回“C:Documents and SettingsycMy Documents”。Debu

26、g.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 "D"ChDir "D:temp"Debug.Print CurDir ' 返回“D:temp”。Debug.Print

27、 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è)文件名。若想得到其它匹配 pathname 的

28、文件名,再一次調(diào)用 Dir,且不要使用參數(shù)。如果已沒(méi)有合乎條件的文件,則 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.xls"Debug.Print Di

29、r("F:*.xls") 返回按條件第一個(gè)找到的文件名。Debug.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 <> "." A

30、nd MyName <> "." Then' 使用位比較來(lái)確定 MyName 代表一目錄。If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory ThenDebug.Print MyName ' 如果它是一個(gè)目錄,將其名稱顯示出來(lái)。End IfEnd IfMyName = dir ' 查找下一個(gè)目錄。LoopEnd Sub以下過(guò)程利用遞歸可以查找目錄和子目錄下的所有文件。Public Sub FindFile(mPath As String, Optional sFi

31、le 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, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)Do

32、 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

33、) = vbDirectory Thend = d + 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)器。如果沒(méi)有指定驅(qū)動(dòng)器,則 MkDir 會(huì)在當(dāng)前驅(qū)動(dòng)器上創(chuàng)建新的目錄或文件夾。示例:MkDir "MYDIR" '在當(dāng)前目錄建立新的

34、目錄或文件夾。6、RmDir 語(yǔ)句語(yǔ)法:RmDir path功能:刪除一個(gè)存在的目錄或文件夾。說(shuō)明:如果想要使用 RmDir 來(lái)刪除一個(gè)含有文件的目錄或文件夾,則會(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 指定打開文件

35、的方式。有5種:Input:以輸入方式打開,即讀取方式。Output:以輸出方式打開,即寫入方式。Append:以追加方式打開,即添加內(nèi)容到文件末尾。Binary:以二進(jìn)制方式打開。Random:以隨機(jī)方式打開,如果未指定方式,則以 Random 方式打開文件。filenumber 是一個(gè)有效的文件號(hào),范圍在 1 到 511 之間??梢灾付?,也可使用 FreeFile 函數(shù)可得到下一個(gè)可用的文件號(hào)。 說(shuō)明:如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打開文件時(shí),可以建立這一文件。示例:Open "F:TEST.

36、txt" For Input As #1 '以輸入方式打開Open "F:TEST.xls" For Binary As #1 '以二進(jìn)制方式打開2、Close 語(yǔ)句語(yǔ)法:Close filenumberlistfilenumberlist 參數(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)建文件名。O

37、pen 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ō)明:Reset 語(yǔ)句關(guān)閉 Open 語(yǔ)句打開的所有活動(dòng)文件,并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。示例:Dim FileNumberFor FileNumber = 1 To 5 Open "TEST" & FileNumber For

38、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(缺省值)則返回一個(gè)介于 1 255 之間的文件號(hào)。指定 1 則返回一個(gè)介于 256 511 之間的文件號(hào)。功能:提供一個(gè)尚未使用的文件號(hào)。示例:Dim fnum As Integerfnu

39、m = 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ǔ)句打開的文件的大小,該大小以字節(jié)為單位。7、Loc 函數(shù)語(yǔ)法:LOc(filenumber)功能:返回一個(gè) Long,在已打開的文件中指定當(dāng)前讀/寫位置。8、Input #

40、語(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ù)讀入兩個(gè)變量中。本示例假設(shè) TESTFILE文件內(nèi)含數(shù)行以 Write # 語(yǔ)句寫入的數(shù)據(jù);也就是說(shuō),每一行數(shù)據(jù)中的字符串部分都是用雙引號(hào)括起來(lái),而與數(shù)

41、字用逗號(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ǔ)法:Write #filenumber, outp

42、utlist功能:將數(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 和 False 這兩個(gè)

43、關(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)目和

44、用來(lái)標(biāo)記字符串的引號(hào)之間插入逗號(hào)。沒(méi)有必要在列表中鍵入明確的分界符。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、

45、Date、Null 及 Error 等。MyBool = False : MyDate = #February 12, 1969# : 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 val

46、ue"Write #1, MyDate; " is a date"Write #1, MyNull; " is a null value"Write #1, MyError; " is an error value"Close #1 ' 關(guān)閉文件。我們可以看到寫入的內(nèi)容為:"Hello World",1234#FALSE#," is a Boolean value"#1969-02-12#," is a date"#NULL#," is a nul

47、l value"#ERROR 32767#," is an error value"10、Line Input # 語(yǔ)句語(yǔ)法:Line Input #filenumber, varname功能:從已打開的順序文件中讀出一行并將它分配給 String 變量。說(shuō)明:通常用 Print # 與 Line Input # 語(yǔ)句配合使用。Line Input # 語(yǔ)句一次只從文件中讀出一個(gè)字符,直到遇到回車符 (Chr(13) 或回車換行符 (Chr(13) + Chr(10) 為止?;剀嚀Q行符將被跳過(guò),而不會(huì)被附加到字符串上。示例:Dim TextLineOpen &qu

48、ot;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 指定要返回的字符個(gè)數(shù)。 功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。說(shuō)明:通常用 Pr

49、int # 或 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 MyChar ' 顯示到立即窗口。LoopClose #1下面

50、這個(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 err Then Debug.Print err.Numbe

51、r, 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 指定下一個(gè)字符的插入點(diǎn)。使用分號(hào)將插入點(diǎn)定位在上一個(gè)顯示字符之

52、后。用 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,

53、"Zone 1" Tab; "Zone 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

54、 等。Dim MyBool, MyDate, MyNull, MyErrorMyBool = False: MyDate = #2/12/1969#: MyNull = NullMyError = CVErr(32767)' True、False、Null 及 Error 會(huì)根據(jù)系統(tǒng)的地區(qū)設(shè)置自動(dòng)轉(zhuǎn)換格式。' 日期將以標(biāo)準(zhǔn)的短式日期的格式顯示。Print #1, MyBool; " is a Boolean value"Print #1, MyDate; " is a date"Print #1, MyNull; " is a

55、null value"Print #1, MyError; " is an error value"Close #1以上代碼寫入的內(nèi)容如下:This is a testZone 1 Zone 2Hello World5 leading spaces HelloFalse is a Boolean value1969-2-12 is a dateNull is a null valueError 32767 is an error value13、Width # 語(yǔ)句語(yǔ)法:Width #filenumber, widthwidth 必要。范圍在 0255 之間的數(shù)值

56、表達(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 次。Print #1, Chr(48 + I); ' 每行輸出五個(gè)字符。Next IClose #1以上代碼寫入的內(nèi)容如下:0123456789(四)處理二進(jìn)制文件打開二進(jìn)制文

57、件可以使用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, text As Stringnum = 12345text = "a string"Open "f:data.bin" Fo

58、r 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 將 Get 讀出的數(shù)據(jù)寫入一個(gè)文件。示例:讀取以上代碼寫入的內(nèi)容Dim num As

59、 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è)讀寫操作將要發(fā)生的位置。 功能:在 Ope

60、n 語(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)前的讀/

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論