第一節(jié):VBA使用FileSystemObject將讀取或?qū)懭胛谋疚募?一)
第二節(jié):VBA使用FileSystemObject將讀取或?qū)懭胛谋疚募?二)
在上兩節(jié)中已經(jīng)詳細(xì)介紹了FileSystemObject對象的一些屬性及方法。那么在這一節(jié)里,我們將舉例說明如何使用VBA在Excel與文本文件中的導(dǎo)入導(dǎo)出。假設(shè)我們有如下數(shù)據(jù)表及文本文件:
現(xiàn)在要實(shí)現(xiàn)在這兩個文件中的數(shù)據(jù)按指定的格式進(jìn)行導(dǎo)入導(dǎo)出。下面我們就先進(jìn)行將EXCEL數(shù)據(jù)表中的內(nèi)容導(dǎo)出到testfile.txt中,并按圖中的格式顯示。
一、導(dǎo)出到文本文件的示例代碼:
Sub Export2TxtFile()Dim fso As Object, sFile As Object, blnExist As BooleanDim iRow As Integer, FileName As StringSet fso = CreateObject("Scripting.FileSystemObject") '創(chuàng)建FileSystemObject對象FileName = "C:\FSOTest\testfile.txt" '指定文本文件名Check_FileExist:blnExist = fso.FileExists(FileName) '判斷文件是否存在If blnExist ThenIf MsgBox("指定的數(shù)據(jù)文件已存在,是否覆蓋原文件?", _vbExclamation + vbYesNo, "提示信息") = vbNo Then'如果不覆蓋原文件,則要求指定文件名FileName = Application.InputBox("請輸入文件名:")If FileName = "False" Then FileName = Sheet1.Name & "!$A$1"FileName = "C:\FSOTest\" & FileName & ".txt"GoTo Check_FileExist '再次檢查文件是否存在Else '如果是,則先刪除原文件fso.DeleteFile (FileName)End IfEnd IfSet sFile = fso.CreateTextFile(FileName)sFile.WriteLine ("[" & Sheet1.Range("A1").Value & "]") '寫入第一行數(shù)據(jù)sFile.WriteBlankLines (1) '寫入一個空白行For iRow = 2 To Sheet1.Range("A65536").End(xlUp).Row'從單元格A2開始讀取數(shù)據(jù),到數(shù)據(jù)表結(jié)尾,寫入到文本文件中sFile.WriteLine (Sheet1.Cells(iRow, 1).Value _& "|" & Sheet1.Cells(iRow, 2).Value _& "|" & Sheet1.Cells(iRow, 3).Value _& "|" & Sheet1.Cells(iRow, 4).Value)Next iRowIf MsgBox("文件已導(dǎo)出。是否打開該文件?", vbYesNo + vbInformation) = vbYes ThenShell ("NotePad.exe " & FileName) '打開文本文件End IfEnd Sub
二、將文本文件導(dǎo)入到Excel數(shù)據(jù)表中:
Sub ImportFromTextFile()Dim fso As Object, sFile As Object, blnExist As BooleanDim FileName As String, LineText As Variant, i As Integer, iCol As IntegerConst ForReading = 1Set fso = CreateObject("Scripting.FileSystemObject") '創(chuàng)建FileSystemObject對象FileName = "C:\FSOTest\testfile.txt" '指定文本文件名blnExist = fso.FileExists(FileName) '判斷文件是否存在,如果不存在,則退出過程If Not blnExist Then MsgBox "文件不存在!": Exit SubSet sFile = fso.OpenTextFile(FileName, ForReading) '創(chuàng)建并打開名為sFile的TextStream對象'讀取第一行數(shù)據(jù)Sheet2.Range("A1").Value = Replace(Replace(sFile.ReadLine, "[", ""), "]", "")sFile.SkipLine '跳過第二行的空行i = 2 '設(shè)置輸入單元格的起始行號Do While Not sFile.AtEndOfStream '如果不是文本文件的尾端,則讀取數(shù)據(jù)LineText = Split(sFile.ReadLine, "|") '拆分讀取到的數(shù)據(jù)到數(shù)組中For iCol = LBound(LineText) To UBound(LineText) '從數(shù)組中讀取數(shù)據(jù)并寫入對應(yīng)的單元格Sheet2.Cells(i, iCol + 1).Value = LineText(iCol)Next iColi = i + 1 '滾動到下一個單元格行Loop'#這里可以加入設(shè)置單元格格式的代碼sFile.CloseSet fso = NothingSet sFile = NothingEnd Sub