Добрый день. Пытаюсь сделать обновление цен из других книг, используя связи. Проблема в том, что почему-то постоянно вылетает 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
Добрый день. Есть надстройка. В какой-то момент заметил странное поведение при сохранении. Провел эксперимент. Сохранил ее (не изменяя!!!) несколько раз подряд с интервалом в несколько секунд. Результат ниже. Чем подобное можно объяснить? Правильнее бы наверное звучало "как такое вообще может быть?".
Добрый день. Вроде не нашел поиском подобных тем. Требуется все значения, которые могу быть в выпадающем списке, указать в одной ячейке. Возможно ли это? Указать список как значение именованной константы, тоже не вышло.
Соль в том что для outlook свои надстройки, а для excel свои. Соответственно нельзя использовать один общий файл как надстройку для обоих приложений, хотя и те, и другие написаны на VBA. Приходится дублировать один и тот же код и туда, и туда, что крайне проблематично. Хочется в одном файлике надстройки всё поправить и пользоваться сразу везде. При подключении надстройки через tools-referenses-browse можно заметить, что допустимо подключать не только xlam (у excel к примеру). Есть и другие допустимые типы файлов. И в этом списке есть общие для двух приложений расширения (olb, tlb, dll, exe), т.е. всё же есть решение. Знатоки, внимание вопрос. На чем и как проще всего написать общую для обоих приложений надстройку?
123.xlsm - базовый файл. Открываем именно его. Он в свою очередь открывает еще 2 файла (kruc.xlam и krud.xlsm). В файле krud.xlsm указаны прайсы, которые тот должен открыть в свою очередь.
Открывается всё прекрасно. Как надо. А вот при закрытии ни один из прайсов не закрывается. Понять не могу почему. Нужна помощь светлых голов. В файле krud.xlsm есть строчка:
Код
Workbooks(arr(ub)).Close False ' если закрыть 123.xlsm, то эта строчка не отработает
В ячейке R3C5 живёт "" (пустая строка). Выбираем ее. Selection > 0 будет true, т.е.условие выполнилось, а вот Worksheetfunction.countif(selection, ">0") будет 0, т.е. условие не выполнилось. Вопрос "почему так?".
Ситуация следующая: В сетевой папке на сервере лежит документ. Этот документ ссылается (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 галочки и ошибки нет: Собственно прошу помочь разобраться в проблеме.
Сохраняем это добро на диске С: в папке Excel, чтобы получилось так: C:\Excel\Расчёт - Прайс.xlsm (будем называть это расчётом) C:\Excel\Прайс.xlsm (а это прайсом)
При запуске расчёта в ячейке А1 выпадающий список не работает, т.к. данные берутся из прайса. Для этого есть кнопка "Подгрузить прайс". После ей нажатия фоном открывается прайс. Его просто не видно, он скрыт. Если есть желание на него посмотреть, то тыкаем "Показать прайс". В нём видим данные, которые и "выпадают" в выпадающем списке. Очень бы хотелось добавить/изменить/удалить данные, но он почему-то открывается в режиме только для чтения. А вот очень бы хотелось, чтобы он нормально открывался. Не могу понять почему он так коряво открывается. Пробовал менять права на документ, иногда запускалось нормально иногда нет, короче закономерности не обнаружил. Есть у кого-н какие-н варианты решения проблемы?
Для понимания. Хочу получить следующее: есть прайс, есть расчёт. Расчётов может быть хоть сколько, но прайс один. Хочу с помощью расчёта к примеру посчитать клиенту стоимость изделия и, если вдруг обнаруживаю неверную цену или надо ещё позицию добавить, то "показываю" (т.к. он скрыт) прайс, добавляю позицию, обновляю цену, затем тыкаю кнопку "Закрыть прайс", а макрос под этой кнопкой сохраняет его и опять скрывает. На данном этапе вопрос с сохранением внесённых изменений открыт. Не могу это победить.
В примере показана вставка объекта WordArt. Необходимо, чтобы при изменении значения в ячейке, WordArt тоже поменялся. Здесь просто озвучен принцип. Это не обязательно должен быть именно WordArt. Что угодно, лишь бы работало по этому принципу (если вообще что-то такое существует).
Суть такая: хочу вставить чертеж изделия с проставленными размерами (просто стрелки без цифр), а поверх картинки расположить вот такие "размеры". Соответственно, когда у меня будут другие размеры моей коробушки, то я сделаю новый документ, просто изменив габаритные размеры, а на чертеже все само должно поменяться.
Вы конечно можете предложить ставить размеры по краям, и в ячейках рядом записывать нужный размер, но это не вариант. Чертежей немало. Подгонять таким образом ячейки каждый раз утомительно. Да и не всегда есть возможность ставить размеры по краям. А делать рисунки прозрачными, потом колдовать с заливкой ячеек... Ну это перебор. Оно того не стоит.
А вот вставка подобных элементов очень бы выручила. Ну или чего-н похожего, что можно было бы таскать по листу, крутить и прочее.