У меня есть некоторый код, который извлекает параметры из ячеек 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