獲取當(dāng)前文件夾的名稱(chēng)(CurDir 函數(shù))
當(dāng)你使用文件時(shí),經(jīng)常會(huì)需要知道當(dāng)前文件夾的名稱(chēng),你使用CurDir函數(shù)輕易地獲取該信息:
CurDir([drive])
Drive是一可選參數(shù),如果你忽略它,VBA將使用當(dāng)前驅(qū)動(dòng)(drive)。
CurDir函數(shù)返回一個(gè)文件路徑作為Variant(變量)。如果要返回作為字符串(String)的路徑的話,就得使用CurDir$(這里的$是字符串的類(lèi)型聲明字符)。讓我們?cè)诹⒓创翱诶镒鲂┚毩?xí),練習(xí)使用這些函數(shù)吧:
1. 打開(kāi)一個(gè)新工作簿,并且切換到VB編輯器窗口
2. 激活立即窗口并敲入下述代碼:
?CurDir
當(dāng)你按下回車(chē),VB就顯示當(dāng)前文件夾名稱(chēng),例如:
C:\
如果你有第二個(gè)硬盤(pán)(或者光驅(qū))的話,你可以獲取D盤(pán)上的當(dāng)前文件夾,例如:
?CurDir(“D:\”)
如果你提供了一個(gè)并不存在的驅(qū)動(dòng)字母的話,VB就將顯示下述錯(cuò)誤信息:“設(shè)備不可用”
3. 要儲(chǔ)存當(dāng)前驅(qū)動(dòng)名稱(chēng)到變量myDrive,可以輸入下述指令:
myDrive = Left(CurDir$,1)
當(dāng)你按下回車(chē)鍵時(shí),VB將當(dāng)前驅(qū)動(dòng)器的字母儲(chǔ)存到變量myDrive
敲入下述指令并回車(chē),可以檢查變量myDrive的內(nèi)容:
?myDrive
你還可以將上面的指令改為如下:
myDrive = left(CurDir$,1) & ":"
VB將返回驅(qū)動(dòng)器字母,后面帶有一個(gè)冒號(hào)。
更改文件或文件夾名稱(chēng)(Name 函數(shù))
使用函數(shù)Name可以重命名文件或者文件夾,例如:
Name old_pathname As new_pathname
Old_pathname是你想用重命名的文件或文件夾的名稱(chēng)和路徑,New_pathname則明確文件或文件夾的新名稱(chēng)和位置。使用函數(shù)Name,你可以將一個(gè)文件從一個(gè)文件夾移動(dòng)到另外一個(gè)文件夾,但是,你不可以移動(dòng)文件夾。
請(qǐng)?jiān)诹⒓创翱诶镌囇菰摵瘮?shù)(用你文件的實(shí)際名稱(chēng)替換示例名稱(chēng))。這里有些需要考慮的注意事項(xiàng):
①在New_pathname里的文件名稱(chēng)不要指向已經(jīng)存在的文件
Name "C:\System.1st " As "C:\test.txt"
因?yàn)槲募﨏:\test.txt已經(jīng)存在于C盤(pán),VB將顯示錯(cuò)誤信息:“文件已存在”,同樣,如果你要重命名的文件不存在的話,就會(huì)出現(xiàn)“文件未找到”的錯(cuò)誤信息。
②如果New_pathname已經(jīng)存在,并且和Old_pathname不同,函數(shù)Name必要時(shí)將文件移動(dòng)到新文件夾并且更改它的名稱(chēng)。
Name "C:\System.1st " As "D:\test.txt"
因?yàn)槲募est.txt在D盤(pán)的根目錄下并不存在,VB將C:\System.1st
移動(dòng)到指定的驅(qū)動(dòng)盤(pán),然而,并不重命名該文件。(本段與上面的內(nèi)容似乎矛盾,而且未能試驗(yàn)成功,未知是原書(shū)失誤與否。讀者應(yīng)仔細(xì)驗(yàn)證)
③如果New_pathname和Old_pathname指向不同的目錄,以及提供的文件名稱(chēng)相同,那么Name函數(shù)將指定的文件移到新地址,不用更改文件名。
Name "D:\test.txt " As "C:\DOS\test.txt"
上面的指令將test.txt移動(dòng)到C盤(pán)下的DOS文件夾里。
技巧:你不能重命名開(kāi)啟的文件
在重命名文件之前,你必須關(guān)閉該文件。文件名稱(chēng)里不能包含通配符“*”或者“?”。
檢查文件或文件夾是否存在(Dir 函數(shù))
Dir函數(shù),返回文件或者文件夾名稱(chēng),語(yǔ)法如下:
Dir[(pathname[, attributes])]
Dir函數(shù)的兩個(gè)參數(shù)都是可選的,pathname是文件或文件夾名稱(chēng),對(duì)于參數(shù)attributes,你可以下列常量或者數(shù)值之一:
Dir函數(shù)常用來(lái)檢查某個(gè)文件或文件夾是否存在,如果不存在,那么就返回空字符串(””)。我們到立即窗口里試驗(yàn)幾個(gè)Dir函數(shù)的練習(xí):
1. 在立即窗口,輸入下述指令:
?Dir("C:\", vbNormal)
你一旦按下回車(chē)鍵,VB就會(huì)返回該文件夾下的第一個(gè)文件名。普通文件(vbNormal)就是除隱藏,卷標(biāo),目錄,文件夾或系統(tǒng)文件之外的任何文件。
要返回當(dāng)前目錄下的其它文件名稱(chēng)的話,就使用不帶參數(shù)的Dir函數(shù):
?Dir (并且回車(chē))
2. 在立即窗口里輸入下列指令,并且在你回車(chē)時(shí)檢查其結(jié)果:
mfile = Dir("C:\", vbHidden)
?mfile
mfile = Dir
?mfile
mfile = Dir
?mfile
3. 在立即窗口輸入下述指令:
If Dir("C:\stamp.bat") = "" Then Debug.Print "文件未找到。"
因?yàn)閟tamp.bat文件不在C盤(pán)上,所以VB就在立即窗口里寫(xiě)下文本信息“文件未找到?!?br>
4. 在立即窗口輸入下述語(yǔ)句,可以檢查某文件是否存在于某驅(qū)動(dòng)盤(pán)上:
If Dir ("C:\Autoexec.bat") <>"" Then Debug.Print "該文件不在C盤(pán)上。"
函數(shù)Dir允許你在文件路徑名中使用通配符——星號(hào)(*)代表多個(gè)字符,問(wèn)號(hào)(?)代表單個(gè)字符:
例如,要在WINDOWS文件夾中查找所有配置設(shè)置的文件,你可以查找所有的INI文件,如下:
?Dir("C:\WINNT\*.ini", vbNormal)
system.ini
?dir WIN.INI
?dir
WINFILE.INI
?dir control.ini
?dir EQUIP32.INI
?dir
sxpwin32.ini
下面顯示的過(guò)程在立即窗口里寫(xiě)上了確定目錄下的文件名稱(chēng)。函數(shù)LCase$讓文件名稱(chēng)顯示為小寫(xiě)字母。
1. 打開(kāi)一新工作簿,并保存為Chap08.xls
2. 切換到VB編輯器窗口并重命名VBA工程為FileMan
3. 插入新模塊,重命名為DirFunction
4. 輸入下述VBA過(guò)程:
Sub MyFiles()
Dim mfile As String
Dim mpath As String
mpath = InputBox("Enter pathname,e.g., C:\Excel")
If Right(mpath, 1) <> "\" Then mpath = mpath & "\"
mfile = Dir(mpath & "*.*")
If mfile <> "" Then Debug.Print "Files in the " & mpath _
& "folder"
Debug.Print LCase$(mfile)
If mfile = "" Then
MsgBox "No files found."
Exit Sub
End If
Do While mfile <> ""
mfile = Dir
Debug.Print LCase$(mfile)
Loop
End Sub
上面的過(guò)程myFiles向用戶詢(xún)問(wèn)文件路徑名。如果該路徑結(jié)尾沒(méi)有反斜杠,函數(shù)Right就會(huì)將反斜杠附加在路徑名字符串上。接下來(lái),VB在該確定的文件夾里搜索所有文件(*)。如果沒(méi)有文件的話,就會(huì)有信息顯示,如果文件存在,那么文件名就會(huì)被寫(xiě)入立即窗口。
5. 在同一個(gè)模塊里輸入另外一個(gè)過(guò)程:
Sub GetFiles()
Dim nfile As String
Dim nextRow As Integer
nextRow = 1
'next row index
With Worksheets("Sheet1").Range("A1")
nfile = Dir("C:\", vbNormal)
.Value = nfile
Do While nfile <> ""
nfile = Dir
.Offset(nextRow, 0).Value = nfile
nextRow = nextRow + 1
Loop
End With
End Sub
過(guò)程GetFiles獲取C盤(pán)根目錄下的所有文件名并且將每個(gè)文件名寫(xiě)入工作表。
4.獲得文件修改的日期和時(shí)間(FileDateTime 函數(shù))
如果你的過(guò)程需要知道某文件的最后修改的時(shí)間的話,可以使用函數(shù)FileDateTime:
FileDateTime(文件路徑名)
文件路徑名是個(gè)字符串,明確你要用的文件,并且需要包括驅(qū)動(dòng)和文件夾的名稱(chēng)。該函數(shù)返回某文件的日期和時(shí)間印記。日期和時(shí)間的格式取決于視窗控制面板的原始設(shè)置。
我們?cè)诹⒓创翱诶飦?lái)練習(xí)使用該函數(shù):
1. 在立即窗口里輸入:
?FileDateTime("C:\config.sys")
回車(chē)后,VB返回下述格式的日期和時(shí)間
5/4/2001 10:52:00 AM
要分開(kāi)獲取日期和時(shí)間時(shí),可以將函數(shù)FileDateTime作為函數(shù)DateValue或TimeValue的參數(shù)來(lái)使用。例如:
?DateValue(FileDateTime("C:\config.sys"))
?TimeValue(FileDateTime("C:\config.sys"))
2. 在立即窗口里將下述語(yǔ)句在一行輸入:
If DateValue(FileDateTime("C:\config.sys"))< Date then Debug.Print "This file was not
modified today.”
Date函數(shù)返回當(dāng)前系統(tǒng)日期,也是視窗控制面板的日期
J]VVKD.gif)
對(duì)話框里設(shè)定的。
獲得文件大?。‵ileLen 函數(shù))
如果你需要檢查某文件是否能夠存在某磁盤(pán)上,那么你應(yīng)該按照下述方式使用FileLen函數(shù):
FileLen(文件路徑名)
FileLen函數(shù)一字節(jié)方式返回文件的大小。如果該文件已打開(kāi),那么VB將返回該文件最后一個(gè)保存時(shí)的大小。
假設(shè)你想要獲取Windows目錄下進(jìn)行配置設(shè)置的所有文件的總大小:
1. 在當(dāng)前工程里插入新模塊,并重命名為FileLenFunction
2. 在代碼窗口了輸入過(guò)程TotalBytesIni:
Sub TotalBytesIni()
Dim iniFile As String
Dim allBytes As Long
iniFile = Dir("C:\WINDOWS\*.ini")
allBytes = 0
Do While iniFile <> ""
allBytes = allBytes + FileLen("C:\WINDOWS\" & iniFile)
iniFile = Dir
Loop
Debug.Print "Total bytes: " & allBytes
End Sub
更多建議: