vba移动文件_Excel VBA之FSO-2.3文件夹的移动
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效果如圖:
執行操作前:
原文件夾
目標文件夾
這里沒有文件夾
執行操作之后:
目標文件夾內
而原文件夾內
很明顯,代碼達到了我們的要求。
代碼解析
前面一部分的代碼和昨天分享的內容都是一樣的,基本上沒有變動,只是更改了部分路徑而已,如果有不太清楚的地方,大家可以看看昨天的文章回顧下
然后就是本次的新知識點了,前面做了那么多的準備工作,都是為了這一步,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總結篇
總結
以上是生活随笔為你收集整理的vba移动文件_Excel VBA之FSO-2.3文件夹的移动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存升级,从DDR3到DDR4,你的电脑
- 下一篇: js计算器代码加减乘除_如何用jQuer