Excel-VBA-操作文件方法_第1頁
Excel-VBA-操作文件方法_第2頁
Excel-VBA-操作文件方法_第3頁
Excel-VBA-操作文件方法_第4頁
Excel-VBA-操作文件方法_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Excel-VBA操作文件四大方法之一在我們?nèi)粘J褂肊xcel的時候,不僅會用到當(dāng)前Excel文件的數(shù)據(jù),還經(jīng)常需要訪問其他的數(shù)據(jù)文件。這些數(shù)據(jù)文件可能是Excel文件、文本文 件或數(shù)據(jù)庫文件等。經(jīng)常有朋友會問如何在vba代碼里操作這些數(shù)據(jù)文件?本文就系統(tǒng)地介紹一下在Excel中應(yīng)用VBA操作數(shù)據(jù)文件的方法。本文主要介紹四種常用的方法:1、利用Excel對象來處理文件;2、利用VBA文件處理語句來處理文件;3、利用FileSystemObject對象來處理文件;4、利用API函數(shù)來處理文件。當(dāng)然對于數(shù)據(jù)庫文件,還可以利用ADOSQL的方法操作,不過論壇已經(jīng)有前輩詳細(xì)介紹過此類方法,本文就不再重

2、復(fù)了。一、利用Excel對象來處理文件利用Excel對象自帶的方法來操作文件是最方便,也是最簡單的。我們主要利用Workbooks集合和Workbook對象的方法來操作文件。1、打開Excel文件我們可以用Workbooks.Open方法打開一個Excel工作簿。Workbooks.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru,

3、 Local, CorruptLoad)其中FileName是必選的參數(shù),表示要打開的工作簿名,如果沒有指定路徑,則代表當(dāng)前路徑。另外14個是可選參數(shù),除了密碼參數(shù),其他的一般很少用。具體的含義可以參看VBA的幫助。例:Workbooks.Open "F:test.xls"可以打開F盤的test.xls文件。2、打開文本文件使用Open方法也可以打開文本文件,但建議使用OpenText方法。此方法是載入一個文本文件,并將其作為包含單個工作表的工作簿進(jìn)行分列處理,然后在此工作表中放入經(jīng)過分列處理的文本文件數(shù)據(jù)。完整語法如下:Workbooks.OpenText(FileNam

4、e, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)關(guān)于以上參數(shù)的具體含義可以參看VBA的幫助,這里就不重復(fù)了。在實際的編程中,一般無需對這些復(fù)雜的參數(shù)進(jìn)行處理??梢酝ㄟ^錄制宏來得到打開一個 文本文件的VBA代碼。具體方法就是選擇

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

6、iveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _TrailingMinusNumbers:=TrueEnd Sub在實際編程中只要做相應(yīng)的修改就可以使用了。3、打開其他文件利用Excel對象還可以打開XML文件和一些數(shù)據(jù)庫(如Access)文件,對應(yīng)XML文件,需要Excel2003以上的版本。OpenXML方法的語法如下:Workbooks.OpenXML(Filename, Stylesheets, L

7、oadOption)FileName String 類型,必需。要打開的文件名。Stylesheets Variant 類型,可選。單個值或值的數(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ù)窗格中

8、顯示 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 方法語法如下:Workbooks.O

9、penDatabase(FileName, CommandText, CommandType, BackgroundQuery, ImportDataAs)FileName String 類型,必需。連接字符串。CommandText Variant 類型,可選。查詢的命令文本。CommandType Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。BackgroundQuery Variant 類型,可選。查詢的背景。ImportDataAs Variant 類型,可選。確定查詢的格式。示例本示例中,Excel 打開了“northwi

10、nd.mdb”文件。Sub OpenDatabase()Workbooks.OpenDatabase FileName:="C:northwind.mdb"End Sub4、保存文件文件的保存使用Workbook對象的Save或SaveAs方法。Save方法使用簡單,語法為expression.Save,expression是某個Workbook對象。如:ActiveWorkbook.Save即保存當(dāng)前活動工作簿。如果是第一次保存工作簿或要另存為,請使用 SaveAs 方法為該文件指定文件名。其語法為:expression.SaveAs(FileName, FileForm

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

12、ewBook.SaveAs Filename:=fNameApplication.GetSaveAsFilename為調(diào)出標(biāo)準(zhǔn)的“另存為”對話框,獲取用戶文件名,但并不真正保存任何文件,然后使用代碼保存文件。還有Application.GetOpenFileName可以調(diào)出標(biāo)準(zhǔn)的“打開”對話框。5、關(guān)閉文件關(guān)閉文件可以使用Workbooks集合或Workbook對象的 Close 方法。前者是關(guān)閉所有打開的工作簿,后者關(guān)閉特定的工作簿。Workbook對象的 Close 方法語法為:expression.Close(SaveChanges, Filename, RouteWorkbook)Sa

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

14、s.Close6、綜合實例假如F盤有一個Excel文件test.xls,現(xiàn)在有另一個Excel文件要訪問test.xls的數(shù)據(jù),我們來看用VBA代碼如何操作。代碼如下:Public Sub test()Application.ScreenUpdating = FalseWorkbooks.Open "f:test.xls"ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")ActiveWorkbook.CloseApplication.Scr

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

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

17、不讓以下的語句再去創(chuàng)建一個test.xls的實例(雖然它標(biāo)識為只讀),并給出文件已打開的提示.先做一個判斷!判斷該工作簿是否打開了? 例如: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"xlexcel.Visible

18、 = Trueend if Excel-VBA操作文件四大方法之二二、利用VBA文件處理語句來處理文件VBA包含了許多用于文件操作的語句和函數(shù),可以滿足絕大多數(shù)情況下的文件操作要求。下面我們按照操作目的進(jìn)行一一介紹。(一)文件處理1.Name 語句語法:Name oldpathname As newpathname功能:重命名一個文件、目錄、或文件夾,移動一個文件。說明:在一個已打開的文件上使用 Name,將會產(chǎn)生錯誤。進(jìn)行文件操作時,一定要注意錯誤處理。示例:On Error Resume Next '錯誤處理Name "f:TEST.xls" As "

19、f:TEST123.xls" '重命名Name "f:TEST.xls" As "f:dllTEST.xls" '移動文件Name "f:TEST.xls" As "d:TEST123.xls" '跨驅(qū)動器移動并重命名文件注意:Name不能移動一個目錄或文件夾。2、FileCopy 語句語法:FileCopy source, destination功能:復(fù)制一個文件。說明:如果對一個已打開的文件使用 FileCopy 語句,則會產(chǎn)生錯誤。示例:FileCopy "f:TE

20、ST.xls", "e:TEST.xls" '從F盤復(fù)制TEST.xls到E盤3、Kill 語句語法:Kill pathname功能:從磁盤中刪除文件。說明:Kill 支持多字符 (*) 和單字符 (?) 的統(tǒng)配符來指定多重文件。如果使用 Kill 來刪除一個已打開的文件,則會產(chǎn)生錯誤。示例:Kill "f:TEST.xls" 刪除F盤的TEST.xls文件Kill "f:*.xls" ' 刪除F盤所有xls文件4、GetAttr 函數(shù)語法:GetAttr(pathname)功能:獲取一個文件、目錄、或文件夾

21、的屬性。返回一個 Integer值。返回值由 GetAttr 返回的值,是下面這些屬性值的總和:常數(shù) 值 描述 vbNormal 0 常規(guī) vbReadOnly 1 只讀 vbHidden 2 隱藏 vbSystem 4 系統(tǒng)文件vbDirectory 16 目錄或文件夾 vbArchive 32 存檔文件 vbalias 64 指定的文件名是別名。只在Macintosh中可用。 說明:若要判斷是否設(shè)置了某個屬性,在 GetAttr 函數(shù)與想要得知的屬性值之間使用 And 運(yùn)算符與逐位比較。如果所得的結(jié)果不為零,則表示設(shè)置了這個屬性值。示例:Debug.Print GetAttr("

22、F:test.txt") '若為存檔文件,在立即窗口可看到值為32Debug.Print GetAttr("F:test.txt") '將屬性高級可存檔文件的勾去掉后,值為0為判斷一個文件是否只讀,可用下法:Debug.Print GetAttr("F:test.txt") And vbReadOnly若值非零,說明時只讀的。5、SetAttr 語句語法:SetAttr pathname, attributes功能:為一個文件設(shè)置屬性。說明:如果想要給一個已打開的文件設(shè)置屬性,則會產(chǎn)生運(yùn)行時錯誤。示例:SetAttr"

23、F:test.txt", vbHidden ' 設(shè)置隱藏屬性。SetAttr"F:test.txt", vbHidden + vbReadOnly ' 設(shè)置隱藏并只讀。6、FileLen 函數(shù)語法:FileLen(pathname)功能:獲取一個文件的長度,單位是字節(jié)。說明:當(dāng)調(diào)用 FileLen 函數(shù)時,不需要打開文件,如果所指定的文件已經(jīng)打開,則返回的值是這個文件在打開前的大小。7、FileDateTime 函數(shù)語法:FileDateTime(pathname)功能:獲取一個文件被創(chuàng)建或最后修改后的日期和時間。示例:Debug.Print Fi

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

25、quot;) ' 返回“C:Documents and SettingsycMy Documents”。Debug.Print CurDir("D") ' 返回“D:”。2、ChDir 語句語法:ChDir path功能:改變當(dāng)前的目錄或文件夾。說明:ChDir 語句改變?nèi)笔∧夸浳恢茫粫淖內(nèi)笔◎?qū)動器位置。缺省驅(qū)動器一般是C。示例:ChDir "D:temp"Debug.Print CurDir ' 返回“C:Documents and SettingsycMy Documents”。Debug.Print CurDir(&q

26、uot;D") ' 返回“D:temp”。與上例比較,此時D盤的當(dāng)前目錄已經(jīng)變?yōu)椤癉:temp”,但是缺省驅(qū)動器還是C。3、ChDrive 語句語法:ChDrive drive功能:改變當(dāng)前的驅(qū)動器。說明:如果使用零長度的字符串 (""),則當(dāng)前的驅(qū)動器將不會改變。如果 drive 參數(shù)中有多個字符,則 ChDrive 只會使用首字母。示例:ChDrive "D"ChDir "D:temp"Debug.Print CurDir ' 返回“D:temp”。Debug.Print CurDir("D&q

27、uot;) ' 返回“D:temp”。與上例比較,用CurDir返回的是“D:temp”,當(dāng)前驅(qū)動器已經(jīng)變?yōu)镈了。4、Dir 函數(shù)語法:Dir(pathname, attributes)兩個參數(shù)都是可選的,attributes表示文件屬性。功能:返回一個文件名、目錄名或文件夾名稱,它必須與指定的模式或文件屬性、或磁盤卷標(biāo)相匹配。說明:在第一次調(diào)用 Dir 函數(shù)時,必須指定 pathname,否則會產(chǎn)生錯誤。如果也指定了文件屬性,那么就必須包括 pathname。Dir 會返回匹配 pathname 的第一個文件名。若想得到其它匹配 pathname 的文件名,再一次調(diào)用 Dir,且不要

28、使用參數(shù)。如果已沒有合乎條件的文件,則 Dir 會返回一個零長度字符串 ("")。一旦返回值為零長度字符串,并要再次調(diào)用 Dir 時,就必須指定 pathname,否則會產(chǎn)生錯誤。不必訪問到所有匹配當(dāng)前 pathname 的文件名,就可以改變到一個新的 pathname 上。但是,不能以遞歸方式來調(diào)用 Dir 函數(shù)。以 vbDirectory 屬性來調(diào)用 Dir 不能連續(xù)地返回子目錄。示例:Debug.Print Dir("F:TEST.xls") 返回"TEST.xls"Debug.Print Dir("F:*.xls&q

29、uot;) 返回按條件第一個找到的文件名。Debug.Print Dir("F:*.txt",vbReadOnly) 返回第一個只讀的txt文件以下過程可顯示C盤根目錄下的所有目錄.Sub DirC()MyPath = "c:" MyName = dir(MyPath, vbDirectory) ' 找尋第一項。Do While MyName <> "" ' 開始循環(huán)。' 跳過當(dāng)前的目錄及上層目錄。If MyName <> "." And MyName <>

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

31、uot;")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 While s <>

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

33、hend = d + 1ReDim Preserve sDir(d)sDir(d) = mPath & sEnd IfEnd Ifs = dirLoop'開始遞歸 For i = 1 To dFindFile sDir(d) & ""NextEnd Sub5、MkDir 語句語法:MkDir path功能:創(chuàng)建一個新的目錄或文件夾。說明:path 可以包含驅(qū)動器。如果沒有指定驅(qū)動器,則 MkDir 會在當(dāng)前驅(qū)動器上創(chuàng)建新的目錄或文件夾。示例:MkDir "MYDIR" '在當(dāng)前目錄建立新的目錄或文件夾。6、RmDir 語句

34、語法:RmDir path功能:刪除一個存在的目錄或文件夾。說明:如果想要使用 RmDir 來刪除一個含有文件的目錄或文件夾,則會發(fā)生錯誤。在試圖刪除目錄或文件夾之前,先使用 Kill 語句來刪除所有文件。示例:RmDir "MYDIR" ' 將 MYDIR 刪除。(三)處理文本文件1、Open 語句語法:Open pathname For mode Access access lock As #filenumber Len=reclength其中access、lock、reclength為可選參數(shù),一般不用。mode 指定打開文件的方式。有5種:Input:以輸入

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

36、ut As #1 '以輸入方式打開Open "F:TEST.xls" For Binary As #1 '以二進(jìn)制方式打開2、Close 語句語法:Close filenumberlistfilenumberlist 參數(shù)為一個或多個文件號,若省略 filenumberlist,則將關(guān)閉 Open 語句打開的所有活動文件。說明:打開文件后,必須在使用完后關(guān)閉文件。示例:Dim I, FileNameFor I = 1 To 3 FileName = "TEST" & I ' 創(chuàng)建文件名。Open FileName For

37、Output As #I ' 打開文件。Print #I, "This is a test." ' 將字符串寫入文件。Next IClose ' 將三個已打開的文件全部關(guān)閉。3、Reset 語句語法:Reset功能:關(guān)閉所有用 Open 語句打開的磁盤文件。說明:Reset 語句關(guān)閉 Open 語句打開的所有活動文件,并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。示例:Dim FileNumberFor FileNumber = 1 To 5 Open "TEST" & FileNumber For Output As #FileNu

38、mberWrite #FileNumber, "Hello World" ' 將數(shù)據(jù)寫入文件。Next FileNumberReset ' 關(guān)閉文件并將緩沖區(qū)內(nèi)的數(shù)據(jù)寫到磁盤中。4、FreeFile 函數(shù)語法:FreeFile(rangenumber)參數(shù) rangenumber指定一個范圍,以便返回該范圍之內(nèi)的下一個可用文件號。指定 0(缺省值)則返回一個介于 1 255 之間的文件號。指定 1 則返回一個介于 256 511 之間的文件號。功能:提供一個尚未使用的文件號。示例:Dim fnum As Integerfnum = FreeFileOpen

39、"F:TEST.txt" For Input As #fnumClose #fnum5、EOF 函數(shù)語法:EOF(filenumber)功能:返回一個 Integer,它包含 Boolean 值 True,表明已經(jīng)到達(dá)為 Random 或順序 Input 打開的文件的結(jié)尾。6、LOF 函數(shù)語法:LOF(filenumber)功能:返回一個 Long,表示用 Open 語句打開的文件的大小,該大小以字節(jié)為單位。7、Loc 函數(shù)語法:LOc(filenumber)功能:返回一個 Long,在已打開的文件中指定當(dāng)前讀/寫位置。8、Input # 語句語法:Input #filen

40、umber, varlist功能:從已打開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)指定給變量。說明:通常用 Write # 將 Input # 語句讀出的數(shù)據(jù)寫入文件。為了能夠用 Input # 語句將文件的數(shù)據(jù)正確讀入到變量中,在將數(shù)據(jù)寫入文件時,要使用 Write # 語句而不使用 Print # 語句。使用 Write # 語句可以確保將各個單獨的數(shù)據(jù)域正確分隔開。示例:本示例使用 Input # 語句將文件內(nèi)的數(shù)據(jù)讀入兩個變量中。本示例假設(shè) TESTFILE文件內(nèi)含數(shù)行以 Write # 語句寫入的數(shù)據(jù);也就是說,每一行數(shù)據(jù)中的字符串部分都是用雙引號括起來,而與數(shù)字用逗號隔開,例如,("

41、Hello", 234)。Dim MyString, MyNumberOpen "TESTFILE" For Input As #1 ' 打開輸入文件。Do While Not EOF(1) ' 循環(huán)至文件尾。Input #1, MyString, MyNumber ' 將數(shù)據(jù)讀入兩個變量。Debug.Print MyString, MyNumber ' 在立即窗口中顯示數(shù)據(jù)。LoopClose #1 ' 關(guān)閉文件。9、Write # 語句語法:Write #filenumber, outputlist功能:將數(shù)據(jù)寫入順序文

42、件。說明:通常用 Input # 從文件讀出 Write # 寫入的數(shù)據(jù)。如果省略 outputlist,并在 filenumber 之后加上一個逗號,則會將一個空白行打印到文件中。多個表達(dá)式之間可用空白、分號或逗號隔開。空白和分號等效。用 Write # 將數(shù)據(jù)寫入文件時將遵循幾個通用的約定,使得無論什么區(qū)域都可用 Input # 讀出并正確解釋數(shù)據(jù): ·在寫入數(shù)值數(shù)據(jù)時總使用句號作為十進(jìn)制分隔符。·對于 Boolean 類型的數(shù)據(jù),或者打印 #TRUE# 或者打印 #FALSE#。無論在什么地區(qū),都不將 True 和 False 這兩個關(guān)鍵字翻譯出來。·使用通

43、用的日期格式將 Date 類型的數(shù)據(jù)寫入文件中。當(dāng)日期或時間的部件丟失或為零時,只將現(xiàn)有部分寫入文件中。·如果 outputlist 的數(shù)據(jù)為 Empty,則不將任何數(shù)據(jù)寫入文件。但對 Null 數(shù)據(jù),則要寫入 #NULL#。·如果 outputlist 數(shù)據(jù)為 Null 數(shù)據(jù),則將 #NULL# 寫入文件中。·對于 Error 類型的數(shù)據(jù),輸出看起來與 #ERROR errorcode# 一樣。無論在什么地區(qū),都不將關(guān)鍵字 Error 翻譯出來。 與 Print # 語句不同,當(dāng)要將數(shù)據(jù)寫入文件時,Write # 語句會在項目和用來標(biāo)記字符串的引號之間插入逗號。

44、沒有必要在列表中鍵入明確的分界符。Write # 語句在將 outputlist 中的最后一個字符寫入文件后會插入一個新行字符,即回車換行符,(Chr(13) + Chr(10)。 示例:Open "F:test.txt" For Output As #1 ' 打開輸出文件。Write #1, "Hello World", 1234 ' 寫入以逗號隔開的數(shù)據(jù)。Write #1, ' 寫入空白行。Dim MyBool, MyDate, MyNull, MyError' 賦值 Boolean、Date、Null 及 Error

45、 等。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 錯誤代號# 的格式寫入。Write #1, MyBool; " is a Boolean value"Write #1,

46、 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 null value"#ERR

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

48、 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ù)語法:Input(number, #filenumber)其中number 指定要返回的字符個數(shù)。 功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。說明:通常用 Print # 或 Put 將 Inp

49、ut 函數(shù)讀出的數(shù)據(jù)寫入文件。Input 函數(shù)只用于以 Input 或 Binary 方式打開的文件。與 Input # 語句不同,Input 函數(shù)返回它所讀出的所有字符,包括逗號、回車符、空白列、換行符、引號和前導(dǎo)空格等。示例:Dim MyCharOpen "f:test.txt" For Input As #1Do While Not EOF(1) ' 循環(huán)至文件尾。MyChar = Input(1, #1) ' 讀入一個字符。Debug.Print MyChar ' 顯示到立即窗口。LoopClose #1下面這個函數(shù)可以將文本文件的數(shù)據(jù)一次讀

50、入到一個字符串(但是若包含中文時會出錯,因為一個中文字占2個字節(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.Number, err.Descriptio

51、nEnd Function12、Print # 語句語法:Print #filenumber, outputlistoutputlist 參數(shù)的設(shè)置如下:Spc(n) | Tab(n) expression charposSpc(n) 用來在輸出數(shù)據(jù)中插入空白字符,而 n 指的是要插入的空白字符數(shù)。 Tab(n) 用來將插入點定位在某一絕對列號上,這里,n 是列號。使用無參數(shù)的 Tab 將插入點定位在下一個打印區(qū)的起始位置。 expression 要打印的數(shù)值表達(dá)式或字符串表達(dá)式。 charpos 指定下一個字符的插入點。使用分號將插入點定位在上一個顯示字符之后。用 Tab(n) 將插入點定位

52、在某一絕對的列號上,用無參數(shù)的 Tab 將插入點定位在下一個打印區(qū)的起始處。如果省略 charpos,則在下一行打印下一個字符。 功能:將格式化顯示的數(shù)據(jù)寫入順序文件中。說明:通常用 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"

53、; Tab; "Zone 2" ' 數(shù)據(jù)寫入兩個區(qū)(print zones)。Print #1, "Hello" " " "World" ' 以空格隔開兩個字符串。Print #1, Spc(5); "5 leading spaces " ' 在字符串之前寫入五個空格。Print #1, Tab(10); "Hello" ' 將數(shù)據(jù)寫在第十列。' 賦值 Boolean、Date、Null 及 Error 等。Dim MyBool, My

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

55、rint #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 # 語句語法:Width #filenumber, widthwidth 必要。范圍在 0255 之間的數(shù)值表達(dá)式,在新的一行開始之前,指出在

56、該行上可出現(xiàn)多少字符。如果 width 等于 0,則行的長度不受限制。width 的缺省值為 0。 功能:將一個輸出行的寬度指定給用 Open 語句打開的文件。示例: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); ' 每行輸出五個字符。Next IClose #1以上代碼寫入的內(nèi)容如下:0123456789(四)處理二進(jìn)制文件打開二進(jìn)制文件可以使用Open語句的Rando

57、m和Binary方式打開。二進(jìn)制文件讀寫使用Get和Put語句。1、Put 語句語法:Put #filenumber, recnumber, varnamerecnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),指明在此處開始寫入。 說明:通常用 Get 將 Put 寫入的文件數(shù)據(jù)讀出來。示例:Dim num As Long, text As Stringnum = 12345text = "a string"Open "f:data.bin" For Binary As #1 &#

58、39;打開或創(chuàng)建一個二進(jìn)制文件Put #1, , num '寫入4個字節(jié)Put #1, , text '寫入8個字節(jié)(字符串長為8)Close #12、Get 語句語法:Get #filenumber, recnumber, varname recnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),以表示在此處開始讀出數(shù)據(jù)。 功能:將一個已打開的磁盤文件讀入一個變量之中。說明:通常用 Put 將 Get 讀出的數(shù)據(jù)寫入一個文件。示例:讀取以上代碼寫入的內(nèi)容Dim num As Long, text As St

59、ringOpen "f:data.bin" For Binary As #1Get #1, , numtext = Space$(8) '準(zhǔn)備8個字節(jié)的字符串Get #1, , text '讀入Debug.Print num, textClose #1在立即窗口可以看到如下內(nèi)容:12345 a string3、Seek 語句語法:Seek #filenumber, position其中position 為介于 1 2,147,483,647(相當(dāng)于 231 1)之間的數(shù)字,指出下一個讀寫操作將要發(fā)生的位置。 功能:在 Open 語句打開的文件中,設(shè)置下一個讀

60、/寫操作的位置。說明:可以用Seek語句指定Get語句的讀取位置,但在 Get 及 Put 語句中指定的記錄號將覆蓋由 Seek 語句指定的文件位置。示例: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ù)語法:Seek(filenumber)功能:返回一個 Long,在 Open 語句打開的文件中指定當(dāng)前的讀/寫位置。說明:在使用Get語句讀取文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論