Установил свой Excel 365 на старый комп, подключил настройку и все работает, списки сохраняются. Винда на нем 7-ая. Выходит, что дело не в Excel, а возможно в системе. Сейчас такая проблема на 2-х компах.
Сижу на нем второй год и никогда не было проблем. Достал старый ноутбук, сейчас на нем поставлю свой 365 и проверю надстройку и тогда станет все понятно - комп или excel.
У меня дома сейчас 3 компа: 1. Мой комп, на котором ведется работа с надстройкой. На нем проблема со списками. 2. Рабочий комп, на нем со списками все норм. 3. Комп жены, новый, купили 5 дней назад. Аналогичная проблема со списками!
На ВСЕХ компах Win10 и Office 2016. Выходит, что не только мой комп дает сбой, есть и еще. У меня стоит платный офис на 365 дней, на днях я поделился им с женой и в этот момент и начались проблемы со списками! У меня офис с женой один и тот же, и проблема со списками та же. Думаю, что проблема в Excel.
кнопка цитирования не для того чтобы на нее бездумно жали [МОДЕРАТОР]
В настоящий момент у меня подключена надстройка (Афина), поэтому когда я открываю новую книгу и жму Alt+F11 у меня есть 2 проекта: Афина и Книга 1.
В прошлый раз я сделал так: 1. Отключил Афину. 2. Перезагрузил комп. 3. Скачал Афину. 4. Открыл новую книгу. 5. Подключил скачанную Афину. 6. Нажал кнопку "Квартира" на панели. Списки отсутствовали.
Все одинаковое! Этой надстройке уже 2 года и она постоянно дорабатывается на моем домашнем компе и с этими выпадающими списками (F10:L10) никогда не было проблем.
Есть такие наблюдения: 1. Если отобразить содержимое надстройки (IsAddin = False) и попробовать сделать тот же процесс вручную, то есть вкладку "К_01|01|2019_ПО_АРФа" скопировать (через "Переместить или скопировать") в новою книгу, то списки (F10:L10) также исчезают!! То есть, это происходит исключительно только при копировании из надстройки в новую книгу или, например, из Книги 1 в Книгу 2 (то есть при копировании в другую книгу). Выходит, что дело уже не в самой надстройке, а в копировании листа из одной книги в другую. Если сделать такое копирование внутри одной книги, то все норм, списки сохраняются. 2. Это единственный список в расчетной таблице, который является связанным с другим списком и реализован с ссылкой на имя из диспетчера задач. Остальные списки стандартные (ссылки на диапазоны ячеек), с ними все норм, они остаются при копировании.
Я перезагрузил комп и все проделал как у вас в #2 включая скачивание файла. Результат тот же - в ячейках F10:L10 исчезают списки. При этом на рабочем компе такого нет, все работает хорошо.
sokol92 я правильно понял, что в ячейках F10:L10 выпадающие списки сохраняются и после выбора региона (в ячейках F9:L9) можно выбрать населенный пункт в ячейках F10:L10??
У меня после создания, например "Квартира", в ячейках F10:L10 напрочь исчезают списки. Ячейки F10:L10 становятся пустыми ("Любое значение"). И мне не понятно почему. Даже если весь этот процесс провернуть вручную, то при копировании листа из надстройки в новую книгу ячейки F10:L10 также становятся пустыми. Раньше такого не было!! Не могу понять, что изменилось.
Столкнулся с такой проблемой: Создал надстройку. Внутри нее лежит расчетная таблица (она скрыта от пользователей). Расчетная таблица - стандартная таблица (не умная). Эта таблица создается пользователем через нажатие на кнопку (на панели инструментов) - то есть, стандартное копирование листа из надстройки в запущенный пользователем Excel. В этой таблице есть большое количество выпадающих списков (списки созданы через "Проверку данных" - "Списки") в различных ячейках. И только единственный список сделан через ссылку на "диспетчер имен", так как он связан с другим списком. Так вот, этот список в ячейке, при копировании листа из надстройки в запущенный Excel, просто исчезает и все, ячейка в таблице становится "Любое значение". При этом, в таблице, которая в надстройке (IsAddin = false), все работает, список есть. В созданной пользователем таблице можно руками прописать в Списках ссылку на Диспетчер имен и все работает. При ручном копировании таблицы из надстройки в Excel аналогично - исчезает список. То есть, вся проблема в копировании листа именно из надстройки. Я подумал, хрен с ним, и пробовал прописать макрос, который вставляет в данную ячейку список с ссылкой на имя из диспетчера имен. Но, макрос не срабатывает, на строке .Add выдает ошибку - Run-Time 1004 Application-defined or object-defined error (код ниже). Код получил через запись макроса. Такое решение проблемы меня бы устроила, но не могу понять почему не работает макрос.
Код
Private Sub am()
Range("F10:L10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Горда_К"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Буквально на прошлой неделе все работало и проблем не было. Эта же надстройка на рабочем компе работает и список не исчезает. На домашнем компе список исчезает. Домашний комп: Операционная система Windows 10, Office 2016. Рабочий комп: Операционная система Windows 10, Office 2016.
По ссылке находится надстройка. На примере "Квартира" - создается таблица и в ней в диапазоне ячеек F10:L10 (он завязан на списках F9:L9 через диспетчер имен) должен быть выпадающий список. У меня они исчезает при создании копии листа. Если сделать IsAddin = false и посмотреть этот диапазон на листе с именем "К_01|01|2019_ПО_АРФа", то списки там есть.
Не понимаю с чем связано такое явление. Читал в инете, похожей проблемы не нашел. Ctrl + 6 - это не то! Прошу помощи.
Пытаюсь получить имя листа, на ячейку которого у меня идет ссылка. Пример во вложении. Сделал ссылку в ячейке А1 Листа1 на ячейку А1 Листа2. Прописал формулу (нашел в интернете):
Что я делаю не так? Есть какие-то еще способы получить имя листа, на ячейку которого идет ссылка (в той же книге)? К сожалению макрос не подойдет, лучше формулу.
Через кабинет разработчика Yandex я создал ключ (JavaScript API и HTTP Геокодер) (см. мое сообщение №9 выше). Затем, я его вставил в ссылку в код (правильный вариант):
Моя ошибка заключалась в том, что я вставил ключ с кавычками <5d13d5bf-f35d-4534-800e-9a36a986e3ca>, а надо было без: 5d13d5bf-f35d-4534-800e-9a36a986e3ca.
Я через кабинет разработчик сделал ключ API (бесплатный с ограничениями (25 000 запросов в сутки)): 5d13d5bf-f35d-4534-800e-9a36a986e3ca Или нужен платный ключ?
Function RussianStringToURLEncode(ByVal txt) As String
For i = 1 To Len(txt)
l = Mid(txt, i, 1)
Select Case AscW(l)
Case Is > 256: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
Case 32: t = "+"
Case Else: t = l
End Select
RussianStringToURLEncode = RussianStringToURLEncode & t
Next
End Function
Буквально 3 недели назад программка работала как часы и проблем не было. На листе "Данные" пользователь задает адреса объектов недвижимости, жмет кнопку и появляется карта, на которой отмечены все объекты метками: объект оценки - красная метка на карте, объекты-аналоги - синие метки с номерами на карте. Так программа проработала более 2-х лет. Недели 3 назад программа стала работать нестабильно: все метки стали вешаться на один адрес (см. файл). Начал разбираться с самим кодом и заметил, что на строке кода:
в ячейку А1 листа temp вместо нормального адреса записываются "иероглифы". Из-за этого все координаты становятся одинаковыми для всех объектов недвижимости из перечня заданных. [img]file:///C:/Users/skapr/OneDrive/РабоÑий%2520ÑÑол/ÑиÑ1.jpg[/img] Не могу понять с чем это связано. Правильно ли я выявил ошибку? Как можно устранить эту ошибку? На что обратить внимание?
На Лист1 строка 4 с размером 12 (выставил вручную). Если в ячейку E4 набрать много текста, то автоподбор не сработает, пока не сделаешь двойной клик по границе. При удалении текста идет возврат строки 4 к размеру 15.
На Листе2 строка 4 с размером 12 (выставил вручную). Все прекрасно работает!
Столкнулся с такой задачей (сразу отмечаю, что объединения ячеек НЕТ!):
Стандартная высота строки в Excel = 15. Мне нужно меньше! Я для себя выставил высоту строки 12.75 и сделал перенос текста. Когда я ввожу туда текст, который превышает размеры ячейки, то перенос текста срабатывает, а строка остается постоянной (не расширяется, = 12.75). Тогда я сделал автоподбор высоты строки через двойной клик по границе - автоподбор срабатывает и все норм. Если затем удалить текст, то высота строки возвращается к размеру = 15, хотя в начале я выставил 12.75.
Удивительно то, что в этой же книге на другом листе все работает хорошо даже при размере 12.75. Смериться с размером в 15 не хочу, так как это нарушит мне всю однотипность + хочу понять в чем проблема.
Что я делаю не так? Может для листа где-то можно выставить настройки?
В моем случае последовательность как описывает RAN. Перепроверил все ручником, когда открывается надстройка запускается Workbook_Open(), затем App_WorkbookOpen, и когда открывается основная книга снова запускается App_WorkbookOpen.
Код предложенный sokol92 работает:
Код
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
On Error Resume Next
If Wb.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
Wb.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
Wb.ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
Private Sub Workbook_Open()
Set App = Application
End Sub
On Error Resume Next - как раз игнорирует ошибку при открытии надстройки, а когда открывается основная книга ошибки нет, проверяется условие и в зависимости от условия ставится защита листа. По какой-то причине у меня все это не работало, видать я где-то косячил и каким-то удивительным случаем исправил косяк, сейчас вроде все работает!
Я показал свои подходы и коды в "кодовом мусоре" в самом первом сообщении!
sokol92, вы подправили свой код добавлением On Error Resume Next, либо я чего-то не понимаю. Ошибка появляется и никакая защита не ставится. On Error Resume Next - просто эту ошибку игнорирует, но она есть.
Я решил кинуть свою надстройку (Afina.xlam): https://hdd.tomsk.ru/desk/nesfjoij Пароль вроде убрал, но если что, то: 260287 Чтобы получить ту проблему, которую я не могу решить, надо сделать следующее: 1. Скачать надстройку и подключить данную надстройку к своему Excel. 2. В Excel появится панель инструментов АФИНА. 3. Зайти в панель инструментов АФИНА, затем нажать на кнопку "Квартира" в разделе "Оценка (ПО АРФа)". 4. Задать имя расчетному листу. 5. Появится расчетная таблица, которая будет защищена. Можно проверить, что защита не будет мешать работе макросов. В АФИНА нажмите на кнопку "Управление" в разделе "Оценка (ПО АРФа)" и появится меню управления для этой таблицы, можно снимать галочки у Аналогов №1-6 и таблица будет окрашиваться штрихами. Макрос работает! 6. Сохраните эту таблицу, например, на рабочий стол. 7. Откройте эту таблицу заново и попробуйте вызвать "Управление" и, например, снять галочки у Аналогов №1-6. Защита начинает мешать работе макроса.
Делаю так как пишет sokol92 и не работает, защита с userinterfaceonly:=true не ставится, при работе макроса появляются ошибки! В коде пока код sokol92 закомментил.
Ігор Гончаренко, указать имя листа нельзя, так как создать таблицу можно под разным именем, а также пользователь может ее переименовать.
Например, на коде предложенном sokol92 (см. рисунки): Рисунок 1. При загрузке Книги возникает ошибка на выделенной строке (желтая строка). Сначала загружается надстройка!! Рисунок 2. Ошибка. Рисунок 3. Если нажать End, то загружается вся Книга и уже появляется VBAProject (Книга1.xlsx), в которой находится тот самый активный лист, который я и хочу защищать по условию.
На текущий момент проблема стоит не в самой защите, а в том, что эта защита не срабатывает в коде ниже:
Код
Private Sub Workbook_Open()
Set App = Application
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
ActiveWorkbook.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveWorkbook.ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
У меня надстройка! И Workbook_Open() относится к "ЭтаКнига" надстройки! И когда я запускаю Excel, на строчке:
Код
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
вылетает ошибка и это логично. Я понял это так: у надстройки листы скрыты и поэтому нет никаких активных листов, соответственно условие проверить не возможно. А листы, которые относятся к основной книге (.xlsx), он не видит! У меня не файл .xlsm у меня просто .xlsx и все манипуляции через надстройку. В этом и появилась сложность.
Например, событие активации листа я реализую так:
Код
Private Sub App_SheetActivate(ByVal Sh As Object)
'тут код
End Sub
Создаю свою надстройку в Excel. В рамках этой надстройки есть панель инструментов с кнопочками. Одна из кнопочек отвечает за создание (по клику) специальной расчетной таблицы (ее эталон находится в Надстройка.xlam). При нажатии на кнопочку появляется эта табличка (стандартное копирование листа). В этой табличке есть области, которые защищены (защита листа), при этом, защита листа ставится при создании этой таблицы и я добавил код UserInterfaceOnly:=True чтобы защита не мешала макросам вносить изменения в защищенные области таблицы. Все работает на ура!
НО! Если пользователь создал табличку, поработал в ней, сохранил файл и закрыл его, а затем снова открыл (решил что-то изменить), то защита листа начинает мешать работе макроса, то есть, вылетает ошибка!
Как можно решить данную задачу? Может есть какие-то идеи? Может можно как-то отдельно запускать (обновлять) UserInterfaceOnly:=True?? Я пробовал сделать так:
Код
Private Sub Workbook_Open()
On Error Resume Next
Set App = Application
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
ActiveWorkbook.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveWorkbook.ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
Код
Private Sub App_SheetActivate(ByVal Sh As Object)
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
ActiveWorkbook.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveWorkbook.ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
Я планировал при запуске книги проверять, если активный лист является расчетной таблицей (.Range("A1").Value = "К_01|01|2019_ПО_АРФа"), то ставить защиту (я бы сказал это своего рода обновление защиты, чтобы заработал UserInterfaceOnly:=True). Соответственно и при переходе на др листы также проверяется это условие и заново ставится защита.
В моем подходе НЕ работает код (выдает ошибку):
Код
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
ActiveWorkbook.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveWorkbook.ActiveSheet.EnableSelection = xlUnlockedCells
End If
Методом тыка попробовал и так (не помогло):
Код
Private Sub App_Open()
If ActiveWorkbook.ActiveSheet.Range("A1").Value = "К_01|01|2019_ПО_АРФа" Then
ActiveWorkbook.ActiveSheet.Protect Password:=(Workbooks("Надстройка.xlam").Sheets("Управление").Range("B1")), DrawingObjects:=False, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
ActiveWorkbook.ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
При переходе на др лист все работает. Возможно ли через Workbook_Open() в данном случае поставить защиту листа? Или как можно при запуске книги "перезащитить" лист с UserInterfaceOnly:=True?
Ранее у меня был расчетный файл с макросами (.xlsm). Расчетный файл представлял собой таблицу для ввода данных, которая управлялась отчасти макросами. Один из макросов был двойной клик по некоторым ячейкам таблицы, который вызывал форму автопоиска. Реализовал я его через "Workbook_SheetBeforeDoubleClick".
На текущий момент я этот расчетный файл перенес в надстройку (.xlam). Теперь у меня есть панель инструментов с кнопочками. При нажатии на кнопочку "Создание таблицы" расчетная таблица появляется в текущей книги стандартным копированием листа из файла надстройки в текущую книгу. Табличка переносится и все хорошо. Не понятно, как реализовать двойной клик на ряд ячеек. Табличка появляется в стандартной книге Excel (.xlsx) и никаких макросов там не будет. Есть идея как-то вызывать макрос из модулей надстройки при двойном клике, но как это сделать и реально ли это, не понятно!
Скажите пожалуйста, насколько реально реализовать такую задачку?