標題:
[發問]
刪除指定資料夾中所有巨集
[打印本頁]
作者:
PJChen
時間:
2012-6-8 16:38
標題:
刪除指定資料夾中所有巨集
請教高手:
[attach]11322[/attach]
我要在Cancel VBA.xlsm的E6儲存格中指定一個
資料夾名稱
為"刪除所有巨集",
1) 只要是放在這個資料夾中的所有檔案,一律刪除所有巨集(不論EXCEL檔案中有多少巨集)
2) 資料夾中的EXCEL檔案類型有.xls/.xlsm
這樣的要求是否可寫成一個巨集?
作者:
Hsieh
時間:
2012-6-8 23:14
回復
1#
PJChen
參考
用程式寫程式 (VBProject / VBComponents)
Sub Try()
fd = ThisWorkbook.Path & "\" & Sheets(1).[E6] & "\"
fs = Dir(fd & "*.xlsm")
Do Until fs = ""
With Workbooks.Open(fd & fs)
For Each vbc In .VBProject.VBComponents
Select Case vbc.Type
Case vbext_rk_Project, vbext_wt_Browser, vbext_ct_MSForm '註
.VBProject.VBComponents.Remove .Item(vbc.Name)
Case Else
.VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
.VBProject.VBComponents(vbc.Name).CodeModule.CountOfLines
End Select
Next
.Close 1
End With
fs = Dir
Loop
End Sub
複製代碼
作者:
GBKEE
時間:
2012-6-9 12:08
本帖最後由 GBKEE 於 2012-6-9 12:11 編輯
回復
1#
PJChen
另存為 2007無巨集格式的活頁簿 "xlsx"
Sub Ex()
Dim xlPath As String, xlFile As String 'String: 資料型態
Application.DisplayAlerts = False '停止系統的提示
xlPath = ThisWorkbook.Path & "\" 'ThisWorkbook.Path: 程式碼活頁簿所存檔的路徑; 你可修改為指定的路徑
xlFile = Dir(xlPath & "*.xlsm") '指定的路徑中 尋找副檔名"xlsm"的檔案
Do While xlFile <> "" '處裡 找到"xlsm"的檔案
With Workbooks.Open(xlPath & xlFile) '開啟這檔案
.SaveAs Filename:=Mid(xlPath & xlFile, 1, Len(xlPath & xlFile) - 1) & "x", FileFormat:=51
'這檔案另存為 2007無巨集格式的活頁簿 "xlsx"
.Close '關閉檔案
End With
xlFile = Dir '指定的路徑中繼續尋找副檔名"xlsm"的檔案
Loop
If Dir(xlPath & "*.xlsm") <> "" Then Kill xlPath & "*.xlsm"
'刪除指定的路徑中所有副檔名"xlsm"的檔案
Application.DisplayAlerts = True '恢復系統的提示
End Sub
複製代碼
作者:
OFFICE專家
時間:
2012-6-9 17:00
看到這問題想起多年前ZZ版兄在OFFICE精英
也問過同樣問題.那時後StartUp剛出現沒多久
不過剛要進OFFICE精英...仍進不去...OFFICE精英有好幾天進不去了
上次OFFICE精英進不去是2004年的時候了.結果是主機壞掉.所有文章退回1個月前
作者:
PJChen
時間:
2012-6-12 08:11
回復
2#
Hsieh
版大,
在程式執行過程中,它會一直出現對話框問是否更新連結?我想到之前大大給的二句話(藍色字),就將它加在這個程式中,但執行時停在With Workbooks.Open(fd & fs),是否前述二句話放錯位置了?
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Sub Try()
fd = ThisWorkbook.Path & "\" & Sheets(1).[E6] & "\"
fs = Dir(fd & "*.xlsm")
fs = Dir(fd & "*.xls")
Do Until fs = ""
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
With Workbooks.Open(fd & fs)
For Each vbc In .VBProject.VBComponents
Select Case vbc.Type
Case vbext_rk_Project, vbext_wt_Browser, vbext_ct_MSForm '註
.VBProject.VBComponents.Remove .Item(vbc.Name)
Case Else
.VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
.VBProject.VBComponents(vbc.Name).CodeModule.CountOfLines
End Select
Next
.Close 1
End With
fs = Dir
Loop
End Sub
複製代碼
作者:
Hsieh
時間:
2012-6-12 08:19
回復
5#
PJChen
開啟檔案不更新連結
Sub Try()
fd = ThisWorkbook.Path & "\" & Sheets(1).[E6] & "\"
fs = Dir(fd & "*.xlsm")
fs = Dir(fd & "*.xls")
Do Until fs = ""
Application.DisplayAlerts = False
With Workbooks.Open(fd & fs, False) ' 開啟檔案不更新連結
'With Workbooks.Open(fd & fs, True) ' 開啟檔案更新連結
For Each vbc In .VBProject.VBComponents
Select Case vbc.Type
Case vbext_rk_Project, vbext_wt_Browser, vbext_ct_MSForm '註
.VBProject.VBComponents.Remove .Item(vbc.Name)
Case Else
.VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
.VBProject.VBComponents(vbc.Name).CodeModule.CountOfLines
End Select
Next
.Close 1
End With
fs = Dir
Loop
End Sub
複製代碼
作者:
PJChen
時間:
2012-6-12 08:39
回復
6#
Hsieh
請問大大,
若是待刪除巨集的檔案中有些是
完全沒有巨集的(程式會停下來)
,我要讓"刪除巨集"的程式忽略它,繼續執行指令刪除其它有巨集的檔案,
我應該加入什麼語言(加在什麼地方)?才能達成我想要的?
作者:
PJChen
時間:
2012-6-12 08:45
回復
6#
Hsieh
再補充問題,程式執行時是否會因為簡體字而無法執行,像以下的檔名,它就出現了這樣的訊息: [attach]11343[/attach]
6月11日出车表.xls
作者:
Hsieh
時間:
2012-6-12 15:17
本帖最後由 Hsieh 於 2012-6-12 16:36 編輯
回復
8#
PJChen
1. 並無你所說當無程式碼檔案執行時會停止的現象
2. 要正確顯示檔名,只能借用儲存格顯示
Sub Try()
Dim fs
Application.DisplayAlerts = False
fd = ThisWorkbook.Path & "\" & Sheets(1).[E6] '檔案目錄
Set fos = CreateObject("Scripting.FileSystemObject")
Set fdn = fos.getfolder(fd)
Set fc = fdn.Files '檔案目錄中所有檔案
For Each fs In fc
[A1] = fs.Name '借用儲存格顯示正確檔名
With Workbooks.Open(fd & "\" & [A1].Text, 0) ' 開啟檔案不更新連結
For Each vbc In .VBProject.VBComponents
Select Case vbc.Type
Case 100
.VBProject.VBComponents(vbc.Name).CodeModule.DeleteLines 1, _
.VBProject.VBComponents(vbc.Name).CodeModule.CountOfLines '刪除所有程式碼
Case Else
.VBProject.VBComponents.Remove .VBProject.VBComponents.Item(vbc.Name) '移除模組、表單、類別模組
End Select
Next
.Close 1
End With
Next
End Sub
複製代碼
作者:
PJChen
時間:
2012-6-12 17:41
回復
9#
Hsieh
也許我誤以為簡體字檔名為無巨集便會停下來,現在測試未發現有問題了,不過想請教,為何將檔名顯示在[A1]儲存格,為何它就可以接受簡體字了?
作者:
PJChen
時間:
2013-3-13 11:19
回復
9#
Hsieh
版大,
最近我的電腦重新安裝Ms office 2010,之前使用的這個巨集,突然無法運作並出現"錯誤1004",可以幫忙看下是出了什麼問題?或者我需要再提供什麼訊息? 感謝!!
[attach]14350[/attach]
[attach]14351[/attach]
作者:
GBKEE
時間:
2013-3-13 12:15
回復
11#
PJChen
勾選它
[attach]14352[/attach]
作者:
PJChen
時間:
2013-3-13 12:29
回復
12#
GBKEE
感謝大大, 原來是設定問題,解決了!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)