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