Set Security chế độ Trus access to Visual Basic project (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

viehoai

Thành viên gắn bó
Tham gia
22/5/09
Bài viết
2,599
Được thích
2,908
Giả 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.
 
Giả 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.
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
PHP:
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"DontTrustInstalledFiles"=dword:00000000
"AccessVBOM"=dword:00000001
TDN
 
Upvote 0
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
PHP:
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"DontTrustInstalledFiles"=dword:00000000
"AccessVBOM"=dword:00000001
TDN
Ý 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
 
Upvote 0
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
PHP:
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"DontTrustInstalledFiles"=dword:00000000
"AccessVBOM"=dword:00000001
TDN
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
-------------------
Ý 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
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)
 
Upvote 0
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)
Nhưng phím tắt cho việc tích chuột vào nó là gì vậy Sư phụ?
Em dùng cái này sao nó không có tác dụng ?
PHP:
Sub TrustVBAPr()
Application.SendKeys "%tmst"
Application.SendKeys "%v{Enter}"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ồ, 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é
PHP:
Sub Enable_Macro()
    SendKeys "%{T}{M}{S}{S}"
    SendKeys "%{L}"
    SendKeys "%{T}"
    SendKeys "%{V}"
    SendKeys "^{Enter}"
End Sub
TDN
 
Upvote 0
Ồ, 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é
PHP:
Sub Enable_Macro()
    SendKeys "%{T}{M}{S}{S}"
    SendKeys "%{L}"
    SendKeys "%{T}"
    SendKeys "%{V}"
    SendKeys "^{Enter}"
End Sub
TDN
Em test cái này vẫn chưa đưa được anh à, và nó đánh chữ S ở bảng tính?
 
Upvote 0
Bạ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
PHP:
    SendKeys "%{T}{M}{S}{T}{V}"
    SendKeys "%{V}"
    SendKeys "^{Enter}"
Nếu chạy Reg thì bạn thử file sau
TDN
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạ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
PHP:
    SendKeys "%{T}{M}{S}{T}{V}"
    SendKeys "%{V}"
    SendKeys "^{Enter}"
TDN
Em test thử vẫn chưa được và mở cửa sổ VBE và đánh chữ S
Em đang dùng MS2003
Em kiểm chứng từng lệnh 1 thì:
Lệnh 1 chạy và xuất hiện được Form
Đặt Lệnh 1 và 2 thì không xuất hiện được Form (tắt lệnh 3)?
 
Lần chỉnh sửa cuối:
Upvote 0
À, 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 chạy code khi ở bảng tính đấy chứ, thậm chí em tắt luôn cả của sổ VBE
Em chỉ cho chạy
PHP:
SendKeys "%{T}{M}{S}{T}"
Hiện được Form nhưng không đến được thẻ Trusted Publisher
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử file sau. Mình test trên máy tính của mình thì nó chạy ngon lành.
Nhưng cách này có vẻ không ổn lắm, chỉ là giải quyết tình huống thôi
 

File đính kèm

Upvote 0
Hic hic, Pó tay ???
Trông chờ các sư phụ ra tay thôi
 
Upvote 0
Lạ nhỉ, nó tự mở cửa sổ VBE và đánh chữ S và vẫn chưa được
Vầ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
 
Upvote 0
Vầ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
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
PHP:
SendKeys "%{T}{M}{S}"
em dùng
PHP:
Application.CommandBars("Macro").Controls("Security...").Execute
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 được
 
Lần chỉnh sửa cuối:
Upvote 0
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
PHP:
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
Trên cơ sở đó có thể can thiệp vào việc tích chọn nó được không. Theo Link này
 
Lần chỉnh sửa cuối:
Upvote 0
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
PHP:
SendKeys "%{T}{M}{S}"
em dùng
PHP:
Application.CommandBars("Macro").Controls("Security...").Execute
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 được
Thôi thì vầy cho rồi:
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
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ạ)
---------------------------------------
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
PHP:
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
Trên cơ sở đó có thể can thiệp vào việc tích chọn nó được không. Theo Link này
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:
PHP:
Function IsVBATrusted() As Boolean
  Dim tmp As String
  On Error Resume Next
  tmp = ThisWorkbook.VBProject.Name
  IsVBATrusted = Not (tmp = "")
End Function
Hoặc ngắn gọn hơn nữa:
PHP:
Function IsVBATrusted() As Boolean
  Application.Volatile
  On Error Resume Next
  IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing
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ại
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi thì vầy cho rồi:
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
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ạ)
---------------------------------------

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:
PHP:
Function IsVBATrusted() As Boolean
  Dim tmp As String
  On Error Resume Next
  tmp = ThisWorkbook.VBProject.Name
  IsVBATrusted = Not (tmp = "")
End Function
Hoặc ngắn gọn hơn nữa:
PHP:
Function IsVBATrusted() As Boolean
  Application.Volatile
  On Error Resume Next
  IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing
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ại
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ỉ?
Em làm từ sáng tới giờ vẫn chưa được. Bây giờ em phải chấp nhận xuất Form đó ra để người dùng tự chỉ việc check vào đó bằng lệnh SendKeys "%TMST"
Cảm ơn Sư phụ rất nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Mình test 2003 thì phải như vầy:

SendKeys "%{T}{down}{M}{S}{T}%{V}{enter}"

2007 thì không cần {Down}

Nếu dùng tab chuyển focus xuống chỗ cần tick, thì phím thay thế click chuột để chọn hoặc bỏ chọn (1 mục đang được focus) là phím {Space}
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom