午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Excel-VBA操作文件四大方法(一)

 xiangtui 2010-02-02

本文主要介紹四種常用的方法:
1、利用Excel對象來處理文件;
2、利用VBA文件處理語句來處理文件;
3、利用FileSystemObject對象來處理文件;
4、利用API函數(shù)來處理文件。

當(dāng)然對于數(shù)據(jù)庫文件,還可以利用ADO+SQL的方法操作,不過論壇已經(jīng)有前輩詳細(xì)介紹過此類方法,本文就不再重復(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, 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(FileName, 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代碼。具體方法就是選擇“文件——打開”,然后選擇打開文本文件,就會出現(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, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
End Sub

在實際編程中只要做相應(yīng)的修改就可以使用了。

3、打開其他文件

利用Excel對象還可以打開XML文件和一些數(shù)據(jù)庫(如Access)文件,對應(yīng)XML文件,需要Excel2003以上的版本。

OpenXML方法的語法如下:
Workbooks.OpenXML(Filename, Stylesheets, LoadOption)
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ù)窗格中顯示 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:=xlXmlLoadImportToList
End Sub

OpenDatabase 方法語法如下:
Workbooks.OpenDatabase(FileName, CommandText, CommandType, BackgroundQuery, ImportDataAs)

FileName      String 類型,必需。連接字符串。

CommandText      Variant 類型,可選。查詢的命令文本。

CommandType      Variant 類型,可選。查詢的命令類型。以下是可用的命令類型:Default、SQL 和 Table。

BackgroundQuery      Variant 類型,可選。查詢的背景。

ImportDataAs      Variant 類型,可選。確定查詢的格式。

示例
本示例中,Excel 打開了“northwind.mdb”文件。

Sub OpenDatabase()

Workbooks.OpenDatabase FileName:="C:\northwind.mdb"

End Sub

4、保存文件

文件的保存使用Workbook對象的Save或SaveAs方法。
Save方法使用簡單,語法為
expression_r.Save,expression_r是某個Workbook對象。
如:ActiveWorkbook.Save
即保存當(dāng)前活動工作簿。

如果是第一次保存工作簿或要另存為,請使用 SaveAs 方法為該文件指定文件名。
其語法為:
expression_r.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

具體參數(shù)含義可參看VBA幫助,使用都比較簡單。
示例
本示例新建一個工作簿,提示用戶輸入文件名,然后保存該工作簿。

Set NewBook = Workbooks.Add
Do
    fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName

Application.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_r.Close(SaveChanges, Filename, RouteWorkbook)

SaveChanges參數(shù)表示是否保存更改,對許多不需要更改的操作,可設(shè)置為False以免彈出保存更改提示的對話框。
FileName 可選。以此文件名保存所做的更改。
RouteWorkbook  可選。如果指定工作簿不需要傳送給下一個收件人(沒有傳送名單或已經(jīng)傳送),則忽略該參數(shù)。

示例
本示例關(guān)閉 Book1.xls,并放棄所有對此工作簿的更改。

Workbooks("BOOK1.XLS").Close SaveChanges:=False
 
本示例關(guān)閉所有打開的工作簿。如果某個打開的工作簿有改變,Microsoft Excel 將顯示詢問是否保存更改的對話框和相應(yīng)提示。

Workbooks.Close

6、綜合實例

假如F盤有一個Excel文件test.xls,現(xiàn)在有另一個Excel文件要訪問test.xls的數(shù)據(jù),我們來看用VBA代碼如何操作。代碼如下:
Public Sub test()
Application.ScreenUpdating = False
Workbooks.Open "f:\test.xls"
ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub
首先關(guān)閉屏幕刷新,是為了防止test.xls在打開時被看見(有時候還是看的見)。打開后,見test.xls的Sheet1的單元格A2中的值賦給當(dāng)前工作簿的Sheet1的單元格B2,然后關(guān)閉test.xls。
當(dāng)要打開的工作簿不確定的時候,可以通過調(diào)用打開對話框來讓用戶自己選擇。
可改為如下:
Public Sub test()
Application.ScreenUpdating = False
Dim Filename as String
Filename = Application.GetOpenFileName
Workbooks.Open Filename
ThisWorkbook.Sheets(1).Range("b1") = ActiveWorkbook.Sheets(1).Range("a2")
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

7、總結(jié)

利用Excel對象的方法進(jìn)行文件操作是最簡單,也是最方便的,適合初學(xué)者。對于Excel文件格式,如果我們僅僅是讀取其表格中的內(nèi)容,這種方法也是首選。對于文本文件的操作,使用第二種方法比較方便,若要將文本轉(zhuǎn)換成表格,那么使用此方法也是合適的。

 

二、利用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 "f:\TEST123.xls"  '重命名
Name "f:\TEST.xls" As "f:\dll\TEST.xls"  '移動文件
Name "f:\TEST.xls" As "d:\TEST123.xls"  '跨驅(qū)動器移動并重命名文件

注意:Name不能移動一個目錄或文件夾。

2、FileCopy 語句

語法:FileCopy source, destination

功能:復(fù)制一個文件。

說明:如果對一個已打開的文件使用 FileCopy 語句,則會產(chǎn)生錯誤。

示例:
FileCopy "f:\TEST.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)

功能:獲取一個文件、目錄、或文件夾的屬性。返回一個 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 運算符與逐位比較。如果所得的結(jié)果不為零,則表示設(shè)置了這個屬性值。

示例:
Debug.Print GetAttr("F:\test.txt") '若為存檔文件,在立即窗口可看到值為32
Debug.Print GetAttr("F:\test.txt") '將屬性—高級—可存檔文件的勾去掉后,值為0

為判斷一個文件是否只讀,可用下法:
Debug.Print GetAttr("F:\test.txt") And vbReadOnly
若值非零,說明時只讀的。

5、SetAttr 語句

語法:SetAttr pathname, attributes

功能:為一個文件設(shè)置屬性。

說明:如果想要給一個已打開的文件設(shè)置屬性,則會產(chǎn)生運行時錯誤。

示例:
SetAttr"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 FileDateTime("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 Settings\yc\My Documents”。
Debug.Print CurDir("C")     ' 返回“C:\Documents and Settings\yc\My 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 Settings\yc\My Documents”。
Debug.Print CurDir("D")     ' 返回“D:\temp”。
與上例比較,此時D盤的當(dāng)前目錄已經(jīng)變?yōu)?#8220;D:\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")     ' 返回“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,且不要使用參數(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")  ’返回按條件第一個找到的文件名。
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 <> ".." Then
        ' 使用位比較來確定 MyName 代表一目錄。
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName     ' 如果它是一個目錄,將其名稱顯示出來。
        End If
    End If
    MyName = dir    ' 查找下一個目錄。
Loop

End Sub

以下過程利用遞歸可以查找目錄和子目錄下的所有文件。

Public Sub FindFile(mPath As String, Optional sFile As String = "")
On Error Resume Next
Dim s As String, sDir() As String
Dim i As Long, d As Long

If Right(mPath, 1) <> "\" Then
    mPath = mPath & "\"
End If
'查找目錄下的文件
s = dir(mPath & sFile, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)
Do While s <> ""
   Debug.Print mPath & s
   s = dir
Loop
'查找目錄下的子目錄
s = dir(mPath, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)
Do While s <> ""
    If s <> "." And s <> ".." Then
        If (GetAttr(mPath & s) And vbDirectory) = vbDirectory Then
        d = d + 1
        ReDim Preserve sDir(d)
        sDir(d) = mPath & s
        End If
    End If
    s = dir
Loop

'開始遞歸      
For i = 1 To d
    FindFile sDir(d) & "\"
Next

End Sub


5、MkDir 語句

語法:MkDir path

功能:創(chuàng)建一個新的目錄或文件夾。

說明:path 可以包含驅(qū)動器。如果沒有指定驅(qū)動器,則 MkDir 會在當(dāng)前驅(qū)動器上創(chuàng)建新的目錄或文件夾。

示例:
MkDir "MYDIR"    '在當(dāng)前目錄建立新的目錄或文件夾。

6、RmDir 語句

語法:RmDir path

功能:刪除一個存在的目錄或文件夾。

說明:如果想要使用 RmDir 來刪除一個含有文件的目錄或文件夾,則會發(fā)生錯誤。在試圖刪除目錄或文件夾之前,先使用 Kill 語句來刪除所有文件。

示例:
RmDir "MYDIR"      ' 將 MYDIR 刪除。


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多