2014-09-17 6 views
3

У меня есть таблицы, когда я открываю программно с помощью VBA в Access:Удалить защищенный вид из листа Excel открыт программно в Access

Set xl = CreateObject("Excel.Application") 
With xl 
    Call RunASCFormatting(xl, wb, strPath) 
    'More code 

Sub RunASCFormatting(xl As Excel.Application, wb As Excel.Workbook, strPath As String) 
    With xl 
     If .ProtectedViewWindows.count > 0 Then 
      .ActiveProtectedViewWindow.Edit 
     End If 
     Set wb = .Workbooks.Open(Trim(strPath) & "ASC.xls", True, False) 
     wb.Sheets(1).Rows("1:1").Delete Shift:=xlUp 
     .ActiveWorkbook.SaveAs FileName:=Trim(strPath) & "ASC.xlsx" _ 
     , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 
    End With 
End Sub 

я добавил в «Если» заявление в суб, как я надеялся, что это удалит «Защищенный вид - Редактирование этого типа файла не рекомендуется из-за настроек вашего Файлового блока в сообщении Центра доверия». То, что я пытаюсь добиться, - удалить кнопку «Включить редактирование», чтобы этот макрос мог разрешить редактирование и выполнять, как планировалось.

В настоящее время код попадает в строку «Установить wb». Каков правильный способ добиться того, что мне нужно?

+0

Удаление защищенного вида требует разрешения пользователя. Это будет нарушение безопасности, если есть способ удалить его прагматично без вмешательства пользователя. –

+0

Я абсолютно уверен, что видел это. Меня здесь не интересует проблема безопасности, поскольку это чисто делается для меня и одного коллеги. –

ответ

5

Одна из возможностей заключается в том, чтобы изменить параметры защиты макросов программно до самого низкого уровня, прежде чем открывать книгу Excel. После манипулирования данными повторно включите предыдущие настройки безопасности макросов.

Вот некоторые пересмотренный код, который я нашел в 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 

Как побочный комментарий, VBA реализует Integer, как долго, так что это может быть на самом деле немного больше производительности унижающим достоинство объявить переменные Integer, как это имеет переосмысливать ключевое слово Integer. Когда я узнал об этом, я начал объявлять Integer как Long вместо этого. Я действительно прочитал это в некоторых документах Microsoft, но я потерял ссылку на него несколько лет назад.

0

Вы можете попробовать отключить защищенные параметры просмотра в центре управления

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/

Это может быть вредным.

Кроме того, вы должны установить доверенные местоположения.

+2

Это было бы в последнюю очередь. Если я смогу сделать это программно, для этих нескольких экземпляров было бы очень предпочтительным. –

0

Sub fileBlock (значение As Long) Const HKEY_CURRENT_USER = & H80000001

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

'Определить местоположение/путь папки MyDocuments пользователя ' ************* ************************************************** **************** Set oRegistry = GetObject ("winmgmts:. \ \ корень \ по умолчанию: StdRegProv")

vers = Application.Version 

sParentKey = "Software\Microsoft\Office\" & vers & "\Excel\Security\FileBlock" 

oRegistry.SetDWORDValue HKEY_CURRENT_USER, sParentKey, item, value 


End Sub 
+0

этот код может изменить настройку блока файлов .... значение дает уровень безопасности. no security = 0 security for open = 1 security for open и save = 2 –

0
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

Этот код может добавлять доверенные адреса ..... если вы хотите добавить сетевые адреса, пожалуйста, свяжитесь с вашим администратором о безопасности в отношении местоположений в сети –

Смежные вопросы