Board logo

標題: [解決了,改為分享] 用VBA批次幫其他excel 的VB專案設定密碼鎖定 [打印本頁]

作者: diabo    時間: 2011-2-26 20:55     標題: [解決了,改為分享] 用VBA批次幫其他excel 的VB專案設定密碼鎖定

本帖最後由 diabo 於 2011-2-28 00:31 編輯

一直無法成功,請大家幫忙看看哪裡有問題?
  1. Sub Lock_VBA()

  2.     Dim xlapp As Excel.Application
  3.     Dim wbSource As Excel.Workbook
  4.     Dim LogFileName As Variant
  5.     Dim fname As Variant
  6.     Dim VBA_PWD As String, XLS_PWD As String
  7.    
  8.    '取得密碼
  9.     VBA_PWD = [c4]  'VBA password
  10.    
  11.     Set xlapp = New Excel.Application
  12.    
  13.    'MultiSelect:=True 表示可複選檔案
  14.     LogFileName = Application.GetOpenFilename( _
  15.             FileFilter:="Excel檔(*.xls),*.txt", _
  16.             Title:="請選取檔案", MultiSelect:=True)
  17.    
  18.    '判斷使用者是否有選取檔案,或按取消
  19.     If VarType(LogFileName) = vbBoolean Then
  20.         Exit Sub
  21.     End If
  22.    
  23.    

  24.     xlapp.Visible = True

  25.     For Each fname In LogFileName
  26.         Set wbSource = xlapp.Workbooks.Open(CStr(fname))
  27.         
  28.        '專案沒有保護
  29.         If wbSource.VBProject.Protection = 0 Then
  30.             
  31.             DoEvents
  32.             
  33.             With xlapp
  34.                 .SendKeys "%{F11}"                'Alt + F11 切換到VBA視窗
  35.                 .SendKeys "%Te"                    'ALT + T 工具(繁體中文是(T))-VBproject屬性(E)
  36.                 .SendKeys "^{TAB}"                '切換到下一頁面 VBproject屬性(E)-保護
  37.                 .SendKeys "{+}"                   '{+}/{-}選取/取消「鎖定專案以供檢視」
  38.                 .SendKeys "{TAB}", False          '移到密碼欄位
  39.                 .SendKeys VBA_PWD & "{TAB}", True '輸入密碼
  40.                 .SendKeys VBA_PWD                 '確認密碼
  41.                 .SendKeys "{TAB}{ENTER}"          '按確定鈕(預設值)
  42.                 .SendKeys "%q"                    '
  43.             End With
  44.             
  45.            '存檔後關閉該檔案
  46.             wbSource.Save
  47.             wbSource.Close SaveChanges:=True
  48.             
  49.            'MsgBox Dir(fname) & " 專案鎖定完成"
  50.             
  51.         Else
  52.            
  53.            '不存檔後關閉該檔案
  54.             wbSource.Close SaveChanges:=False
  55.            
  56.            'MsgBox Dir(fname) & " 專案已經鎖定,請解鎖後再執行"
  57.         End If

  58.     Next fname
  59.    
  60.     Set wbSource = Nothing     xlapp.Quit

  61. End Sub
複製代碼
[attach]4878[/attach]
作者: kimbal    時間: 2011-2-27 10:41

一直無法成功,請大家幫忙看看哪裡有問題?
diabo 發表於 2011-2-26 20:55


sendkeys需要配合版面顯示快速度,試試加些暫停的代碼
  1.                With xlapp
  2.                 .SendKeys "%{F11}"                'Alt + F11 切換到VBA視窗
  3.                 Application.Wait (Now + TimeValue("0:00:01"))
  4.                 .SendKeys "%Te"                    'ALT + T 工具(繁體中文是(T))-VBproject屬性(E)
  5.                 Application.Wait (Now + TimeValue("0:00:01"))
  6.                 .SendKeys "^{TAB}"                '切換到下一頁面 VBproject屬性(E)-保護
  7.                 Application.Wait (Now + TimeValue("0:00:01"))
  8.                 .SendKeys "{+}"                   '{+}/{-}選取/取消「鎖定專案以供檢視」
  9.                 Application.Wait (Now + TimeValue("0:00:01"))
  10.                 .SendKeys "{TAB}", False          '移到密碼欄位
  11.                 Application.Wait (Now + TimeValue("0:00:01"))
  12.                 .SendKeys VBA_PWD & "{TAB}", True '輸入密碼
  13.                 Application.Wait (Now + TimeValue("0:00:01"))
  14.                 .SendKeys VBA_PWD                 '確認密碼
  15.                 Application.Wait (Now + TimeValue("0:00:01"))
  16.                 .SendKeys "{TAB}{ENTER}"          '按確定鈕(預設值)
  17.                 Application.Wait (Now + TimeValue("0:00:01"))
  18.                 .SendKeys "%q"                    '
  19.             End With
複製代碼

作者: diabo    時間: 2011-2-28 00:30

謝謝 kimbal ,果然是這要命的8秒.......

現在 OK 了....




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)