vba移动文件_Excel VBA之FSO-2.3文件夹的移动
Excel VBA之FSO-2.3文件夾的移動
前景提要
我們之前接觸了如何通過FSO來實(shí)現(xiàn)文件夾的復(fù)制操作,此操作需要注意的一點(diǎn)就是如果當(dāng)前文件夾中有歷史版本的同名文件夾的話,他會直接覆蓋原來的數(shù)據(jù),如果需要保存歷史數(shù)據(jù)的話,在使用之前最好先做好備份,今天我們繼續(xù)了解FSO和文件夾的操作,復(fù)制完成之后,我們可能還需要將原來的數(shù)據(jù)刪除,這樣才不會占用空間,我能不能直接移動文件夾,類似剪切這樣子呢,這樣我就不用再去刪除數(shù)據(jù),FSO可以做到這一點(diǎn)的。
思路
我們首先來確定下思路,移動文件夾和文件夾的復(fù)制的思路是差不多的,文件夾的兩個路徑肯定是必須的,這里我們可以嘗試結(jié)合之前學(xué)過的FolderExists等方法,判斷下文件夾是否存在,因?yàn)橐苿游募A的話,如果出現(xiàn)同名文件夾會報(bào)錯的,這里要記得判斷下。
上代碼
Sub test()Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$Set fs = CreateObject("Scripting.FileSystemObject") '創(chuàng)建FSOWith Application.FileDialog(msoFileDialogFolderPicker) '調(diào)用文件選擇框 .Title = "請選擇要復(fù)制的文件夾" '選擇框的名字,人性化 If .Show = -1 Then OldString = .SelectedItems(1) '文件夾的路徑 FileName = Split(OldString, "")(UBound(Split(OldString, ""))) '通過拆分和最大下標(biāo)的方式的活文件名 End IfEnd WithWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要粘貼的位置" If .Show = -1 Then s = .SelectedItems(1) '獲得要粘貼的文件夾路徑 NewString = s & "" & FileName '將上面的路徑和前面得到的文件名合并,構(gòu)造要粘貼的文件夾的完整路徑 End IfEnd WithIf fs.FolderExists(NewString) Then fs.DeleteFolder (NewString) fs.MoveFolder OldString, NewString MsgBox "復(fù)制成功!" Else fs.MoveFolder OldString, NewString MsgBox "復(fù)制成功!"End IfSet fs = Nothing '釋放FSOEnd Sub效果如圖:
執(zhí)行操作前:
原文件夾
目標(biāo)文件夾
這里沒有文件夾
執(zhí)行操作之后:
目標(biāo)文件夾內(nèi)
而原文件夾內(nèi)
很明顯,代碼達(dá)到了我們的要求。
代碼解析
前面一部分的代碼和昨天分享的內(nèi)容都是一樣的,基本上沒有變動,只是更改了部分路徑而已,如果有不太清楚的地方,大家可以看看昨天的文章回顧下
然后就是本次的新知識點(diǎn)了,前面做了那么多的準(zhǔn)備工作,都是為了這一步,FSO文件夾的移動
fs.MoveFolder OldString, NewString原來的路徑在前,新路徑再后。
這里說明一點(diǎn):移動文件夾的操作雖然等同于剪切文件夾這樣的操作,但是它有很大的局限性,就是他只能在同盤符之前進(jìn)行操作移動,不能跨盤符,就是說原始文件再D盤,我只能在D盤范圍內(nèi)執(zhí)行移動,不能移動到C盤,E盤等其他盤,這點(diǎn)在使用一定要注意,如果跨盤符移動的話,會提示你權(quán)限不夠等,當(dāng)初小編也是卡在這里,找了好多資料才看這樣的解釋的。大家要牢記,跨盤符的話,還是使用復(fù)制的操作吧。而且移動的操作,需要判斷同名文件夾是否存在,存在的話,還需要刪除才可以執(zhí)行移動的操作,相對與復(fù)制文件夾來說,有很大的局限性和弊端,不過根據(jù)使用場合和場景的不同,大家可以根據(jù)自己的需求靈活使用。
完整代碼加注釋
Sub test()Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$Set fs = CreateObject("Scripting.FileSystemObject") '創(chuàng)建FSOWith Application.FileDialog(msoFileDialogFolderPicker) '調(diào)用文件選擇框 .Title = "請選擇要復(fù)制的文件夾" '選擇框的名字,人性化 If .Show = -1 Then OldString = .SelectedItems(1) '文件夾的路徑 FileName = Split(OldString, "")(UBound(Split(OldString, ""))) '通過拆分和最大下標(biāo)的方式的活文件名 End IfEnd WithWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "請選擇要粘貼的位置" If .Show = -1 Then s = .SelectedItems(1) '獲得要粘貼的文件夾路徑 NewString = s & "" & FileName '將上面的路徑和前面得到的文件名合并,構(gòu)造要粘貼的文件夾的完整路徑 End IfEnd WithIf fs.FolderExists(NewString) Then '判斷同名文件夾是否存在 fs.DeleteFolder (NewString) '存在的話先刪除 fs.MoveFolder OldString, NewString '在執(zhí)行移動的操作 MsgBox "復(fù)制成功!" Else fs.MoveFolder OldString, NewString '不存在可以直接移動 MsgBox "復(fù)制成功!"End IfSet fs = Nothing '釋放FSOEnd Sub總結(jié)
==========================================================================
今天的知識點(diǎn)主要是通過FSO來移動文件夾的,不過相對于之前我們學(xué)習(xí)的復(fù)制文件夾的方法來說,此方法存在很多的弊端和局限性,對于小編這樣很強(qiáng)調(diào)代碼的通用性的人來說,移動文件夾是一個并不太實(shí)用的功能,大家在使用的時候,要牢記使用場景,同盤符,同盤符,同盤符,重要的事情說三遍?,F(xiàn)在的電腦配置都比較的好,應(yīng)該不存在內(nèi)存不足的情況,還是建議大家條件允許的情況下盡量使用復(fù)制的功能比較好
==========================================================================
本人已經(jīng)打算長期分享一些網(wǎng)絡(luò)搜集的各種VBA知識,如果大家有問題也可以提出來共同解決,一起進(jìn)步,畢竟VBA的世界還是很大的。
因?yàn)榛旧隙际亲詫W(xué)的,很多代碼和知識都是來源于網(wǎng)絡(luò)的,如果在分享的過程中,正好拿了某位大神的代碼,請告訴我,我將標(biāo)注代碼來源出處,也方便大家學(xué)習(xí)分享,謝謝!
如果你有什么想要分享的,或者有什么想要知道的,都可以留言等方式告訴我,大家一起努力進(jìn)步。
好了,明晚19:00,準(zhǔn)時再見。
=============================歷史相關(guān)文章==============================Excel VBA之FSO-2.1文件夾的創(chuàng)建,刪除
Excel VBA之FSO-2.2文件夾的復(fù)制
Excel VBA和文件夾-1.13總結(jié)篇
總結(jié)
以上是生活随笔為你收集整理的vba移动文件_Excel VBA之FSO-2.3文件夹的移动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存升级,从DDR3到DDR4,你的电脑
- 下一篇: 4GB内存条,看似小巧实则强大,让你的电