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

Страницы: 1 2 След.
Динамическое позиционирование картинки на листе, Картинка привязывается к ячейке но каждый раз к другой
 
Цитата
написал:
Цитата
UsAlex написал:
Текущее актуальное название ячейки, к которой нужно прикрепить картинку, хранится в ячейке с именем "PicCell"
Selection.ShapeRange.Left = Range(Range("PicCell")).Left
Большое спасибо всем!
Ігор, ваш вариант сработал.
Я пробовал с одним Range (как комментарием выше) - не работало.

Всем здоровья, тема закрыта.
Динамическое позиционирование картинки на листе, Картинка привязывается к ячейке но каждый раз к другой
 
Приветствую.
Картинке присвоено имя "Picture1", её нужно время от времени позиционировать на листе с помощью VBA.

Вот таким кодом это получается сделать "в лоб":
ActiveSheet.Shapes.Range(Array("Picture1")).Select
Selection.ShapeRange.Left = [Q10].Left
Selection.ShapeRange.Top = [Q10].Top

Но вместо Q10 нужно в код VBA передать другое текстовое значение (название другой ячейки).
И оно время от времени меняется - меняется ячейка, к которой нужно прикрепить картинку.
Текущее актуальное название ячейки, к которой нужно прикрепить картинку, хранится в ячейке с именем "PicCell" в формате "А1".

Подскажите, пожалуйста, как корректно использовать значение ячейки PicCell в коде VBA чтобы достигнуть того же результата, который получается кодом выше "в лоб"?
Изменено: UsAlex - 10.03.2023 16:00:43
Парсер и форматирование формул (3500 знаков)
 
Спасибо, я, на самом деле, не ищу помощи в её оптимизации - расписал её здесь только чтобы любопытство можно было удовлетворить в одной ветке.
Вопрос только один - интсрумент "умного" представления чудовищно неправильных и избыточных формул.
Я не буду делать ветку с вопросом по самой формуле -- не хочу праздным образом использовать Ваше время, я уважаю его. Самообразование - личная задача каждого и просить Вас повышать мой уровень считаю неправильным.
Изменено: UsAlex - 12.03.2020 15:27:20
Парсер и форматирование формул (3500 знаков)
 
Время пересчёта не превышает неизвестных миллисекунд - никаких проблем или тормозов, вообще ничего. Это на количестве таких ячеек порядка 2000 (добавится еще тысяч 16 но попроще).

Задача:
1. в ячейке находится текстовая строка, содержащая неизвестной длины текст в формате: "дата"(ДД.ММ) + "дефис" + "числовое значение" + "пробел". Таких последовательностей может быть неизвестное количество (а может быть пусто). Это перечень результатов анализов с датами их получения.
2. в других ячейках той же строки находятся даты поступления, дата операции, дата выписки.
3. Необходимо из таких строк получать:
3.1. ближайший ко дню операции анализ из прошлого -- именно это уже успешно делает формула,
3.2. первый анализ в день операции,
3.3. второй анализ в день операции,
3.4. третий анализ в день операции,
3.5. четвёртый анализ в день операции,
3.6. последний анализ в день операции,
3.7. следующий ближайший анализ после дня операции,
3.8. последний из доступных анализов после дня операции на отрезке 5-ти дней после дня операции,
3.9. последний из доступных анализов после дня операции на отрезке от 6-го дня после дня операции до дня выписки.

Вот чтобы закончить п.3.2 - 3.9. нужно вернуться к первой формуле. Писал её я - не горжусь, но рад, что работает))

Поскольку пациентов - 2000, нужна формула.
Поскольку анализ - не один, а много, -- отсюда ДВССЫЛ чтобы работать с разными.
Когда-то (с год назад) распарсил строки анализов, транспонировал с привязкой к пациенту, обработал. Поскольку разбираться с тем решением было лень, пошёл через формулу. Она работает и "ни одного разрыва"© в расчётах нет - работает на всех 2000 пациентах.
Изменено: UsAlex - 12.03.2020 15:18:49
Парсер и форматирование формул (3500 знаков)
 
Я с ней уже работаю в Word, конечно, в ячейке неудобно будет. Поэтому - on-line, Far...

С именами особо не получится. И эта формула уже использует предварительную обработку из других ячеек; являясь, в свою очередь, частью результата - подробил уже всё.
Не с просьбой оптимизации, а для удовлетворения любопытства, вот сама формула:
Скрытый текст
Изменено: UsAlex - 12.03.2020 15:43:22
Парсер и форматирование формул (3500 знаков)
 
Могут ли уважаемые форумчане посоветовать любое решение для форматирования длиннющих формул в читабельный вид?
Есть формула на страницу А4 (3500 знаков) - хотелось бы сейчас и на будущее иметь решение для её представления в структурированном виде.
"Автоотступы" Plex, к сожалению, не справились и вылетели с ошибкой.

Возможно есть on-line сервисы или надстройки Excel или плагин для Far Manager (к примеру)?
Изменено: UsAlex - 12.03.2020 14:42:49
Спящий режим, гибернация. Отслеживание и перехват событий
 
Возможно есть готовые решения, написанные на Excel-VBA, пригодные для использования после доработки?
Спящий режим, гибернация. Отслеживание и перехват событий
 
Казанский, Ваше решение элегантно и скорее всего решает вопрос. Спасибо большое)! Буду думать над самим бизнес-процессом работы с тайм-треккером, возможно решу проблему управленческими, а не программными решениями)
Спящий режим, гибернация. Отслеживание и перехват событий
 
Пришу тайм-треккер -- учёт времени, уделённого пользователем конкретной задаче.
1. Пользователь при включении ПК (ноута) первым делом видит книгу Excel (книга в автозапуске),
2. Содержимое главного листа книги формируется динамически (список актуальных задач, лимиты времени, выделенные на них, дедлайны, комментарии, ...) во время открытия книги. Данные тянутся с файла, в который их вносит руководитель подразделения,
3. Пользователь кликом правой клавиши на определённой задаче стартует её выполнение, в этот момент Excel минимизируется в строку задач,
4. Пользователь работает в других программах над задачей,
5. При необходимости разворачивает Excel и либо кликом на той же задаче останавливает подсчёт времени либо кликом на другой задаче стартует подсчёт времени работы над новой задачей.
6. В момент завершения работы он закрывает книгу (обновлённая статистика уходит в файл руководителя подразделения).

Проблема: при закрытии крышки ноута (в нашем случае это уход в спящий режим) счётчик времени не останавливается. Вопреки тому, что пользователь не работает над задачей (работа у него исключительно за ПК), время работы над ней растёт, -- статистика нерабочая.

Соответственно, по событиям я хочу таймер останавливать и запускать. Точнее, -- при закрытии крышки просто останавливать, а при открытии -- разворачивать Excel чтобы пользователь определился над чем он планирует работать.
Изменено: UsAlex - 26.07.2018 14:43:49
Спящий режим, гибернация. Отслеживание и перехват событий
 
Коллеги, помогите, пожалуйста, советом или примером.

Нужно в VBA отслеживать события "уход в спящий режим", "уход в гибернацию", "возврат оттуда же".

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

Само приложение Excel в эти моменты неактивно, свёрнуто, -- пользователь работает в других программах, Excel в фоне.

Спасибо большое!
Изменено: UsAlex - 26.07.2018 13:29:48
"Умные таблицы": не работает автоматическое расширение диапазона
 
Добавил ActiveSheet.ListObjects(1).ListRows.Add -- понаблюдаю)
сам себе ответил)
Изменено: UsAlex - 25.07.2018 17:37:03
"Умные таблицы": не работает автоматическое расширение диапазона
 
Можно ли оживить тему? Иногда (но часто) автоматическое расширение не срабатывает. В одной таблице, под которой точно ничего нет и никогда не было. Первый из предложенных вариантов проверил -- все чеки установлены.
Причём проблема не в каких-то различных способах жать кнопки мыши или клавиатуры при начале редактирования новой строки (на которую "умная таблица" должна саморасшириться) -- эти строки добавляются программным образом через VBA по одному и тому же алгоритму. Возможно перед программным добавлением такой строки можно принудительно расширять "умную" таблицу, на всякий случай))?
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, Спасибо большое, так и сделаю! Подскажите, следующий способ (пока без массивов) годится или для этой цели есть более верный способ обращения с контролами?
Код
Dim ctrl As Control
For Each ctrl In UserForm1.Controls   
If ctrl.Tag > 0 Then      присвоение необходимой ячейке свойства ctrl.Text   
End If
Next

Изменено: UsAlex - 07.05.2017 18:58:19
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, понял Вашу идею по интерфейсу с одним полем) Недурная, в каких-то случаях, идея.

Я консервативен, разместил всё на вкладках MultiPage (пока что 8 вкладок) и поэтому читаю-пишу одним махом все поля конкретной записи. Так наглядней -- поля подписаны метками, у них различные размеры, в зависимости от объёмов вводимого текста и т.д. и т.п. с доп.возможностями к каждому роду элементов.

Просто до этого это было копирование одной строки, а теперь напрашивается массовое присваивание (считывание) значений разнородным элементам формы (коих ок.200).
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, редактирую я всё-таки записи, а не поля.
Для их корректного отображения я заменил в Вашем примере переменную iRow на передаваемый параметр i (поскольку полей у Вас в примере 4, -- добавил два контрола).
Код
Sub FillData(i As Long)
    Me.Label2.Caption = Cells(i, 1)
    Me.TextBox1.Value = Cells(i, 2)
    Me.ComboBox1.Value = Cells(i, 3)
    Me.TextBox2.Value = Cells(i, 4)
End Sub

После нажатия кнопки "ОК" процедура обработки должна записать в условные 200 колонок-полей текущие значения контролов. В ней (сравнивая с приведённым выше кодом) поменяются местами контролы и ячейки.

Просто в наших примерах несколько контролов, а у меня их ок.200, включая случаи с OptionButton.
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, о строках в Вашей процедуре FillData. Про обратный случай - где Вы увидели претензии? я только имел в виду, что кроме процедуры, в которой происходит присваивание контролам значений ячеек, будет ещё одна процедура сохранения, а это ещё + столько же строк. Обратный случай упоминался для корректного подсчёта количества необходимых строк кода. Полей у меня ок.200, поэтому дополнительного кода будет ок. 400 строк...
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, на присваивание каждому из контролов значения конкретной ячейки (либо в обратном случае) нужна отдельная, руками написанная строка.
До этого для присваивания значений контролам я просто копировал нужную строку из БД в первую строку листа (одна строка кода для отображения очередной записи БД), к ячейкам которой через ControlSource были привязаны элементы управления. А в случае необходимости (нажатие кнопки "Сохранить") копировал первую строку в необходимую строку таблицы. Да, единожды я присвоил контролам свойство ControlSource, привязав их к ячейкам.

Или я глобально не разобрался с примером?
Изменено: UsAlex - 07.05.2017 13:31:19
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, да, посмотрел, спасибо! Буду использовать и Ваш код) Там не всё работает но суть понятна - вручную присваивать значения контролам.  
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
У меня офис со всеми обновлениями.

Все ControlSource убрал, буду вручную присваивать. +200 строк на отображение, потом +200 на запись -- запутаться проще, но после отладки хоть работать будет)

Теоретически, можно организовать цикл обхода контролов (если в названии использовать цифры в конце) и последовательно присваивать значения в колонках. Но в этом случае ещё сложнее добиться уверенного контроля над кодом -- структура БД ещё "плавает" и, вполне вероятно, будет и в будущем меняться.
Изменено: UsAlex - 07.05.2017 13:08:03
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Юрий М, я RowSource вовсе и не использовал. Упомянул проблемы с ним поскольку нашёл информацию, в т.ч. на этом форуме, что лучше от него держаться подальше -- и именно это поразило, как рекомендация для продукта уровня Excel. До этого нормально сделал программку с расчётным числом записей ок.120 000, знаю, что и миллионы в Excel можно.

Тем не менее, интересно как бы Вы подошли к вопросу. Я не о конкретных нюансах реализации БД в Excel, а об альтернативной архитектуре решения в условиях, когда Excel такое вытворяет)

R Dmitry, спасибо, интересно. Я, правда, не вижу необходимости (в рамках своей задачи) в нормализации данных и полной имитации работы с первичными ключами и т.д. Грубо -- у меня одно поле с типом Record (если такое название где-то ещё используется).
Изменено: UsAlex - 07.05.2017 11:58:07
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Посчитал, что с БД на пару тысяч строк (это максимальный размер для отдалённой перспективы) можно попробовать ограничиться Excel. Простота реализации позволила бы человеку, для которого БД делается, освоить Excel и справляться с её сопровождением.
+ на самом деле, Excel -- это удобно)
+ пару месяцев назад на предыдущей винде-офисе сделал гораздо более сложную программу, которая работает на разных версиях винды-офиса. Правда, там не использовалось ControlSource.

Проблема с RowSource поразила - не ожидал от Excel такого. По инерции грешу на ControlSource, хотя о нём ничего подобного не пишут.

Но, безусловно, необходим результат, поэтому готов к смене концепции (я совершенно обескуражен этим). Юрий М, а как бы вы решали такую задачу?

Суть того, что делаю: ввод данных о пациентах для последующей печати различных медицинских документов и отчётных форм. Полей - ок. 200. Записей - несколько в день. Пользователь - один. Задача -- уменьшение количества писанины (диагнозы по несколько раз переписавать приходится...).
Изменено: UsAlex - 07.05.2017 11:28:12
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Как ни странно, даже у меня иногда работает корректно.

Windows XP SP3 + Office 2010 SP2.
Установлены пакеты MS Visual C++ 2005, 2008, 2010 (версия последнего пакета - 10.0.40219). До глобальной переустановки всего также были установлены все пакеты до 2016 включительно.
Установлен MS Visual Studio 2010 Tools for Office Runtime.

Все версии ПО - х86.
Изменено: UsAlex - 07.05.2017 11:08:46
"Разрушительный сбой" и ряд других ошибок с ControlSource..., RowSource не использую
 
Прошу помощи в идентификации проблемы, совета.

Очень редко код отрабатывался корректно. На нескольких других машинах одинаковые симптомы - при открытии ошибка, Excel вылетает с различными формулировками.
Поскольку я не подозревал проблем от Excel, грешил на дефекты своего ноута (он старый, немного глючный). В поисках решения сделал всё, вплоть до того, что переустановил Windows и Office (обе версии установочных пакетов отличны от тех, что стояли ранее).
Поскольку проблемы остались, углубился в мануалы и выяснил, что нечто подобное у коллег встречалось при использовании RowSource. Но я изначально это свойство не задействовал... Тем не менее, задам вопрос -- возможно, ControlSource также "проблемное" свойство? Либо же я выбрал некорректный и проблемный способ решения своей задачи?

Задача состоит в организации интерфейса к БД, которая хранится на листе Excel (да, я знаю, что специалисты не рекомендуют так делать но так надо).
На листе "DB" с седьмой строки размещается таблица, поля которой являются полями БД. Эти поля вывожу на форму в TextBox-ы. Способ навигации и вывода -- копирование необходимой строки БД в первую строку вкладки "DB". TextBox-ы свойством ControlSource "привязаны" к ячейкам первой строки.

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

Для исключения других проблем сделал экспериментальный файл, т.е. кода в нём - строк 10, не на что глянуть. Но не работает(
Поиск реализованного примера базы данных в книге Excel + формы навигации по ней, Есть "умная" таблица. Хочу редактировать её через свою форму. Без Access, MySQL и пр.
 
Спасибо за обсуждение и помощь, тема закрыта.
Поиск реализованного примера базы данных в книге Excel + формы навигации по ней, Есть "умная" таблица. Хочу редактировать её через свою форму. Без Access, MySQL и пр.
 
Vikttur, спасибо!

Поскольку в самой копилке файла не было (зато была ссылка на ветку его обсуждения) -- прикладываю сюда итоговый пример с календарём в ComboBox-е.

Честно, удивлён, что в саму книгу можно вложить элемент MSComCtl2.DTPicker.2 (у меня Excel 2010), а для формы ничего подобного и близко нет.

Для удобства интересующихся вопросами этой темы выкладываю сюда итог работы Слэна и коллег (а также всё найденное, что содержит элементы решения главной задачи). Все найденные примеры выкладываю "как есть" без своих комментариев и в порядке перечисления.
Есть версия Юрий М, в которой календарь Слэна работает на форме.
Нашёлся прототип от Igor67 (кстати, с календарём Слэна).
Ещё один прототип, близко к тому, что искал, в т.ч. используется авторский календарь от EducatedFool (Игорь) --http://excelvba.ru/programmes/Fill_Invoice (внимание - БД на суперскрытом листе). Сам файл выкладываю сюда же.
Ещё один календарь от пользователя Logistic.

И, наконец, найдено полноценное и даже документированное (в т.ч. в коде VBA) решение -- http://excelvba.ru/programmes/Entrant. Файлы сюда не поместятся из-за размеров. Логин и пароль для работы с прикреплёнными файлами -- "1".

Это не отменяет просьбы давать дополнительные альтернативные решения)

Незнание правил не отменяет ответственности. Файлы удалены [МОДЕРАТОР]
Изменено: UsAlex - 23.04.2017 13:20:04
Поиск реализованного примера базы данных в книге Excel + формы навигации по ней, Есть "умная" таблица. Хочу редактировать её через свою форму. Без Access, MySQL и пр.
 
Здравствуйте, уважаемые форумчане.
Возможно в сети есть примеры для ознакомления и использования по указанной теме?
Ввиду распространённости сформулированной задачи, есть надежда опереться на полновесный пример чтобы избежать лишних граблей и сэкономить время.
Библиотеки, компоненты, -- за всё буду благодарен.
Для лучшего понимания вопроса прикладываю текующую версию, это самое начало работы.

Также есть один частный вопрос: где поискать ComboBox с выпадающим календарём для выбора даты? Или стандартный екселевский можно превратить в такой?

Спасибо.
Изменено: UsAlex - 22.04.2017 23:07:45
Формирование диапазона ячеек для печати, скрываю строки, но страницы печатаются
 
AAF, нашёл недочёт.

В Вашем коде от 1 Мар 2017 08:16:20 после 32-ой строки вставил строчку
                     
Код
 rBrk = 0 ' сброс памяти "накопленного" рекомендуемого разрыва

Перестал появляться ненужный разрыв.

Видимо тема закрыта, спасибо)!!
Формирование диапазона ячеек для печати, скрываю строки, но страницы печатаются
 
Да, я понимаю эту логику и намерение. К сожалению, не работает. Пока что. Select отрабатывает. Буду высчитывать почему и как промахивается.
Формирование диапазона ячеек для печати, скрываю строки, но страницы печатаются
 
Заработал Sheets.Active, разрывы по-прежнему не всегда работают, продолжаю отладку)
Формирование диапазона ячеек для печати, скрываю строки, но страницы печатаются
 
Я неработающий "автофит" обошёл следующим образом.
Напомню: у меня проблемные строки формируются путём переноса из из другой таблицы текстов неизвестной длины. Но физически эти тексты размещаются в одной (первой) ячейке каждой строки.
Решение:
В служебной колонке изучаю, что именно находится в первой ячейке: количество абзацев (СИМВОЛ(10)), количество символов последнего абзаца (у меня примерно 100 символов помещается в одной строке в ячейке, -- делю, округляю). И формирую с запасом на 1 количество строк в ячейке в виде значения ячейки. Тут алгоритм можно сколь-угодно изощрённый реализовать одной формулой.
А при выполнении процедуры подготовки к печати перебираю все эти строки и устанавливаю им высоту 13*служебную колонку условной высоты в строках.
Торможений особых нет, хотя на этом форуме упоминается и более продуктивный способ: загрузить вектор_высот_строк в массив и обработать весь Range.

По Activate-Select пока не сделал но еще буду искать.
Изменено: UsAlex - 03.03.2017 12:54:45
Страницы: 1 2 След.
Наверх