Làm sao đóng được cửa sổ VBA Trust Center bằng code VBA

Liên hệ QC

Quang_Hải

Thành viên gạo cội
Tham gia
21/2/09
Bài viết
6,053
Được thích
7,969
Nghề nghiệp
Làm đủ thứ
Mình mở cửa sổ VBA ra thế này nhưng không biết làm sao đóng lại. Nhờ các anh chị hướng dẫn dùm
PHP:
Sub Trigger()
Application.CommandBars.FindControl(ID:=3627).Execute
End Sub
 
Ặc ặc, sao tình hình này giống như đang rờ voi quá...
Đã nói là không tick vào Trust Access mà... đang muốn cho nó tick tự động. Cho nên mới cần là bỏ tick ra trước rồi mới test code xem coi có báo true được hay không mà.

thì em mở môt file bình thường lên bỏ Trust Access đi chạy file bài 7 thì nó báo là False sau đó kiểm tra xem có check chưa thì hỏng thấy
sau đó tắt đi lại mở file mới lên kiểm tra thấy chưa check em lại thử check vô Ok hai lần xong... lại mở file bài 7 lên nó báo là False
Hỏng biết em làm vậy trúng hay trật
 
Upvote 0
Các anh em dành tí thời gian test giúp theo trình tự sau xem coi tình trạng có giống như mình bị hay không


  1. Mở file của bài 7 lên. Lúc này tình trạng có thể là True hoặc False.
  2. Vào cửa sổ VBE, chọn Tools, Reference và bỏ chọn 3 mục (nếu có): Microsoft Visual Basic for Applications Extensibility, Microsoft Scripting Runtime, Microsoft AtiveX Data >>>Ok
  3. Vào Excel Options, Trust Center > Trust Center Setting > Macro Settings, bỏ chọn Trust Access >>> Ok
  4. Bây giờ vào lại VBE và thử kích hoạt Sub Auto_Open. Theo mong đợi thì sẽ xuất hiện thông báo True nhưng luôn xuất hiện thông báo False và khi kiểm tra các mục Reference (tại 2) thì các mục này chưa được đánh dấu chọn.
  5. Nhưng nếu bây giờ ta vào Excel Option để kiểm tra thì thấy mục Trust Access đã được đánh dấu chọn rồi. Nếu ta chọn Ok để thoát thì lúc này Sub Auto sẽ chạy ào ào, nhưng nếu ta thoát của sổ này bằng phím Cancel thì Sub Auto vẫn tình trạng cũ.

nếu Anh chỉ check hay ko check thì em sử code bài 5 ok mà
Check
PHP:
Sub Yes_Trust_Access()
    Dim regKey As String
    regKey = "HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\" & Application.Version & "\Excel\Security\AccessVBOM"
     With CreateObject("WScript.Shell")
        If .regRead(regKey) = 0 Then .RegWrite regKey, 1, "REG_DWORD"
     End With
End Sub
Không Check
PHP:
Sub No_Trust_Access()
    Dim regKey As String
    regKey = "HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\" & Application.Version & "\Excel\Security\AccessVBOM"
     With CreateObject("WScript.Shell")
        If .regRead(regKey) = 1 Then .RegWrite regKey, 0, "REG_DWORD"
     End With
End Sub
 
Upvote 0
nếu Anh chỉ check hay ko check thì em sử code bài 5 ok mà
Check
PHP:
Sub Yes_Trust_Access()
    Dim regKey As String
    regKey = "HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\" & Application.Version & "\Excel\Security\AccessVBOM"
     With CreateObject("WScript.Shell")
        If .regRead(regKey) = 0 Then .RegWrite regKey, 1, "REG_DWORD"
     End With
End Sub
Không Check
PHP:
Sub No_Trust_Access()
    Dim regKey As String
    regKey = "HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\" & Application.Version & "\Excel\Security\AccessVBOM"
     With CreateObject("WScript.Shell")
        If .regRead(regKey) = 1 Then .RegWrite regKey, 0, "REG_DWORD"
     End With
End Sub

Đã nói rồi, tình hình là mình đang cùng nhau rờ voi rồi. Với khả năng của mình thì đủ để biết là khi chạy code đăng ký vào Registry thì mục Trust sẽ được check và không check. Vấn đề còn liên quan Sub Reference. Dù đã check nhưng vẫn không chạy được Sub Reference.

Ngày mai tranh thủ ghé chỗ Mạnh để kiểm tra cái vụ lu xu bu này mới được.
 
Lần chỉnh sửa cuối:
Upvote 0
Lạ nhỉ, mình làm theo cách của mình Ok mà không cần tắt Ex đi mở lại, tức là có tác dụng tức thì, chạy được Sub Reference cuar Hải luôn (do sử dụng key trong HKEY_LOCAL_MACHINE)
Hải dùng mấy Office trong máy vậy? Có khi nào nó chạy
Office này mà đăng ký cho Office khác không?
Thử chạy dòng lệnh Msgbox
Excel.Application.Version hoặc Msgbox Application.Version xem.
 
Upvote 0
Lạ nhỉ, mình làm theo cách của mình Ok mà không cần tắt Ex đi mở lại, tức là có tác dụng tức thì, chạy được Sub Reference cuar Hải luôn (do sử dụng key trong HKEY_LOCAL_MACHINE)
Hải dùng mấy Office trong máy vậy? Có khi nào nó chạy
Office này mà đăng ký cho Office khác không?
Thử chạy dòng lệnh Msgbox
Excel.Application.Version hoặc Msgbox Application.Version xem.
Mình đang dùng Office 2010. Để mình kiểm tra thử trên máy khác xem sao. Cũng hơi tức tức.
 
Upvote 0
Mình đang dùng Office 2010. Để mình kiểm tra thử trên máy khác xem sao. Cũng hơi tức tức.

Nó báo TRUE hay FALSE thây kệ nó, miễn kiểm tra References ta thấy các mục đã check là được rồi
Sub Auto_Open nên sửa thành vầy mới đúng:
Mã:
Sub Auto_Open()
   Dim bChk As Boolean
   bChk = IsVBATrusted
   If bChk = False Then ChangeVBOM
   CheckReference
   [COLOR=#ff0000]MsgBox IsVBATrusted[/COLOR]
End Sub
Tóm lại code của anh thanhlanh là OK đó
 
Upvote 0
Đã kiểm tra trên máy tính của kieumanh, (có kieumanh chứng thực) các code trên đều bị giống nhau. Dù có chạy code đăng ký trong registry nhưng nếu không mở cửa số của Excel Option lên thì code nó cốc chịu hiểu. ---> đã thỏa mản vì ít nhất cũng biết có 1 máy giống như mình.
 
Upvote 0
Đã kiểm tra trên máy tính của kieumanh, (có kieumanh chứng thực) các code trên đều bị giống nhau. Dù có chạy code đăng ký trong registry nhưng nếu không mở cửa số của Excel Option lên thì code nó cốc chịu hiểu. ---> đã thỏa mản vì ít nhất cũng biết có 1 máy giống như mình.

Có khi nào liên quan đến UAC không? Kiểm tra lại xem. Nếu nó không được đặt ở mức thấp nhất thì hãy kéo thanh trượt xuống thấp, khởi động máy tính và thử lại code
 
Upvote 0
Có khi nào liên quan đến UAC không? Kiểm tra lại xem. Nếu nó không được đặt ở mức thấp nhất thì hãy kéo thanh trượt xuống thấp, khởi động máy tính và thử lại code
Chính là hắn rồi, phải kéo xuống mức thấp thì ok.
........
Tuy nhiên em đã tìm ra cách không thay đổi UAC nhưng code vẫn có thể hoạt động như ý bằng cách sử dụng SendKeys
Nó đây
PHP:
Sub GetTrustAccess()
SendKeys "{ENTER}", 1 / 10000
Application.CommandBars.ExecuteMso ("MacroSecurity")
End Sub
 
Upvote 0
Chính là hắn rồi, phải kéo xuống mức thấp thì ok.
........
Tuy nhiên em đã tìm ra cách không thay đổi UAC nhưng code vẫn có thể hoạt động như ý bằng cách sử dụng SendKeys
Nó đây
PHP:
Sub GetTrustAccess()
SendKeys "{ENTER}", 1 / 10000
Application.CommandBars.ExecuteMso ("MacroSecurity")
End Sub

Cho dù được thì cách này cũng.. kỳ kỳ sao ấy
Tôi rất ngại khi phải dùng SendKeys, ai mà biết lúc nào nó trở chứng (khi code đang chạy rồi người ta nhảy qua nhảy lại giữa các cửa số chẳng hạn).
Nói chung là khó khống chế cho được chính xác theo ý muốn lắm
 
Upvote 0
Web KT
Back
Top Bottom