Обновить все подключения к данным доступа в Excel Снять защиту и защитить книгу Ошибка - PullRequest
0 голосов
/ 05 июня 2018

У меня есть некоторый код, который извлекает параметры из ячеек Excel в подключение для передачи данных, которое подключено к базе данных доступа.Он прекрасно работает, но код обновления всех данных не работает, если весь лист не защищен, и я не пытаюсь снова его защитить.У меня также есть это, где рабочая книга защищена с помощью кода прямо, когда файл Excel открывается с использованием кода, такого как этот (для каждого листа):

    Sheets("Name of WorkSheet").Protect Password:="password", Userinterfaceonly:=True

Однако, для обновления подключений к данным, даже если userinterfaceonly = true, это будетне обновитьВ этом случае я снимаю защиту с каждого листа перед запуском кода, а затем защищаю их в конце.Тем не менее, он не обновляет подключения к данным в файле Excel, прежде чем он защищает все рабочие листы обратно, даже если у меня есть код refreshall до строк кода защиты (он выдает ошибку, говорящую о том, что он не может обновить защищенный лист? Теперь, еслиЯ не пытаюсь защитить рабочие листы обратно в конце и оставить незащищенными, они будут обновляться просто отлично. Однако мне нужно это для защиты рабочих листов обратно. Вот мой код (я также пытался поместить команду refreshall прямо перед сообщениемполе тоже, но все равно выдает ошибку, что некоторые листы защищены и не могут обновиться):

Sub RefreshQuery()

Sheets("Crosswalks").Unprotect "password"
Sheets("New Initiative Plan Form").Unprotect "password"
Sheets("Resubmit Round 1 to 2 Form").Unprotect "password"
Sheets("Total Plan Summary").Unprotect "password"
Sheets("Detail of Rollover Plan").Unprotect "password"
Sheets("Additional Info").Unprotect "password"
Sheets("Access Data").Unprotect "password"



On Error GoTo ErrMsg


valueToFilter = "Plan_Items_Qry_UniqueKey.BuyerName ="

With 
 ActiveWorkbook.Connections("For_Updating_Round1_to_Round2").OLEDBConnection
 queryPreText = .CommandText
 paramPosition = InStr(queryPreText, valueToFilter) + Len(valueToFilter) - 1
 queryPreText = Left(queryPreText, paramPosition)
 queryPostText = .CommandText
 queryPostText = Right(queryPostText, Len(queryPostText) - paramPosition)
 queryPostText = Right(queryPostText, Len(queryPostText) - 
 InStr(queryPostText, ")") + 1)
 .CommandText = queryPreText & " '" & Range("C1").Value & "'" & 
 queryPostText
  End With

 Dim queryPreText2 As String
 Dim queryPostText2 As String
 Dim valueToFilter2 As String
 Dim paramPosition2 As Integer

 valueToFilter2 = "Plan_Items_Qry_UniqueKey.PlanYear ="

 With 
 ActiveWorkbook.Connections("For_Updating_Round1_to_Round2").OLEDBConnection
 queryPreText2 = .CommandText
 paramPosition2 = InStr(queryPreText2, valueToFilter2) + Len(valueToFilter2) 
 - 1
 queryPreText2 = Left(queryPreText2, paramPosition2)
 queryPostText2 = .CommandText
 queryPostText2 = Right(queryPostText2, Len(queryPostText2) - 
 paramPosition2)
 queryPostText2 = Right(queryPostText2, Len(queryPostText2) - 
 InStr(queryPostText2, ")") + 1)
 .CommandText = queryPreText2 & Range("C2").Value & queryPostText2
 End With

 Dim queryPreText3 As String
 Dim queryPostText3 As String
 Dim valueToFilter3 As String
 Dim paramPosition3 As Integer

 valueToFilter3 = "Plan_Items_Qry_UniqueKey.Round ="

 With 
 ActiveWorkbook.Connections("For_Updating_Round1_to_Round2").OLEDBConnection
 queryPreText3 = .CommandText
 paramPosition3 = InStr(queryPreText3, valueToFilter3) + Len(valueToFilter3) 
 - 1
 queryPreText3 = Left(queryPreText3, paramPosition3)
 queryPostText3 = .CommandText
 queryPostText3 = Right(queryPostText3, Len(queryPostText3) - 
 paramPosition3)
 queryPostText3 = Right(queryPostText3, Len(queryPostText3) - 
 InStr(queryPostText3, ")") + 1)
 .CommandText = queryPreText3 & Range("C3").Value & queryPostText3

 End With




 MsgBox ("The Table below has been updated! Please Update any information 
 needed on these initiatives (DO NOT ADD NEW INITIATIVES HERE) and then 
 click Step 2 to resubmit them for Round 2 (Final Round).  If you need to 
 also add additional initiatives for Round 2 Please use the New Initiative 
 Plan Form tab to submit them."), , "Plan Resubmission of Round 1 
 Initiatives to Round 2"

 ThisWorkbook.RefreshAll

 Sheets("Crosswalks").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Access Data").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Resubmit Round 1 to 2 Form").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("New Initiative Plan Form").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Total Plan Summary").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Detail of Rollover Plan").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Additional Info").Protect Password:="password", 
 Userinterfaceonly:=True



 Exit Sub

 ErrMsg:
 MsgBox ("There was an Error Refreshing the data, please contact Finance"), 
 , "Refresh Error"

 Sheets("Crosswalks").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Access Data").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Resubmit Round 1 to 2 Form").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("New Initiative Plan Form").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Total Plan Summary").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Detail of Rollover Plan").Protect Password:="password", 
 Userinterfaceonly:=True
 Sheets("Additional Info").Protect Password:="password", 
 Userinterfaceonly:=True

 Exit Sub

 End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...