security ở chế độ Low thì Macro không có tác dụng => không có code nào làm được yêu cầu của bạn đâuGiả sử ta đã đặt security ở chế độ Low cho macro hoạt động. Vậy xin hỏi các anh chị có code để tích chọn chế độ Trust access to Visual Basic project không?
Xin cảm ơn.
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"DontTrustInstalledFiles"=dword:00000000
"AccessVBOM"=dword:00000001
Ý em chỉ muốn tích chọn Trust access to Visual Basic project thôi. Xin anh đưa vào code VBA giúp em luôn. Cảm ơn anhsecurity ở chế độ Low thì Macro không có tác dụng => không có code nào làm được yêu cầu của bạn đâu
Tuy nhiên, nếu can thiệp trực tiếp vào Registry thì bạn thử cái này xem
TDNPHP:[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security] "DontTrustInstalledFiles"=dword:00000000 "AccessVBOM"=dword:00000001
Hình như thầy Phước nhầm? Cái "Sờ cu" mà LOW thì code nó "phi" thoải mái luôn chứsecurity ở chế độ Low thì Macro không có tác dụng => không có code nào làm được yêu cầu của bạn đâu
Tuy nhiên, nếu can thiệp trực tiếp vào Registry thì bạn thử cái này xem
TDNPHP:[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security] "DontTrustInstalledFiles"=dword:00000000 "AccessVBOM"=dword:00000001
Bạn thử dùng SendKeys xem có được không? (tức là dùng phím tắt để check hoặc bỏ check ấy)Ý em chỉ muốn tích chọn Trust access to Visual Basic project thôi. Xin anh đưa vào code VBA giúp em luôn. Cảm ơn anh
Nhưng phím tắt cho việc tích chuột vào nó là gì vậy Sư phụ?Hình như thầy Phước nhầm? Cái "Sờ cu" mà LOW thì code nó "phi" thoải mái luôn chứ
Riêng về việc chỉnh giá trị AccessVBOM tôi có thử nhiều lần trước đây... Ác cái nó không có tác dụng ngay lập tức ---> Phải đóng Excel, mở lại mới thấy có tác dụng ---> Cũng như không
-------------------
Bạn thử dùng SendKeys xem có được không? (tức là dùng phím tắt để check hoặc bỏ check ấy)
Sub TrustVBAPr()
Application.SendKeys "%tmst"
Application.SendKeys "%v{Enter}"
End Sub
Sub Enable_Macro()
SendKeys "%{T}{M}{S}{S}"
SendKeys "%{L}"
SendKeys "%{T}"
SendKeys "%{V}"
SendKeys "^{Enter}"
End Sub
Em test cái này vẫn chưa đưa được anh à, và nó đánh chữ S ở bảng tính?Ồ, thành thật xin lỗi. Đúng là mình khùng rồi, ặc ặc
Thầy NDU nói chính xác đó, có thể dùng SendKey trong VBA
Cái này là Enable Macro, tương tự bạn sửa lại Trust access to Visual Basic project nhéTDNPHP:Sub Enable_Macro() SendKeys "%{T}{M}{S}{S}" SendKeys "%{L}" SendKeys "%{T}" SendKeys "%{V}" SendKeys "^{Enter}" End Sub
Em test thử vẫn chưa được và mở cửa sổ VBE và đánh chữ SBạn thử cái này để Trust access to Visual Basic project xem. Mình test trên máy mình MS2003 thì OK
TDNPHP:SendKeys "%{T}{M}{S}{T}{V}" SendKeys "%{V}" SendKeys "^{Enter}"
À, khi chạy Macro bạn phải đang ở bảng tính Excel. Nếu chạy trong cửa sổ VBA thì kết quả như bạn mô tảEm test thử vẫn chưa được và mở cửa sổ VBE và đánh chữ S
Em đang dùng MS2003
Em chạy code khi ở bảng tính đấy chứ, thậm chí em tắt luôn cả của sổ VBEÀ, khi chạy Macro bạn phải đang ở bảng tính Excel. Nếu chạy trong cửa sổ VBA thì kết quả như bạn mô tả
SendKeys "%{T}{M}{S}{T}"
Vầy thử xem: SendKeys "%TMST%V{Enter}"Lạ nhỉ, nó tự mở cửa sổ VBE và đánh chữ S và vẫn chưa được
Em đã thử cái rồi vẫn chưa được, test thử phím tích chọn (Alt+V) không nhận em thử làm với SenKeys "{TAB}{TAB}" vẫn không đượcVầy thử xem: SendKeys "%TMST%V{Enter}"
Lưu ý quan trọng: Nếu mục "Trust access to..." đang được check thì khi chạy macro nó sẽ bỏ check và ngược lại --> Vì thế phải có đoạn code kiểm tra xem mục này đã check chưa
SendKeys "%{T}{M}{S}"
Application.CommandBars("Macro").Controls("Security...").Execute
Function IsVBATrusted() As Boolean
Application.DisplayAlerts = False
On Error Resume Next
Set VBC = ThisWorkbook.VBProject.VBComponents.Item(1)
On Error GoTo 0
Application.DisplayAlerts = True
IsVBATrusted = Not VBC Is Nothing
End Function
Thôi thì vầy cho rồi:Em đã thử cái rồi vẫn chưa được, test thử phím tích chọn (Alt+V) không nhận em thử làm với SenKeys "{TAB}{TAB}" vẫn không được
Thay vì dùng
em dùngPHP:SendKeys "%{T}{M}{S}"
vẫn hay hơn Sư phụ nhĩ. Khổ nỗi SenKey phím tích chọn em làm mãi vẫn chưa đượcPHP:Application.CommandBars("Macro").Controls("Security...").Execute
Sub ChangeVBOM()
Dim regKey As String
regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD"
End Sub
Ta biết rằng nếu Trust access to Visual Basic project chưa được check thì bất cứ truy cập nào vào VBProject đều bị từ chối (và ngược lại)Các Anh chị có thể giải thích vì sao hàm sau kiểm tra được việc tích chọn Trust access to Visual Basic project
Trên cơ sở đó có thể can thiệp vào việc tích chọn nó được không. Theo Link nàyPHP:Function IsVBATrusted() As Boolean Application.DisplayAlerts = False On Error Resume Next Set VBC = ThisWorkbook.VBProject.VBComponents.Item(1) On Error GoTo 0 Application.DisplayAlerts = True IsVBATrusted = Not VBC Is Nothing End Function
Function IsVBATrusted() As Boolean
Dim tmp As String
On Error Resume Next
tmp = ThisWorkbook.VBProject.Name
IsVBATrusted = Not (tmp = "")
End Function
Function IsVBATrusted() As Boolean
Application.Volatile
On Error Resume Next
IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing
End Function
Không hiểu sao em test vẫn chưa đưa Sư phụ à, hay là do một nguyên nhân nào khác nhỉ?Thôi thì vầy cho rồi:
Thay đổi giá trị AccessVBOM trong nhánh HKEY_LOCAL_MACHINE sẽ làm cho "Trust access to..." được check, đồng thời khóa luôn checkbox này (khỏi ai check bậy bạ)PHP:Sub ChangeVBOM() Dim regKey As String regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM" CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD" End Sub
---------------------------------------
Ta biết rằng nếu Trust access to Visual Basic project chưa được check thì bất cứ truy cập nào vào VBProject đều bị từ chối (và ngược lại)
Trên cơ sở đó mà người ta viết hàm này
Có thể sửa hàm đó theo kiểu khác:
Hoặc ngắn gọn hơn nữa:PHP:Function IsVBATrusted() As Boolean Dim tmp As String On Error Resume Next tmp = ThisWorkbook.VBProject.Name IsVBATrusted = Not (tmp = "") End Function
Dòng lệnh ThisWorkbook.VBProject.Name chính là 1 hành động truy cập vào VBProject ---> Nếu hành động này được cho phép thì biến tmp sẽ có giá trị và ngược lạiPHP:Function IsVBATrusted() As Boolean Application.Volatile On Error Resume Next IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing End Function