Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
 
Расходимся. Сам спросил - сам ответил. Убрал "[]" из пути к файлу и всё полетело. Делал по аналогии с тем, когда ручками всё тоже самое делаешь. И оно там ставило "[]". Ну навеное "так надо" подумал я. А оказывается не надо. И даже файл с пробелами в имени отработал норм. А форум то помог)

Изменено: kefirko - 20.02.2024 07:19:05
Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
 
Предположение, что с одной и той же книгой есть несколько связей скорее всего ошибочно, т.к. в диспетчере связей четко указано, что связь есть только с одной книгой. Тогда не очень понятно почему формула исправляется по-разному.
Изменено: kefirko - 20.02.2024 06:48:29
Обновление цен из других книг Excel, Падает Excel при реализации задачи через связи с другими книгами
 
Добрый день.
Пытаюсь сделать обновление цен из других книг, используя связи. Проблема в том, что почему-то постоянно вылетает Excel.

В прайсах у нужных ячеек заданы именованные диапазоны в разрезе книги (уникальные для книги, а не для листа). И задача файла сборщика обращаться по этим ИД и получать цены.
Поскольку у меня постоянно всё вылетает, то я добавил пробел перед формулами, чтобы хотябы видеть промежуточный результат. Если глазами проверить формулы, то всё корректно. При попытке ручками убирать пробел перед "=" (чтобы Excel увидел связь), то цены обновляются, но только у первой строки. Дальше все падает. Причем падает всегда на разной строке, т.е. может у первых двух цену обновить, а упасть на третьей, а может у четырёх и на пятой упасть.
Заметил еще такую штуку, что при ручном удалении пробелов перед "=" формула у одного и того же источника меняется, хотя по логике должна отличаться только окончанием, т.е. в той её части, где уже идёт указание на определенный ИД книги.



Сложилось такое ощущение, что книга должна прикрепиться один раз и обслужить все свои связи за один раз (тогда бы путь был у всех одинаковый), а она с каждой строкой прикрепляется каждый раз заново и на каждую строку условно "создаётся своя отдельная связь" (не знаю как это по-человечески озвучить) и поэтому форма записи меняется. Может поэтому и падает.

По ссылке видео (не вставляет видео с ЯД местный форум):
https://disk.yandex.ru/i/YZFmPzwk_vHg_w

По ссылке все файлы (не проходит архив по размеру загружаемого файла):
https://disk.yandex.ru/d/ax5FWYbD1hy3Gg

Для любознательных. Почему именно так реализовано.
Есть файлики, в которых что-то и как-то считается (назовём их прайсы) и из всего этого интересен только результат расчетов. Фактически одна ячейка, которая соответствует определенному артикулу (или несколько, если внутри файла считаются несколько артикулов). Вот её и нужно подтянуть в итоговый файл. Причем ранее посчитанный прайс больше не меняется, а если надо что-то поменять, то создаются новые прайсы (копированием старого) и переподключаются к итоговому документу. В результате всегда можно посмотреть, а что было раньше (история типа).
Изменено: kefirko - 20.02.2024 06:39:17
Попытка обхода ошибки блокировки при сохранении общего документа
 
Добрый день.

При попытке сохранить общий документ зачастую пользователь получает ошибку что документ "заблокирован" и начинает страшно тупить: "что же ему теперь делать?". Хочется не оставлять его наедине с этой ошибкой.

В коде ниже строчка "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
Изменено: kefirko - 14.06.2022 13:51:44
Разный размер файла xlam при сохранении, Сохранял с интервалом в несколько секунд, прошу объяснить результат
 
Были подобные мысли... Большое спасибо за аргументацию.
Разный размер файла xlam при сохранении, Сохранял с интервалом в несколько секунд, прошу объяснить результат
 
Добрый день. Есть надстройка. В какой-то момент заметил странное поведение при сохранении. Провел эксперимент. Сохранил ее (не изменяя!!!) несколько раз подряд с интервалом в несколько секунд. Результат ниже. Чем подобное можно объяснить? Правильнее бы наверное звучало "как такое вообще может быть?".

не могу корректно вставить картинку, вставляет кракозябры, поэтому см. картинку по ссылке
Изменено: kefirko - 14.04.2022 08:12:17
Ошибка при обращении методом Application.Run к макросу с определенным именем
 
Цитата
написал:
Подождем, может пояснит
Это не для каких-л целей, а просто поделился неочевидным моментом.

Даже в справке написано размыто.Три раза прочитал, но так и не понял для какой цели так было сделано и можно ли из этого выжать что-н интересное сейчас.
Изменено: kefirko - 01.02.2022 18:00:40
Ошибка при обращении методом Application.Run к макросу с определенным именем
 
Добрый день.
Вроде правила именования процедур не нарушены, но она не вызывается (см. вложение).

Win7 sp1 x32
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
 
Злой вы какой-то. Раз люди просят, значит к их модели стандартный вариант исполнения не применим по каким-то причинам.
Победил через Validation.Modify + Worksheet_Change.
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
 
Если возможно, то прошу поделиться как это сделать.
Формулами массива еще попробовал и так, и сяк. Не получается.
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
 
Добрый день. Вроде не нашел поиском подобных тем.
Требуется все значения, которые могу быть в выпадающем списке, указать в одной ячейке.
Возможно ли это?
Указать список как значение именованной константы, тоже не вышло.
Excel + Outlook. Как сделать общую надстройку?
 
Цитата
kefirko написал:
проще всего
Имелось ввиду другое. Надо было прояснить.
К примеру в excel добустимо использовать xlam без регистрации в системе.
А вот DLL сначала нужно зарегистрировать, а у меня на рабочем компе админских прав нет.
Excel + Outlook. Как сделать общую надстройку?
 
Соль в том что для outlook свои надстройки, а для excel свои. Соответственно нельзя использовать один общий файл как надстройку для обоих приложений, хотя и те, и другие написаны на VBA. Приходится дублировать один и тот же код и туда, и туда, что крайне проблематично. Хочется в одном файлике надстройки всё поправить и пользоваться сразу везде.
При подключении надстройки через tools-referenses-browse можно заметить, что допустимо подключать не только xlam (у excel к примеру). Есть и другие допустимые типы файлов. И в этом списке есть общие для двух приложений расширения (olb, tlb, dll, exe), т.е. всё же есть решение.
Знатоки, внимание вопрос. На чем и как проще всего написать общую для обоих приложений надстройку?
Workbooks().Close False ' не отрабатывает, при том что объект существует
 
Цитата
RAN написал:
где-то глубоко в недрах Excel
Похоже на то. Спасибо за ответ.

Цитата
Дмитрий(The_Prist) Щербаков написал:
по сути не совсем корректно написано
Да. Согласен. Не очень понятно. Надо именно Книга1 закрывать и ждать когда отработает событие из Книга3.

Спасибо всем.
Workbooks().Close False ' не отрабатывает, при том что объект существует
 
У меня пусто. Нечему влиять. См. ниже.

Код
MsgBox "Книга 3 закрывается"
Срабатывает? Окно выскакивает? Точно?
Изменено: kefirko - 22.10.2020 10:34:44
Workbooks().Close False ' не отрабатывает, при том что объект существует
 
Упростил до примитивного. Результат тот же. Книга3 всегда остается открытой.

Книга1 - исходный документ. Он запускает Книга2, тот в свою очередь Книга3.
При закрытии Книга1 должна сначала закрыться Книга3, потом Книга2 и потом сама Книга1.

P.S. Запихал в BeforeClose Книги3 один msgbox. Так вот выяснилось, что события в книге3 не срабатывают при закрытии, а вот при открытии все срабатывает.
Workbooks().Close False ' не отрабатывает, при том что объект существует
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
может потому, что в 123 прописано при закрытии так же закрыть и krud.xlsm?
Так всё же логично!?
123 пытается закрыть krud. В krud отрабатывает BeforeClose и в свою очередь закрывает 4 прайса. После этого закрывается сам.

Цитата
Дмитрий(The_Prist) Щербаков написал:
Вы там с порядком событий как-то разберитесь, что ли...
По F8 пробегал. Всё ровно в нужном порядке работает (как мне кажется).

Цитата
Дмитрий(The_Prist) Щербаков написал:
Или в krud в цикле по книгам ставьте Application.EnableEvents = false. Только в true по окончании процедуры вернуть не забудьте. И проверьте - будет ли от этого эффект.
Не помогло. На скрине следующий шаг после закрытия. Книга на месте.
Workbooks().Close False ' не отрабатывает, при том что объект существует
 
123.xlsm - базовый файл. Открываем именно его.
Он в свою очередь открывает еще 2 файла (kruc.xlam и krud.xlsm).
В файле krud.xlsm указаны прайсы, которые тот должен открыть в свою очередь.

Открывается всё прекрасно. Как надо. А вот при закрытии ни один из прайсов не закрывается. Понять не могу почему. Нужна помощь светлых голов.
В файле krud.xlsm есть строчка:
Код
Workbooks(arr(ub)).Close False ' если закрыть 123.xlsm, то эта строчка не отработает

Она не отрабатывает, хоть объект и есть.

123.xlsm - клиентский файл
krud.xlsm - файл с данными
kruс.xlam - файл с макросами
Прайс1.xls - прайс
Прайс2.xlsx - прайс
Прайс3.xlsm - прайс
Прайс4.xlsb - прайс
О сравнении текста и числа в VBA
 
Гранд мерси
О сравнении текста и числа в VBA
 
Цитата
sokol92 написал:
Алгоритм работы функции рабочего листа CountIf
Ок. Про 1 понятно. Спасибо.

Почему 2 возвращает false тогда?
Код
worksheetfunction.countif(selection, ">0")

Внутри скобок выражение возвращает false, поэтому countif возвращает 0.
Почему false то? По логике первого примера должно быть true. Перечитал справку, не нашел там ничего похожего.
Код
? selection > 0
True ' понятно (спасибо sokol92)

? selection > "0"
False ' понятно

? selection > ""
False ' понятно

? WorksheetFunction.CountIf(Selection, ">""""")
 0 ' понятно

? WorksheetFunction.CountIf(Selection, ">0")
 0 ' непонятно
О сравнении текста и числа в VBA
 
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "".
Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.

true
О сравнении текста и числа в VBA
 
Нет, при сравнении берется не формула, а значение ячейки. А значение там именно "".

Ну и ошибки нет. Приведение типов, что в первом что во втором случае отрабатывает, но видимо как-то по-разному.
О сравнении текста и числа в VBA
 
Привет всем.

В ячейке R3C5 живёт "" (пустая строка). Выбираем ее.
Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось.
Вопрос "почему так?".
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Цитата
RAN написал:
влияет только на события ячеек листа
Спасибо за разъяснение
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Цитата
Nordheim написал:
Нажал раз 50 не сработало, потому что стоит "On Error Resume Next"
Не поэтому, а потому что событие срабатывает при изменении значения, а изменения не происходит. Это тоже самое, что выбрать "5", а потом снова выбрать "5". Изменения нет, событие вызвано не будет.
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Nordheim, да, так работает как надо, но вопрос по срабатыванию события вопреки запрету остаётся открытым.

Похожая беда: Иностранцы
Изменено: kefirko - 21.08.2020 04:56:02
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Nordheim, спасибо. Но спортивный интерес остался.

Во вложении вариант 2 (просто чуть юзабельнее).
Самое интересное, что при первом клике на кнопку событие срабатывает, а вот если сразу нажать еще раз, то уже не срабатывает. оно работает не так как надо (см. картинку). Оно не сбрасывает текущее значение, а тупо чистит список данных. А надо именно сбросить.
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Nordheim, спасибо. Но спортивный интерес остался.

Во вложении вариант 2 (просто чуть юзабельнее).

Самое интересное, что при первом клике на кнопку событие срабатывает, а вот если сразу нажать еще раз, то уже не срабатывает.
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Добрый день.

Код
    Application.EnableEvents = False
    
    Me.ComboBox1.Clear
    
    Application.EnableEvents = True


Даже при отключении событий событие ComboBox1_Change отрабатывает. В результате мы видим пустой msgbox, а его быть не должно.

Как так?
Формула подсчета количества уникальных значений в столбце с учетом видимости ячейки.
 
Скачайте кто-н, погоняйте у себя фильтры. Может это еще и от версии как-то зависит. Вроде ровно всё, но работает почему-то криво.
Страницы: 1 2 След.
Наверх