Private Sub Workbook_Open() Worksheets("Reestr_Документ").Protect Password:="123", UserInterfaceOnly:=True End Sub
[/code][/vba]
В Книге есть 2 макроса: 1. Печать сразу на принтер, с настройками - он выполняется на ура; 2. А вот с этим проблема(он не хочет выполнять), он перезаполняет таблицу через PQ:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G1")) Is Nothing Then Select Case Target Case Else: Call Обновить End Select End If End Sub
[/code][/vba]
[vba]
Код
Sub Обновить() ' ActiveWorkbook.RefreshAll
End Sub
[/vba]
Заранее спасибо!
P.S. Извините за отсутствие примера файла, как сделать пример не пойму на угад, может следующим сообщением выложу.
Всем привет! Макросы для меня что-то дастаточно мутное и далекое, но если не пробывать, то зачем что-то делать.
Суть: Есть книга в которой листы, некоторые листы нужно защитить от шаловлтивых ручек юзерят
Private Sub Workbook_Open() Worksheets("Reestr_Документ").Protect Password:="123", UserInterfaceOnly:=True End Sub
[/code][/vba]
В Книге есть 2 макроса: 1. Печать сразу на принтер, с настройками - он выполняется на ура; 2. А вот с этим проблема(он не хочет выполнять), он перезаполняет таблицу через PQ:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G1")) Is Nothing Then Select Case Target Case Else: Call Обновить End Select End If End Sub
[/code][/vba]
[vba]
Код
Sub Обновить() ' ActiveWorkbook.RefreshAll
End Sub
[/vba]
Заранее спасибо!
P.S. Извините за отсутствие примера файла, как сделать пример не пойму на угад, может следующим сообщением выложу.mikaelw
Сообщение отредактировал mikaelw - Вторник, 04.07.2023, 13:08
Так получается, что у Вас проблема не с обновлением запроса PQ, а со снятием пароля защиты листа
В этом макросе [vba]
Код
Private Sub Workbook_Open() Worksheets("Reestr_Документ").Protect Password:="123", UserInterfaceOnly:=True End Sub
[/vba]указаны имя листа для снятия пароля и сам пароль Проверьте что бы пароль 123 и имя Reestr_Документ совпадали с тем, что у Вас в файле и что другие листы с запросами не запаролены
[p.s.]Вот для чего нужны файлы-примеры [/p.s.]
Так получается, что у Вас проблема не с обновлением запроса PQ, а со снятием пароля защиты листа
В этом макросе [vba]
Код
Private Sub Workbook_Open() Worksheets("Reestr_Документ").Protect Password:="123", UserInterfaceOnly:=True End Sub
[/vba]указаны имя листа для снятия пароля и сам пароль Проверьте что бы пароль 123 и имя Reestr_Документ совпадали с тем, что у Вас в файле и что другие листы с запросами не запаролены
[p.s.]Вот для чего нужны файлы-примеры [/p.s.]Serge_007
Решил вопрос другим путем. Нет работает, поэтому пример и приложить была проблема. Сделал проще, при обнововлении снимаю полностью защиту с листа, а дальше при попытке изменения любой ячекий уставливаю защиты заново и все теперь работает!
Решил вопрос другим путем. Нет работает, поэтому пример и приложить была проблема. Сделал проще, при обнововлении снимаю полностью защиту с листа, а дальше при попытке изменения любой ячекий уставливаю защиты заново и все теперь работает!mikaelw
Сообщение отредактировал Serge_007 - Среда, 05.07.2023, 13:37
Как бы нет там проблемы с PQ от слова совсем Да и с VBA нет, почти... Просто refreshall запускает обновление запросов и на лист сразу ставится защита, а на защищённый лист результат уже не выгружается. Поэтому надо запустить обновление, дождаться его окончания и потом обратно поставить защиту: [vba]
Код
Sub Обновить() ActiveSheet.Unprotect Password:="123" For Each conn In ActiveWorkbook.Connections With conn.OLEDBConnection tmp = .BackgroundQuery .BackgroundQuery = False .Refresh .BackgroundQuery = tmp End With Next
ActiveSheet.Protect Password:="123" End Sub
[/vba] ну и дальше можно обновлять не все, а только выгружаемые на лист и т.п. - можете посмотреть код этой надстройки - Мерка
Как бы нет там проблемы с PQ от слова совсем Да и с VBA нет, почти... Просто refreshall запускает обновление запросов и на лист сразу ставится защита, а на защищённый лист результат уже не выгружается. Поэтому надо запустить обновление, дождаться его окончания и потом обратно поставить защиту: [vba]
Код
Sub Обновить() ActiveSheet.Unprotect Password:="123" For Each conn In ActiveWorkbook.Connections With conn.OLEDBConnection tmp = .BackgroundQuery .BackgroundQuery = False .Refresh .BackgroundQuery = tmp End With Next
ActiveSheet.Protect Password:="123" End Sub
[/vba] ну и дальше можно обновлять не все, а только выгружаемые на лист и т.п. - можете посмотреть код этой надстройки - Меркапрохожий2019