Расходимся. Сам спросил - сам ответил. Убрал "[]" из пути к файлу и всё полетело. Делал по аналогии с тем, когда ручками всё тоже самое делаешь. И оно там ставило "[]". Ну навеное "так надо" подумал я. А оказывается не надо. И даже файл с пробелами в имени отработал норм. А форум то помог)
Предположение, что с одной и той же книгой есть несколько связей скорее всего ошибочно, т.к. в диспетчере связей четко указано, что связь есть только с одной книгой. Тогда не очень понятно почему формула исправляется по-разному.
Добрый день. Пытаюсь сделать обновление цен из других книг, используя связи. Проблема в том, что почему-то постоянно вылетает Excel.
В прайсах у нужных ячеек заданы именованные диапазоны в разрезе книги (уникальные для книги, а не для листа). И задача файла сборщика обращаться по этим ИД и получать цены. Поскольку у меня постоянно всё вылетает, то я добавил пробел перед формулами, чтобы хотябы видеть промежуточный результат. Если глазами проверить формулы, то всё корректно. При попытке ручками убирать пробел перед "=" (чтобы Excel увидел связь), то цены обновляются, но только у первой строки. Дальше все падает. Причем падает всегда на разной строке, т.е. может у первых двух цену обновить, а упасть на третьей, а может у четырёх и на пятой упасть. Заметил еще такую штуку, что при ручном удалении пробелов перед "=" формула у одного и того же источника меняется, хотя по логике должна отличаться только окончанием, т.е. в той её части, где уже идёт указание на определенный ИД книги.
Сложилось такое ощущение, что книга должна прикрепиться один раз и обслужить все свои связи за один раз (тогда бы путь был у всех одинаковый), а она с каждой строкой прикрепляется каждый раз заново и на каждую строку условно "создаётся своя отдельная связь" (не знаю как это по-человечески озвучить) и поэтому форма записи меняется. Может поэтому и падает.
Для любознательных. Почему именно так реализовано. Есть файлики, в которых что-то и как-то считается (назовём их прайсы) и из всего этого интересен только результат расчетов. Фактически одна ячейка, которая соответствует определенному артикулу (или несколько, если внутри файла считаются несколько артикулов). Вот её и нужно подтянуть в итоговый файл. Причем ранее посчитанный прайс больше не меняется, а если надо что-то поменять, то создаются новые прайсы (копированием старого) и переподключаются к итоговому документу. В результате всегда можно посмотреть, а что было раньше (история типа).
При попытке сохранить общий документ зачастую пользователь получает ошибку что документ "заблокирован" и начинает страшно тупить: "что же ему теперь делать?". Хочется не оставлять его наедине с этой ошибкой.
В коде ниже строчка "val = 1 / 0" генерирует ошибку. Проблема в том, что на первый раз все срабатывает штатно, но при попытке повторить "неудачное сохранение" уже выскакивает родное окно обработчика ошибок, а вот его-то видеть и не хотелось. Прошу подсказать возможные пути решения задачи. Если есть альтернативные работающие варианты, то еще лучше.
Код
Sub badSave()
Dim saveRes As Boolean
saveRes = True
eh:
If Not saveRes Then
If Not MsgBox("Не удалось. Попробуем еще раз?", vbYesNo) Then Exit Sub
End If
On Error GoTo eh
saveRes = False
Dim val: val = 1 / 0 ' = error save; при второй попытке окно ошибки все таки появляется :(
saveRes = True
On Error GoTo 0
End Sub
Добрый день. Есть надстройка. В какой-то момент заметил странное поведение при сохранении. Провел эксперимент. Сохранил ее (не изменяя!!!) несколько раз подряд с интервалом в несколько секунд. Результат ниже. Чем подобное можно объяснить? Правильнее бы наверное звучало "как такое вообще может быть?".
Это не для каких-л целей, а просто поделился неочевидным моментом.
Даже в справке написано размыто.Три раза прочитал, но так и не понял для какой цели так было сделано и можно ли из этого выжать что-н интересное сейчас.
Злой вы какой-то. Раз люди просят, значит к их модели стандартный вариант исполнения не применим по каким-то причинам. Победил через Validation.Modify + Worksheet_Change.
Добрый день. Вроде не нашел поиском подобных тем. Требуется все значения, которые могу быть в выпадающем списке, указать в одной ячейке. Возможно ли это? Указать список как значение именованной константы, тоже не вышло.
Имелось ввиду другое. Надо было прояснить. К примеру в excel добустимо использовать xlam без регистрации в системе. А вот DLL сначала нужно зарегистрировать, а у меня на рабочем компе админских прав нет.
Соль в том что для outlook свои надстройки, а для excel свои. Соответственно нельзя использовать один общий файл как надстройку для обоих приложений, хотя и те, и другие написаны на VBA. Приходится дублировать один и тот же код и туда, и туда, что крайне проблематично. Хочется в одном файлике надстройки всё поправить и пользоваться сразу везде. При подключении надстройки через tools-referenses-browse можно заметить, что допустимо подключать не только xlam (у excel к примеру). Есть и другие допустимые типы файлов. И в этом списке есть общие для двух приложений расширения (olb, tlb, dll, exe), т.е. всё же есть решение. Знатоки, внимание вопрос. На чем и как проще всего написать общую для обоих приложений надстройку?
Упростил до примитивного. Результат тот же. Книга3 всегда остается открытой.
Книга1 - исходный документ. Он запускает Книга2, тот в свою очередь Книга3. При закрытии Книга1 должна сначала закрыться Книга3, потом Книга2 и потом сама Книга1.
P.S. Запихал в BeforeClose Книги3 один msgbox. Так вот выяснилось, что события в книге3 не срабатывают при закрытии, а вот при открытии все срабатывает.
По F8 пробегал. Всё ровно в нужном порядке работает (как мне кажется).
Цитата
Дмитрий(The_Prist) Щербаков написал: Или в krud в цикле по книгам ставьте Application.EnableEvents = false. Только в true по окончании процедуры вернуть не забудьте. И проверьте - будет ли от этого эффект.
Не помогло. На скрине следующий шаг после закрытия. Книга на месте.
123.xlsm - базовый файл. Открываем именно его. Он в свою очередь открывает еще 2 файла (kruc.xlam и krud.xlsm). В файле krud.xlsm указаны прайсы, которые тот должен открыть в свою очередь.
Открывается всё прекрасно. Как надо. А вот при закрытии ни один из прайсов не закрывается. Понять не могу почему. Нужна помощь светлых голов. В файле krud.xlsm есть строчка:
Код
Workbooks(arr(ub)).Close False ' если закрыть 123.xlsm, то эта строчка не отработает
sokol92 написал: Алгоритм работы функции рабочего листа CountIf
Ок. Про 1 понятно. Спасибо.
Почему 2 возвращает false тогда?
Код
worksheetfunction.countif(selection, ">0")
Внутри скобок выражение возвращает false, поэтому countif возвращает 0. Почему false то? По логике первого примера должно быть true. Перечитал справку, не нашел там ничего похожего.
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "". Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.
В ячейке R3C5 живёт "" (пустая строка). Выбираем ее. Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось. Вопрос "почему так?".
Nordheim написал: Нажал раз 50 не сработало, потому что стоит "On Error Resume Next"
Не поэтому, а потому что событие срабатывает при изменении значения, а изменения не происходит. Это тоже самое, что выбрать "5", а потом снова выбрать "5". Изменения нет, событие вызвано не будет.
Во вложении вариант 2 (просто чуть юзабельнее). Самое интересное, что при первом клике на кнопку событие срабатывает, а вот если сразу нажать еще раз, то уже не срабатывает. оно работает не так как надо (см. картинку). Оно не сбрасывает текущее значение, а тупо чистит список данных. А надо именно сбросить.