Excel VBA之FSO-2.3檔案夾的移動
前景提要
我們之前接觸了如何通過FSO來實作檔案夾的複制操作,此操作需要注意的一點就是如果目前檔案夾中有曆史版本的同名檔案夾的話,他會直接覆寫原來的資料,如果需要儲存曆史資料的話,在使用之前最好先做好備份,今天我們繼續了解FSO和檔案夾的操作,複制完成之後,我們可能還需要将原來的資料删除,這樣才不會占用空間,我能不能直接移動檔案夾,類似剪切這樣子呢,這樣我就不用再去删除資料,FSO可以做到這一點的。
思路
我們首先來确定下思路,移動檔案夾和檔案夾的複制的思路是差不多的,檔案夾的兩個路徑肯定是必須的,這裡我們可以嘗試結合之前學過的FolderExists等方法,判斷下檔案夾是否存在,因為移動檔案夾的話,如果出現同名檔案夾會報錯的,這裡要記得判斷下。
上代碼
Sub test()Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$Set fs = CreateObject("Scripting.FileSystemObject") '建立FSOWith Application.FileDialog(msoFileDialogFolderPicker) '調用檔案選擇框 .Title = "請選擇要複制的檔案夾" '選擇框的名字,人性化 If .Show = -1 Then OldString = .SelectedItems(1) '檔案夾的路徑 FileName = Split(OldString, "")(UBound(Split(OldString, ""))) '通過拆分和最大下标的方式的活檔案名 End IfEnd WithWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要粘貼的位置" If .Show = -1 Then s = .SelectedItems(1) '獲得要粘貼的檔案夾路徑 NewString = s & "" & FileName '将上面的路徑和前面得到的檔案名合并,構造要粘貼的檔案夾的完整路徑 End IfEnd WithIf fs.FolderExists(NewString) Then fs.DeleteFolder (NewString) fs.MoveFolder OldString, NewString MsgBox "複制成功!" Else fs.MoveFolder OldString, NewString MsgBox "複制成功!"End IfSet fs = Nothing '釋放FSOEnd Sub
效果如圖:
執行操作前:
原檔案夾
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CN4QmYlNTOxYTY3YzMldDN1IjZzQzYmNTOzY2YyYTY48CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
目标檔案夾
這裡沒有檔案夾
執行操作之後:
目标檔案夾内
而原檔案夾内
很明顯,代碼達到了我們的要求。
代碼解析
前面一部分的代碼和昨天分享的内容都是一樣的,基本上沒有變動,隻是更改了部分路徑而已,如果有不太清楚的地方,大家可以看看昨天的文章回顧下
然後就是本次的新知識點了,前面做了那麼多的準備工作,都是為了這一步,FSO檔案夾的移動
fs.MoveFolder OldString, NewString
原來的路徑在前,新路徑再後。
這裡說明一點:移動檔案夾的操作雖然等同于剪切檔案夾這樣的操作,但是它有很大的局限性,就是他隻能在同盤符之前進行操作移動,不能跨盤符,就是說原始檔案再D盤,我隻能在D盤範圍内執行移動,不能移動到C槽,E盤等其他盤,這點在使用一定要注意,如果跨盤符移動的話,會提示你權限不夠等,當初小編也是卡在這裡,找了好多資料才看這樣的解釋的。大家要牢記,跨盤符的話,還是使用複制的操作吧。而且移動的操作,需要判斷同名檔案夾是否存在,存在的話,還需要删除才可以執行移動的操作,相對與複制檔案夾來說,有很大的局限性和弊端,不過根據使用場合和場景的不同,大家可以根據自己的需求靈活使用。
完整代碼加注釋
Sub test()Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$Set fs = CreateObject("Scripting.FileSystemObject") '建立FSOWith Application.FileDialog(msoFileDialogFolderPicker) '調用檔案選擇框 .Title = "請選擇要複制的檔案夾" '選擇框的名字,人性化 If .Show = -1 Then OldString = .SelectedItems(1) '檔案夾的路徑 FileName = Split(OldString, "")(UBound(Split(OldString, ""))) '通過拆分和最大下标的方式的活檔案名 End IfEnd WithWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要粘貼的位置" If .Show = -1 Then s = .SelectedItems(1) '獲得要粘貼的檔案夾路徑 NewString = s & "" & FileName '将上面的路徑和前面得到的檔案名合并,構造要粘貼的檔案夾的完整路徑 End IfEnd WithIf fs.FolderExists(NewString) Then '判斷同名檔案夾是否存在 fs.DeleteFolder (NewString) '存在的話先删除 fs.MoveFolder OldString, NewString '在執行移動的操作 MsgBox "複制成功!" Else fs.MoveFolder OldString, NewString '不存在可以直接移動 MsgBox "複制成功!"End IfSet fs = Nothing '釋放FSOEnd Sub
總結
==========================================================================
今天的知識點主要是通過FSO來移動檔案夾的,不過相對于之前我們學習的複制檔案夾的方法來說,此方法存在很多的弊端和局限性,對于小編這樣很強調代碼的通用性的人來說,移動檔案夾是一個并不太實用的功能,大家在使用的時候,要牢記使用場景,同盤符,同盤符,同盤符,重要的事情說三遍。現在的電腦組態都比較的好,應該不存在記憶體不足的情況,還是建議大家條件允許的情況下盡量使用複制的功能比較好
==========================================================================
本人已經打算長期分享一些網絡搜集的各種VBA知識,如果大家有問題也可以提出來共同解決,一起進步,畢竟VBA的世界還是很大的。
因為基本上都是自學的,很多代碼和知識都是來源于網絡的,如果在分享的過程中,正好拿了某位大神的代碼,請告訴我,我将标注代碼來源出處,也友善大家學習分享,謝謝!
如果你有什麼想要分享的,或者有什麼想要知道的,都可以留言等方式告訴我,大家一起努力進步。
好了,明晚19:00,準時再見。
=============================曆史相關文章==============================Excel VBA之FSO-2.1檔案夾的建立,删除
Excel VBA之FSO-2.2檔案夾的複制
Excel VBA和檔案夾-1.13總結篇