Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
Пользователь
Сообщений: Регистрация: 18.02.2014
20.02.2024 07:16:46
Расходимся. Сам спросил - сам ответил. Убрал "[]" из пути к файлу и всё полетело. Делал по аналогии с тем, когда ручками всё тоже самое делаешь. И оно там ставило "[]". Ну навеное "так надо" подумал я. А оказывается не надо. И даже файл с пробелами в имени отработал норм. А форум то помог)
Изменено: - 20.02.2024 07:19:05
Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
Пользователь
Сообщений: Регистрация: 18.02.2014
20.02.2024 06:48:02
Предположение, что с одной и той же книгой есть несколько связей скорее всего ошибочно, т.к. в диспетчере связей четко указано, что связь есть только с одной книгой. Тогда не очень понятно почему формула исправляется по-разному.
Изменено: - 20.02.2024 06:48:29
Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
Пользователь
Сообщений: Регистрация: 18.02.2014
20.02.2024 06:37:17
Добрый день. Пытаюсь сделать обновление цен из других книг, используя связи. Проблема в том, что почему-то постоянно вылетает Excel.
В прайсах у нужных ячеек заданы именованные диапазоны в разрезе книги (уникальные для книги, а не для листа). И задача файла сборщика обращаться по этим ИД и получать цены. Поскольку у меня постоянно всё вылетает, то я добавил пробел перед формулами, чтобы хотябы видеть промежуточный результат. Если глазами проверить формулы, то всё корректно. При попытке ручками убирать пробел перед "=" (чтобы Excel увидел связь), то цены обновляются, но только у первой строки. Дальше все падает. Причем падает всегда на разной строке, т.е. может у первых двух цену обновить, а упасть на третьей, а может у четырёх и на пятой упасть. Заметил еще такую штуку, что при ручном удалении пробелов перед "=" формула у одного и того же источника меняется, хотя по логике должна отличаться только окончанием, т.е. в той её части, где уже идёт указание на определенный ИД книги.
Сложилось такое ощущение, что книга должна прикрепиться один раз и обслужить все свои связи за один раз (тогда бы путь был у всех одинаковый), а она с каждой строкой прикрепляется каждый раз заново и на каждую строку условно "создаётся своя отдельная связь" (не знаю как это по-человечески озвучить) и поэтому форма записи меняется. Может поэтому и падает.
По ссылке видео (не вставляет видео с ЯД местный форум):
По ссылке все файлы (не проходит архив по размеру загружаемого файла):
Для любознательных. Почему именно так реализовано. Есть файлики, в которых что-то и как-то считается (назовём их прайсы) и из всего этого интересен только результат расчетов. Фактически одна ячейка, которая соответствует определенному артикулу (или несколько, если внутри файла считаются несколько артикулов). Вот её и нужно подтянуть в итоговый файл. Причем ранее посчитанный прайс больше не меняется, а если надо что-то поменять, то создаются новые прайсы (копированием старого) и переподключаются к итоговому документу. В результате всегда можно посмотреть, а что было раньше (история типа).
Изменено: - 20.02.2024 06:39:17
Попытка обхода ошибки блокировки при сохранении общего документа
Пользователь
Сообщений: Регистрация: 18.02.2014
14.06.2022 13:44:43
Добрый день.
При попытке сохранить общий документ зачастую пользователь получает ошибку что документ "заблокирован" и начинает страшно тупить: "что же ему теперь делать?". Хочется не оставлять его наедине с этой ошибкой.
В коде ниже строчка "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
Изменено: - 14.06.2022 13:51:44
Разный размер файла xlam при сохранении, Сохранял с интервалом в несколько секунд, прошу объяснить результат
Пользователь
Сообщений: Регистрация: 18.02.2014
15.04.2022 08:08:45
Были подобные мысли... Большое спасибо за аргументацию.
Разный размер файла xlam при сохранении, Сохранял с интервалом в несколько секунд, прошу объяснить результат
Пользователь
Сообщений: Регистрация: 18.02.2014
14.04.2022 08:06:28
Добрый день. Есть надстройка. В какой-то момент заметил странное поведение при сохранении. Провел эксперимент. Сохранил ее (не изменяя!!!) несколько раз подряд с интервалом в несколько секунд. Результат ниже. Чем подобное можно объяснить? Правильнее бы наверное звучало "как такое вообще может быть?".
Изменено: - 14.04.2022 08:12:17
Ошибка при обращении методом Application.Run к макросу с определенным именем
Пользователь
Сообщений: Регистрация: 18.02.2014
01.02.2022 17:59:12
Цитата
написал: Подождем, может пояснит
Это не для каких-л целей, а просто поделился неочевидным моментом.
Даже в справке написано размыто.Три раза прочитал, но так и не понял для какой цели так было сделано и можно ли из этого выжать что-н интересное сейчас.
Изменено: - 01.02.2022 18:00:40
Ошибка при обращении методом Application.Run к макросу с определенным именем
Пользователь
Сообщений: Регистрация: 18.02.2014
29.01.2022 18:17:42
Добрый день. Вроде правила именования процедур не нарушены, но она не вызывается (см. вложение).
Win7 sp1 x32
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
Пользователь
Сообщений: Регистрация: 18.02.2014
08.01.2022 18:17:29
Злой вы какой-то. Раз люди просят, значит к их модели стандартный вариант исполнения не применим по каким-то причинам. Победил через Validation.Modify + Worksheet_Change.
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
Пользователь
Сообщений: Регистрация: 18.02.2014
08.01.2022 16:51:14
Если возможно, то прошу поделиться как это сделать. Формулами еще попробовал и так, и сяк. Не получается.
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
Пользователь
Сообщений: Регистрация: 18.02.2014
08.01.2022 16:39:37
Добрый день. Вроде не нашел поиском подобных тем. Требуется все значения, которые могу быть в выпадающем списке, указать в одной ячейке. Возможно ли это? Указать список как значение именованной константы, тоже не вышло.
Имелось ввиду другое. Надо было прояснить. К примеру в excel добустимо использовать xlam без регистрации в системе. А вот DLL сначала нужно зарегистрировать, а у меня на рабочем компе админских прав нет.
Excel + Outlook. Как сделать общую надстройку?
Пользователь
Сообщений: Регистрация: 18.02.2014
24.08.2021 18:00:46
Соль в том что для outlook свои надстройки, а для excel свои. Соответственно нельзя использовать один общий файл как надстройку для обоих приложений, хотя и те, и другие написаны на VBA. Приходится дублировать один и тот же код и туда, и туда, что крайне проблематично. Хочется в одном файлике надстройки всё поправить и пользоваться сразу везде. При подключении надстройки через tools-referenses-browse можно заметить, что допустимо подключать не только xlam (у excel к примеру). Есть и другие допустимые типы файлов. И в этом списке есть общие для двух приложений расширения (olb, tlb, dll, exe), т.е. всё же есть решение. Знатоки, внимание вопрос. На чем и как проще всего написать общую для обоих приложений надстройку?
Workbooks().Close False ' не отрабатывает, при том что объект существует
Да. Согласен. Не очень понятно. Надо именно Книга1 закрывать и ждать когда отработает событие из Книга3.
Спасибо всем.
Workbooks().Close False ' не отрабатывает, при том что объект существует
Пользователь
Сообщений: Регистрация: 18.02.2014
22.10.2020 10:30:08
У меня пусто. Нечему влиять. См. ниже.
Код
MsgBox "Книга 3 закрывается"
Срабатывает? Окно выскакивает? Точно?
Изменено: - 22.10.2020 10:34:44
Workbooks().Close False ' не отрабатывает, при том что объект существует
Пользователь
Сообщений: Регистрация: 18.02.2014
22.10.2020 10:13:19
Упростил до примитивного. Результат тот же. Книга3 всегда остается открытой.
Книга1 - исходный документ. Он запускает Книга2, тот в свою очередь Книга3. При закрытии Книга1 должна сначала закрыться Книга3, потом Книга2 и потом сама Книга1.
P.S. Запихал в BeforeClose Книги3 один msgbox. Так вот выяснилось, что события в книге3 не срабатывают при закрытии, а вот при открытии все срабатывает.
Workbooks().Close False ' не отрабатывает, при том что объект существует
Пользователь
Сообщений: Регистрация: 18.02.2014
22.10.2020 04:57:16
Цитата
Дмитрий(The_Prist) Щербаков написал: может потому, что в 123 прописано при закрытии так же закрыть и krud.xlsm?
Так всё же логично!? 123 пытается закрыть krud. В krud отрабатывает BeforeClose и в свою очередь закрывает 4 прайса. После этого закрывается сам.
По F8 пробегал. Всё ровно в нужном порядке работает (как мне кажется).
Цитата
Дмитрий(The_Prist) Щербаков написал: Или в krud в цикле по книгам ставьте Application.EnableEvents = false. Только в true по окончании процедуры вернуть не забудьте. И проверьте - будет ли от этого эффект.
Не помогло. На скрине следующий шаг после закрытия. Книга на месте.
Workbooks().Close False ' не отрабатывает, при том что объект существует
Пользователь
Сообщений: Регистрация: 18.02.2014
21.10.2020 20:48:38
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. Перечитал справку, не нашел там ничего похожего.
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "". Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.
true
О сравнении текста и числа в VBA
Пользователь
Сообщений: Регистрация: 18.02.2014
26.09.2020 12:56:16
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "".
Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.
О сравнении текста и числа в VBA
Пользователь
Сообщений: Регистрация: 18.02.2014
26.09.2020 12:47:18
Привет всем.
В ячейке R3C5 живёт "" (пустая строка). Выбираем ее. Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось. Вопрос "почему так?".
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
Пользователь
Сообщений: Регистрация: 18.02.2014
21.08.2020 04:54:11
Цитата
Nordheim написал: Нажал раз 50 не сработало, потому что стоит "On Error Resume Next"
Не поэтому, а потому что событие срабатывает при изменении значения, а изменения не происходит. Это тоже самое, что выбрать "5", а потом снова выбрать "5". Изменения нет, событие вызвано не будет.
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
Пользователь
Сообщений: Регистрация: 18.02.2014
21.08.2020 04:51:40
Nordheim, да, так работает как надо, но вопрос по срабатыванию события вопреки запрету остаётся открытым.
Похожая беда:
Изменено: - 21.08.2020 04:56:02
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
Во вложении вариант 2 (просто чуть юзабельнее). Самое интересное, что при первом клике на кнопку событие срабатывает, а вот если сразу нажать еще раз, то уже не срабатывает. оно работает не так как надо (см. картинку). Оно не сбрасывает текущее значение, а тупо чистит список данных. А надо именно сбросить.
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает