"Quyền truy cập tin cậy vào mô hình dự án VBA" là thứ mà tôi nhấp vào theo bản năng ngay sau "Bật tất cả các macro", đơn giản vì tôi không có thời gian để kiểm tra xem nó có phá mã mà tôi muốn chạy hay không
Điều này là nghịch ngợm - tôi nên biết những gì tôi đang làm và những tác động. Giả sử tôi đã bật tất cả các macro, những tính năng/nguy hiểm bổ sung nào sẽ xuất hiện với tôi khi tôi mở Hộp Pandora của quyền truy cập đáng tin cậy vào mô hình dự án VBA?
Dòng mã này chạy mà không cần truy cập tin cậy
VBAProject.Sheet1.Calculate
Bạn vui lòng đăng một số mã yêu cầu quyền truy cập đáng tin cậy?
Trong hướng dẫn này, tôi chỉ cho bạn một cách lập trình cho phép truy cập tin cậy vào mô hình đối tượng dự án VBA bằng cách sử dụng macro. Cho phép truy cập tin cậy vào mô hình đối tượng dự án VBA cho phép bạn viết macro có thể thêm macro mới vào sổ làm việc. Bạn sẽ có thể thêm các mô-đun, viết macro mới và chạy các macro này từ macro của riêng bạn
Đúng rồi. Bạn có thể tạo một macro ghi nhiều macro hơn. Tôi sẽ chỉ cho bạn cách làm điều này trong vài ngày tới
Phương pháp mà tôi chỉ cho bạn hôm nay chỉ là một trong một số cách sử dụng macro để cho phép truy cập tin cậy vào mô hình đối tượng dự án VBA. Phương pháp này sử dụng SendKeys để thực hiện thủ thuật, nhưng một phương pháp phổ biến khác là tự điều chỉnh sổ đăng ký để chuyển đổi quyền truy cập vào mô hình đối tượng. Như tôi đã nói trước đây, SendKeys không ổn định, vì vậy đừng ngạc nhiên nếu nó không hoạt động 100% thời gian
Một câu hỏi về đạo đức
Macro này dài hơn rất nhiều so với mức cần thiết. Lý do cho điều này là vì tôi cảm thấy nó vượt qua ranh giới đạo đức để tự động bật/tắt quyền truy cập vào Mô hình đối tượng dự án VBA cho người dùng mà không có sự đồng ý của họ
Tôi sẽ hoàn toàn trung thực với bạn. Những người vô đạo đức có thể lạm dụng mã mà tôi sắp trình bày để có quyền truy cập vào mô hình đối tượng và viết macro để cài vi-rút, sâu và phần mềm độc hại khác trên máy tính của ai đó. Đừng là một trong những người đó
Bởi vì tôi không phải là người lập dị, nên tôi trình bày nhiều hộp thông báo trong macro để cho người dùng biết chính xác những gì tôi đang làm. Bạn có thể sửa đổi mã để loại bỏ các hộp thông báo, nhưng bạn sẽ phải tự làm điều này - tôi không chấp nhận điều đó
Một lý do khác khiến macro này dài hơn mức cần thiết là vì tôi không chỉ kiểm tra xem liệu người dùng có muốn tôi kích hoạt quyền truy cập vào mô hình đối tượng hay không. Tôi cũng kiểm tra xem họ có muốn tôi thu hồi quyền truy cập không. Một lần nữa, bạn có thể thay đổi điều này để kích hoạt quyền truy cập một cách mạnh mẽ, nhưng vì lý do đạo đức, bạn sẽ phải làm việc với nó. Xin lỗi
Ví dụ - Mô hình đối tượng dự án VBA
Macro để chuyển đổi quyền truy cập tin cậy vào Mô hình đối tượng dự án VBA
#If VBA7 Then
Declare PtrSafe Sub Sleep Lib "kernel32" [ByVal dwMilliseconds As Long]
#Else
Declare Sub Sleep Lib "kernel32" [ByVal dwMilliseconds As Long]
#End If
Sub CheckTrustAccess[]
Dim strStatus, strOpp, strCheck As String
Dim bEnabled As Boolean
If Not VBAIsTrusted Then
'ask the user if they want me to try to programatically toggle trust access. If I fail, give them directions.
bEnabled = False
strStatus = "DISABLE"
strOpp = "ENABLE"
v = MsgBox["Trust Access to the VBA Project Object Model is " & strStatus & "D." & Chr[10] & Chr[10] & _
"Would you like me to attempt to " & strOpp & " it?", vbYesNo, strOpp & " Trust Access?"]
Else
bEnabled = True
strStatus = "ENABLE"
strOpp = "DISABLE"
v = MsgBox["Trust Access to the VBA Project Object Model is " & strStatus & "D." & Chr[10] & Chr[10] & _
"Would you like me to attempt to " & strOpp & " it?", vbYesNo, strOpp & " Trust Access?"]
End If
If v = 6 Then
'try to toggle trust
Call ToggleTrust[bEnabled]
If VBAIsTrusted = bEnabled Then
'if ToggleTrust fails to programatically toggle trust
MsgBox "I failed to " & strOpp & " Trust Access." & Chr[10] & Chr[10] & _
"To " & strOpp & " this setting yourself:" & Chr[10] & Chr[10] & _
Space[5] & "1] Click " & Chr[145] & "File-> Options-> Trust Center-> Trust Center Settings" & Chr[146] & Chr[10] & _
Space[5] & "2] Click Macro Settings" & Chr[10] & _
Space[5] & "3] Toggle the box next to ""Trust Access to the VBA project object model""", vbOKOnly, "Auto " & strOpp & " Failed"
End
Else
MsgBox "I successfully " & strOpp & "D Trust Access." & Chr[10] & Chr[10] & _
"To " & strStatus & " this setting yourself:" & Chr[10] & Chr[10] & _
Space[5] & "1] Click " & Chr[145] & "File-> Options-> Trust Center-> Trust Center Settings" & Chr[146] & Chr[10] & _
Space[5] & "2] Click Macro Settings" & Chr[10] & _
Space[5] & "3] Toggle the box next to ""Trust Access to the VBA project object model""", vbOKOnly, "Auto " & strOpp & " Failed"
End If
Else
MsgBox "To manually " & strOpp & " Trust Access:" & Chr[10] & Chr[10] & _
Space[5] & "1] Click " & Chr[145] & "File-> Options-> Trust Center-> Trust Center Settings" & Chr[146] & Chr[10] & _
Space[5] & "2] Click Macro Settings" & Chr[10] & _
Space[5] & "3] Toggle the box next to ""Trust Access to the VBA project object model""", vbOKOnly, "How to " & strOpp & " Trust Access"
End
End If
If VBAIsTrusted Then
'if you want to write your own macro, do it here. You only get here if access is trusted
End If
End Sub
Private Function VBAIsTrusted[] As Boolean
Dim a1 As Integer
On Error GoTo Label1
a1 = ActiveWorkbook.VBProject.VBComponents.Count
VBAIsTrusted = True
Exit Function
Label1:
VBAIsTrusted = False
End Function
Private Sub ToggleTrust[bEnabled As Boolean]
Dim b1 As Integer, i As Integer
Dim strkeys As String
On Error Resume Next
Do While i