Tin tưởng truy cập vào mô hình đối tượng dự án vba là gì

"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 

Chủ Đề