農林漁牧網

您現在的位置是:首頁 > 農業

使用FSO物件操作資料夾

2022-03-01由 VBA語言專家 發表于 農業

路徑覆蓋檔案是什麼

大家好,我們今日講解“VBA資訊獲取與處理”教程中第十八個專題“FSO物件對檔案及資料夾的處理”的第一節“使用FSO物件操作資料夾”,這個專題是非常實用的知識點,希望大家能掌握利用。教程會提供配套的程式檔案。

大家好,我們開始一個新專題的學習,這個專題中我們將講解利用FSO(FileSystemObject)物件來完成檔案及檔案的一些操作。FSO物件我們一般利用下面的語句進行引用並賦值給一個物件變數:

Set objFso = CreateObject(“Scripting。FileSystemObject”)

然後就可以利用objFso這個物件變數的屬性和方法來完成我們一系列的操作了。我們將一一展示給大家。

第一節 使用FSO物件操作資料夾

對於資料夾的操作,有建立、複製、移動、刪除等操作,我們這講就介紹給朋友們這些操作的具體程式碼及應用。

1 FSO物件操作資料夾的基本語句

1)CreateFolder方法,建立一個新的資料夾

語法:object。CreateFolder (foldername)

引數:

object 必需,是FileSystemObject物件的名稱。

Foldername必需,標識要建立的資料夾的字串表示式。

備註:如果指定資料夾已存在,則將出錯。

2)GetFolder方法,返回與指定路徑中的資料夾對應的folder物件。

語法:object。GetFolder (folderspec)

引數:

object必需,是FileSystemObject的名稱。

folderspec必需,folderspec是特定資料夾的路徑(絕對或相對)

備註:如果指定的資料夾不存在,將發生錯誤。

3)SubFolders屬性,返回由指定資料夾中包含的所有資料夾組成的folders集合, 包括具有隱藏和系統檔案屬性設定的資料夾。

語法:object。SubFolders

引數:

object始終是Folder物件。

4)AddFolders方法,向Folders集合中新增一個新資料夾。

語法:object。AddfolderName

引數:

object 必需,是 Folders 集合的名稱。

folderName必需,要新增的新 Folder 的名稱

備註:如果folderName已存在,則發生錯誤

5)CopyFolder方法,將資料夾從一個位置遞迴複製到另一個位置。

語法:object。CopyFolder source, destination, [ overwrite ]

引數:

object 必需,始終是FileSystemObject的名稱。

source 必需,要複製的一個或多個資料夾的字串資料夾規範(可包含萬用字元)。

Destination必需,要從其複製資料夾和子資料夾的 source 的字串目標。不允許使用萬用字元。

[ overwrite ]可選,指示是否覆蓋現有資料夾的 Boolean 值。如果為 True,則覆蓋檔案;如果為 False,則不覆蓋。預設為 True。

備註:萬用字元只能在 source 引數的最後路徑元件中使用。不能用於中間字元。

提示:如果source包含萬用字元, 或destination 以路徑分隔符(**)結尾, 則destination是要在其中複製匹配的資料夾和子資料夾的現有資料夾。假設 destination 為要建立資料夾的名稱。在這兩種情況下, 複製單個資料夾時可能會發生以下四種情況:

如果 destination 不存在,則複製 source 資料夾及其所有內容。這是通常情況。

如果 destination 是現有檔案,則發生錯誤。

如果destination是一個目錄, 則嘗試複製該資料夾及其所有內容。如果destination中已存在包含在 source中的檔案, 則如果overwrite為False, 則會發生錯誤。否則, 它將嘗試透過現有檔案複製檔案。

如果 destination 為只讀目錄並且 overwrite 為 False 時,則嘗試將現有隻讀檔案複製到該目錄將發生錯誤。

如果使用萬用字元的 source 不與任何資料夾匹配,也將發生錯誤。

CopyFolder方法在遇到第一個錯誤時即停止。不會嘗試回滾到錯誤發生前進行的更改。

6)MoveFolder方法,將一個或多個資料夾從一個位置移動到另一個位置

語法:object。MoveFolder (source, destination)

引數:

object 必需,是FileSystemObject的名稱。

source 必需,要移動的一個或多個資料夾的路徑。 source 引數字串只能在最後一個路徑部分中包含萬用字元。

destination必需,要將一個或多個資料夾移至的路徑。 destination 引數不能包含萬用字元。

備註:如果source包含萬用字元或destination以路徑分隔符 (**) 結束, 則假定destination指定要在其中移動匹配檔案的現有資料夾。否則,假定 destination 是要建立的目標資料夾的名稱。無論是哪種情況,移動單個資料夾時均會發生三件事情:

如果 destination 不存在,資料夾會被移動。這是通常情況。

如果 destination 是現有檔案,則會出現錯誤。

如果 destination 是一個目錄,則會出現錯誤。

如果在 source 中使用的萬用字元不與任何資料夾匹配,也會出現錯誤。

MoveFolder方法在遇到第一個錯誤時停止。不會嘗試回滾在錯誤發生前進行的任何更改。

注意:只有作業系統支援時,此方法才允許在卷之間移動資料夾。

7)DeleteFolder方法刪除指定資料夾及其內容。

語法:object。DeleteFolderfolderspec, [ force ]

引數:

object 必需。始終是FileSystemObject的名稱。

folderspec 必需。要刪除的資料夾的名稱。folderspec可以在最後的路徑部分中包含萬用字元。

force 可選。布林值,如果刪除具有隻讀屬性集的資料夾,則為True;否則為 False(預設值)。

備註:DeleteFolder方法不區分有無內容的資料夾。不管指定資料夾有無內容都會被刪除。如果未發現匹配資料夾,將發生錯誤。DeleteFolder方法在遇到的第一個錯誤處停止。在發生錯誤之前,不會嘗試回滾或撤消任何已進行的更改。

2 FSO物件操作資料夾的實際程式碼

為了很好地利用這種資料夾的操作語句我給出下面的實測程式碼:

Sub mynz() ‘使用FSO物件操作資料夾

Dim objFso As Object

Dim objFolder As Object

Dim strPath As String

strPath = ThisWorkbook。Path&Application。PathSeparator

Set objFso = CreateObject(“Scripting。FileSystemObject”)

’判斷資料夾是否存在

If objFso。FolderExists(strPath& “018Temp”) = True Then

‘CreateFolder方法建立一個新的資料夾“018測試”

objFso。CreateFolderstrPath& “018Temp\018測試”

’GetFolder方法返回與指定路徑中的資料夾對應的folder物件。

Set objFolder = objFso。GetFolder(strPath& “018Temp\018測試”)

‘SubFolders返回由指定資料夾中包含的所有資料夾組成的folders集合, 包括具有隱藏和系統檔案屬性設定的資料夾。

’ADD 新增新資料夾

objFolder。SubFolders。Add “018測試2”

‘CopyFolder方法將資料夾從一個位置遞迴複製到另一個位置

objFso。CopyFolderstrPath& “018Temp\018測試\018測試2”, strPath& “018TempA”

’MoveFolder方法將一個或多個資料夾從一個位置移動到另一個位置。

objFso。MoveFolderstrPath& “018Temp\018測試\018測試2”, strPath& “018TempB”

objFolder。Delete

‘DeleteFolder方法刪除指定資料夾及其內容。

objFso。DeleteFolderstrPath& “018*”

’再次建立018TEMP測試資料夾

objFso。CreateFolderstrPath& “018Temp”

End If

Set objFolder = Nothing

Set objFso = Nothing

End Sub

程式碼截圖:

使用FSO物件操作資料夾

程式碼的講解:(略,基本操作及註釋中已經有了)

3 FSO物件操作資料夾的程式碼執行效果

以上的程式碼在執行完成後,沒有任何的變化,我從中間做幾個截圖說明:

當資料夾018測試2移動前:

使用FSO物件操作資料夾

當移動發生後:

使用FSO物件操作資料夾

其中的道理大家可以認真領會。

本節知識點回向

本例中利用

FSO操作資料夾有哪些方法?

在刪除的語句中第一次刪除了什麼資料夾?

本講程式碼參考檔案

:01

8

工作表

.xlsm

使用FSO物件操作資料夾

積木程式設計的思路內涵:

在我的系列書籍中一直在強調“搭積木”的程式設計思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:

1

程式碼不要自己全部的錄入

。你要做的是把積木放在合適的位置然後去

修正程式碼

,一定要複製,從你的積木庫中去複製,然後修正程式碼,把時間利用到高效的思考上。

2

建立自己的“積木庫”

。平時在學習過程中,把自己認為有用的程式碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程式的思路就會越廣。

使用FSO物件操作資料夾

VBA的應用界定及學習教程:

VBA

是利用

Office

實現個人小型辦公自動化的有效手段(工具)。

這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在資料處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

我記得20年前自己初學VBA時,那時的資料甚少,只能看原始碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程,目前教程均透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第一套:

VBA

程式碼解決方案

是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程式檔案更是一座不可多得的程式碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第二套:

VBA

資料庫解決方案

資料庫是資料處理的專業利器,教程中詳細介紹了利用ADO連線ACCDB和EXCEL的方法和例項操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第三套:

VBA

陣列與字典解決方案

陣列和字典是VBA的精華,字典是VBA程式碼水平提高的有效手段,值得深入的學習,是初級及中級人員程式碼精進的手段。目前這套教程提供的版本是修訂第一版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第四套:

VBA

程式碼解決方案之影片

是專門面向初學者的影片講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的影片講解,聽母音更易接受。

這套教程

會額外提供透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試的程式檔案。

第五套:

VBA

中類的解讀和利用

是一部高階教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

第六套教程:《

VBA

資訊獲取與處理》

是一部高階教程,涉及範圍更廣,實用性更強,面向中高階人員。教程共二十個專題,包括:跨應用程式資訊獲得、隨機資訊的利用、電子郵件的傳送、VBA網際網路資料抓取、VBA延時操作,剪下板應用、Split函式擴充套件、工作表資訊與其他應用互動,FSO物件的利用、工作表及資料夾資訊的獲取、圖形資訊的獲取以及定製工作表資訊函式等等內容。

程式檔案透過

3

2

位和

6

4

位兩種

O

FFICE

系統測試。

上述教程的學習順序:

1

3

2

6

5

或者

4

3

2

6

5

。提供的程式檔案更是一座巨大的程式碼庫,供讀者使用,如需要可以WeChat: NZ9668

使用FSO物件操作資料夾

學習VBA是個過程,也需要經歷一種枯燥的感覺

“眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山”。學習的過程也是修心的過程,修一個平靜的心。在程式碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。

“水善利萬物而不爭”,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。“路漫漫其修遠兮,吾將上下而求索”

每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北斗,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少

VBA

人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。迴向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,

分享成果,隨喜正能量