Remove protected view from Excel sheet opened programmatically in Access

后端 未结 4 1697
庸人自扰
庸人自扰 2020-12-19 22:02

I have a spreadsheet I open programmatically using the VBA in Access:

Set xl = CreateObject(\"Excel.Application\")
With xl
    Call RunASCFormatting(xl, wb,          


        
相关标签:
4条回答
  • 2020-12-19 22:19
    Sub trusted_locations(path_to_add)
    
        Const HKEY_CURRENT_USER = &H80000001
    
        Dim oRegistry
        Dim sDescription        'Description of the Trusted Location
        Dim bAllowSubFolders        'Enable subFolders as Trusted Locations
        Dim bAllowNetworkLocations  'Enable Network Locations as Trusted
                        '   Locations
        Dim bAlreadyExists
        Dim sParentKey
        Dim iLocCounter
        Dim arrChildKeys
        Dim sChildKey
        Dim sValue
        Dim sNewKey
        Dim vers As Variant
    
    'Determine the location/path of the user's MyDocuments folder
    '*******************************************************************************
        Set oRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
        bAllowSubFolders = True
        bAlreadyExists = False
    
        vers = Application.Version
    
        sParentKey = "Software\Microsoft\Office\" & vers & "\Excel\Security\Trusted Locations"
    
        iLocCounter = 0
        oRegistry.EnumKey HKEY_CURRENT_USER, sParentKey, arrChildKeys
        For Each sChildKey In arrChildKeys
            oRegistry.GetStringValue HKEY_CURRENT_USER, sParentKey & "\" & sChildKey, "Path", sValue
            If sValue = spath Then bAlreadyExists = True
    
            If CInt(Mid(sChildKey, 9)) > iLocCounter Then
                    iLocCounter = CInt(Mid(sChildKey, 9))
                End If
        Next
    
    'Uncomment the following 4 linesif your wish to enable network locations as Trusted
    '   Locations
       bAllowNetworkLocations = True
       If bAllowNetworkLocations Then
               oRegistry.SetDWORDValue HKEY_CURRENT_USER, sParentKey, "AllowNetworkLocations", 1
       End If
    
        If bAlreadyExists = False Then
            sNewKey = sParentKey & "\Location" & CStr(iLocCounter + 1)
    
            oRegistry.CreateKey HKEY_CURRENT_USER, sNewKey
            oRegistry.SetStringValue HKEY_CURRENT_USER, sNewKey, "Path", path_to_be_added
            oRegistry.SetStringValue HKEY_CURRENT_USER, sNewKey, "Description", description_of_path
    
            If bAllowSubFolders Then
                oRegistry.SetDWORDValue HKEY_CURRENT_USER, sNewKey, "AllowSubFolders", 1
            End If
        End If
    End Sub
    
    0 讨论(0)
  • 2020-12-19 22:22

    You can try turning off protected view settings in the Trust Center

    http://office.microsoft.com/en-us/excel-help/what-is-protected-view-HA010355931.aspx#BM5

    http://www.howtogeek.com/60310/enable-editing-for-all-office-2010-documents-by-disabling-protected-view/

    This may be harmful.

    Additionally you should set trusted locations.

    0 讨论(0)
  • 2020-12-19 22:29

    Sub fileBlock(value As Long) Const HKEY_CURRENT_USER = &H80000001

    Dim oRegistry
    Dim sParentKey
    Dim vers As Variant
    Dim item As String: item = filetype_to_change_fileblock
    

    'Determine the location/path of the user's MyDocuments folder '******************************************************************************* Set oRegistry = GetObject("winmgmts:\.\root\default:StdRegProv")

    vers = Application.Version
    
    sParentKey = "Software\Microsoft\Office\" & vers & "\Excel\Security\FileBlock"
    
    oRegistry.SetDWORDValue HKEY_CURRENT_USER, sParentKey, item, value
    
    
    End Sub
    
    0 讨论(0)
  • 2020-12-19 22:34

    One possibility is to change the macro security settings programmatically to the lowest before you open the Excel workbook. After manipulating your data, re-enable the previous setting of the macro security.

    Here's some revised code which I found at http://www.mrexcel.com/forum/excel-questions/631545-change-trust-center-settings-visual-basic-applications.html:

    Public Sub MySubroutine()
        Dim lSecurity As Long
    
        lSecurity = Application.AutomationSecurity
        Application.AutomationSecurity = msoAutomationSecurityLow
    
        '''''''''''''''''''''
        '   Run code here   '
        '''''''''''''''''''''
    
        Application.AutomationSecurity = lSecurity
    End Sub
    

    As a side comment, VBA implements Integer as Long, so it could actually be slightly more performance degrading to declare Integer variables as it has to reinterpret the Integer keyword. When I learned that, I started declaring an Integer as Long instead. I actually read this in some Microsoft documentation, but I lost the link to it years ago.

    0 讨论(0)
提交回复
热议问题