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

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

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

Win7 sp1 x32
Выпадающий список, все варианты значений которого перечислены в одной ячейке.
 
Добрый день. Вроде не нашел поиском подобных тем.
Требуется все значения, которые могу быть в выпадающем списке, указать в одной ячейке.
Возможно ли это?
Указать список как значение именованной константы, тоже не вышло.
Excel + Outlook. Как сделать общую надстройку?
 
Соль в том что для outlook свои надстройки, а для excel свои. Соответственно нельзя использовать один общий файл как надстройку для обоих приложений, хотя и те, и другие написаны на VBA. Приходится дублировать один и тот же код и туда, и туда, что крайне проблематично. Хочется в одном файлике надстройки всё поправить и пользоваться сразу везде.
При подключении надстройки через tools-referenses-browse можно заметить, что допустимо подключать не только xlam (у excel к примеру). Есть и другие допустимые типы файлов. И в этом списке есть общие для двух приложений расширения (olb, tlb, dll, exe), т.е. всё же есть решение.
Знатоки, внимание вопрос. На чем и как проще всего написать общую для обоих приложений надстройку?
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
 
Привет всем.

В ячейке R3C5 живёт "" (пустая строка). Выбираем ее.
Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось.
Вопрос "почему так?".
Проблема. Срабатывание события ComboBox1_Change при вызове ComboBox1.Clear, Application.EnableEvents = False не помогает
 
Добрый день.

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


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

Как так?
Как выгружать надстройку принудительно, если на нее не ссылается ни один документ?
 


Ситуация следующая:
В сетевой папке на сервере лежит документ. Этот документ ссылается (reference) на другой (надстройка xla).
При открытии этого документа автоматом подтягивается и второй, но он скрыт ясное дело.

Далее при закрытии документа первый выгружается, а вот второй нет. Надстройка как висела так и висит. И выгрузится она только тогда, когда будет закрыто приложение.
Хотя больше нет документов, у которых есть reference на него.

Получается такая ситуация, что я как разработчик не могу теперь этот файл удалить или внести в него правки, т.к. у какого-то пользователя он до сих пор открыт. И фиг пойми кто это.

Хотелось бы использовать этот код в первом файле:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.DisplayAlerts = False
    Workbooks("klist.xla").Close False
End Sub


Но понятно, что он не даст ее выгрузить, т.к. он сам еще не закрыт, а вот Workbook_AfterClose не существует.

Как быть? Как выгрузить xla, на которую нет reference ни у одного документа?
Формула подсчета количества уникальных значений в столбце с учетом видимости ячейки.
 
Сделана на базе этого:
https://www.planetaexcel.ru/techniques/14/187/
Но с двумя отличиями:
1. пустая ячейка - тоже уникальное значение (по ссылке она не считается за уникальное значение, просто игнорируется)
2. есть учет скрытых ячеек, т.е. если ячейка скрыта, то ее значение не будет учитываться, а будет показано только кол-во уникальных ВИДИМЫХ значений в столбце (очень удобно для умной таблицы)

На картинке ниже видно, что посчиталось 8 уникальных значений.
Проблема в том, что при использовании фильтра иногда формула считает, а иногда не считает.
Закономерности я не нашел.
Вот и обращаюсь к вам за советом.

К примеру выбираю первые 2 галочки и ошибка есть:

Или выбираю первые 3 галочки и ошибки нет:

Собственно прошу помочь разобраться в проблеме.
VBA. Неверно считается кол-во столбцов, range("C5:E5,G5,I5:M5").columns.count
 
Код
debug.Print range("C5:E5,G5,I5:M5").columns.count
Ожидается 9, выдает 3.
Почему?
И как получить 9?
Хочу из первой книги макросом открыть вторую книгу, но вторая открывается только для чтения, А надо чтобы открывалась как обычно
 
Сохраняем это добро на диске С: в папке Excel, чтобы получилось так:
C:\Excel\Расчёт - Прайс.xlsm (будем называть это расчётом)
C:\Excel\Прайс.xlsm (а это прайсом)

При запуске расчёта в ячейке А1 выпадающий список не работает, т.к. данные берутся из прайса.
Для этого есть кнопка "Подгрузить прайс". После ей нажатия фоном открывается прайс. Его просто не видно, он скрыт.
Если есть желание на него посмотреть, то тыкаем "Показать прайс". В нём видим данные, которые и "выпадают" в выпадающем списке. Очень бы хотелось добавить/изменить/удалить данные, но он почему-то открывается в режиме только для чтения. А вот очень бы хотелось, чтобы он нормально открывался. Не могу понять почему он так коряво открывается. Пробовал менять права на документ, иногда запускалось нормально иногда нет, короче закономерности не обнаружил. Есть у кого-н какие-н варианты решения проблемы?

Для понимания. Хочу получить следующее: есть прайс, есть расчёт. Расчётов может быть хоть сколько, но прайс один. Хочу с помощью расчёта к примеру посчитать клиенту стоимость изделия и, если вдруг обнаруживаю неверную цену или надо ещё позицию добавить, то "показываю" (т.к. он скрыт) прайс, добавляю позицию, обновляю цену, затем тыкаю кнопку "Закрыть прайс", а макрос под этой кнопкой сохраняет его и опять скрывает. На данном этапе вопрос с сохранением внесённых изменений открыт. Не могу это победить.
Вставка объекта, не привязанного к положению в таблице (типа свободная ячейка), но со значением из этой таблицы
 

В примере показана вставка объекта WordArt. Необходимо, чтобы при изменении значения в ячейке, WordArt тоже поменялся. Здесь просто озвучен принцип. Это не обязательно должен быть именно WordArt. Что угодно, лишь бы работало по этому принципу (если вообще что-то такое существует).

Суть такая: хочу вставить чертеж изделия с проставленными размерами (просто стрелки без цифр), а поверх картинки расположить вот такие "размеры".

Соответственно, когда у меня будут другие размеры моей коробушки, то я сделаю новый документ, просто изменив габаритные размеры, а на чертеже все само должно поменяться.

Вы конечно можете предложить ставить размеры по краям, и в ячейках рядом записывать нужный размер, но это не вариант. Чертежей немало. Подгонять таким образом ячейки каждый раз утомительно. Да и не всегда есть возможность ставить размеры по краям. А делать рисунки прозрачными, потом колдовать с заливкой ячеек... Ну это перебор. Оно того не стоит.

А вот вставка подобных элементов очень бы выручила. Ну или чего-н похожего, что можно было бы таскать по листу, крутить и прочее.
Страницы: 1
Наверх