1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||
24.12.2013, 11:43 [ТС] | 41 | |||||
1. Добавляем примечание на лист
2. Пишем и запускаем код: Пишем код:
с т.зрения разработчика - все логично. но с т.зрения пользователя - нет. неужели сложно было повесить эвент на удаление шейпа примечания и при удалении его родного шейпа и удалять и само примечание? ... или если примечание - не шейп и не должно удаляться удалением шейпа, то почему тогда не запретить удаление шейпа примечания (или перевести его в другой объект или другой класс?) Попробуем изменить удаленное примечание ... и о! оно оказывается пустым! Добавлено через 7 минут А если вы бросите на лист какой-либо ActiveX-объект, и дойдете вручную до строчки "IShape.Delete" и нажмете Shift+F8, то получите "Can't enter break mode at this time" с Continue или End'ом. Где логика? все, дебаг закончен ... (логика может конечно и есть, но почему бы заранее и не проверить - есть ли в коде эвенты этого объекта, а если их нет - удалять без лишних проблем ... да собственно ... пусть они и есть и пусть они останутся подвязаны у тому объекту и до останова просто не становятся самостоятельными функциями ...)
0
|
24.12.2013, 11:43 | |
Ответы с готовыми решениями:
126
Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп] Обсуждение темы "Готовые решения, примеры и рекомендации начинающим на WPF" Проблемы с алгоритмом решения задачи Бывший профессионал cs 1.6 просит решения проблемы |
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||||||||||||
25.12.2013, 20:46 [ТС] | 42 | |||||||||||||||
А вы знали, что этот код не сработает:
Уже давно ... факт присвоения имени функции результата функции, наводил на мысль, что имя функции для нее(!) - это лишь чистая переменная, через которую она возвращает результат. На данном примере в этом можно убедиться. Однако, вне тела функции, имя функции перестает быть просто переменной. Добавлено через 1 час 14 минут ------------------------------------------------------------------------------ Расширение возможных событий листа до:
Для останова контроля событий - call fОстановРасширенногоКонтроляСобытий_Mouse (код модуля - во вложении) Работает под: - x32 (2003, 2007 и 2010 офисы) - x64 (2003, 2007 и 2010 офисы) под 2013 офис не работает! Особенности: 1. Дебажить аккуратно! хук часто работает по тому коду, который был на момент запуска контроля событий! (т.е. все последующие изменения в процессе работы с кодом он не увидит!) 2. Может приводить к эксепту приложения при ЧРЕЗМЕРНОЙ нагрузке движений мыши и особенно скролла. Но это надо ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ постараться. 3. При вызове Calculate(и любые Calculate) добавляйте:
4. Бывают свалы в момент переключения между листами, при изменении листа и при записи запись файла. Поэтому, вешайте аналогичный лок на Worksheet_Activate, на Worksheet_Change и связку Workbook_BeforeSave и Workbook_AfterSave. Но при хорошем контроле с отключением событий при переключении листов, перед сохранением и т.д. - все работает правильно. P.S. Не работает в режиме совместимости в старых форматах файлов расширения xls.
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
26.12.2013, 21:37 [ТС] | 43 |
Если у вас большие таблицы и/или мелкий масштаб данных, то вы можете использовать следующую надстройку для создания перекрестия под курсором мышки, как на рисунке во вложении. При перемещении перекрестие будет смещаться. Удобно, если необходимо анализировать данные в одной строчке.
Код как под x32, так и х64 (под 2003, 2007 и 2010 офис - работает, под 2013 офис не работает!). Работает в связке с предыдущей надстройкой на событие листа. Цвет и толщину линии - можно поправить в коде. P.S. Пока не работает в режиме совместимости - т.е. формата xls в 2007 и 2010 офисах.
3
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
27.12.2013, 12:26 [ТС] | 44 |
Если у вас с файлом(книгой) что-то "не то" ... - всегда делайте копию этого файла(книги) и уже все дальнейшие действия производите только с ее копией.
Из категории "странных и совершенно абсурдных" советов: 1. После работы макроса, сохранения и закрытия книги. При следующей попытке открытия этого файла, приложение Excel гибнет(вываливается в эксепт, виснит, просто бесследно исчезает ...). Совет: - Отключите макросы. Откройте этот файл. Если он открылся - перейдите в код, внесите любое изменение (добавьте пустую строку, пробел в любом месте ...). Сохраните и закройте файл. Включите макросы обратно и попробуйте открыть его вновь ... - Если файл не открывается (или не открывается с отключенными макросами (см. выше)) ... (сначала с включенными, а затем с выключенными макросами)Попробуйте открыть этот файл на том компьютере, на котором было последнее сохранение этого файла, до момента возникновения проблемы (с открытием) и так же попробуйте внести какие-то изменения в код(см. выше) - Если файл не открывается вновь ... попробуйте его открыть на компьютере с меньшим объемом оперативной памяти. 2. У вас файл больших размеров (с большим количеством данных и/или формул). Поработав с этим файлом, сохранив и закрыв его, пытаетесь открыть заново ... и получаете сообщение, что файл поврежден. Совет: Не торопитесь его восстанавливать. - (часто)Закройте это приложение и попробуйте открыть его в новом (другом)приложении Excel. - (редко)Попробуйте перезагрузить компьютер. 3. Программный код файла(книги) был обновлен сторонним приложением(или произошло самообновление) и ... в этом файле работает старая программа, словно код не был обновлен и программа там совершенно другая. Совет: - Попробуйте открыть файл в другом приложении(закройте текущий и откройте новый Excel). Внесите любые изменения на любом листе (в любой ячейке). Сохраните и закройте файл. Попробуйте открыть его снова ... 4. При закрытии книги (чаще с макросами) приложение Excel гибнет (в любом режиме - с включенными и с выключенными макросами) ... (как правило, уже не излечимо) Совет: - Попробуйте пересохранить файл в другом формате (xlsb, xlsm) ... помогает до следующего сохранения. Поверьте. Это не всегда, но работает )
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||
10.01.2014, 11:55 [ТС] | 45 | |||||
В тему "как сделать 2 и более листов типа ЭтаКнига". Тема была описана ранее.
Есть еще один способ. Создаем книгу, сохраняем ее. Вставляем и запускаем:
Может чего-то не понимаю, но как можно было разрешать переименовывать этот "лист"? Как это прошло тестирование и/или почему не было протестировано перед выпуском продукта?
0
|
Ушел с CyberForum совсем!
|
|
14.01.2014, 11:50 | 47 |
да, но при запуске кода в одном из листов такого типа вылетает ошибка '429' - ActiveX Component can't create object
Так что пользователю не разгуляться может это как-то зависит от версии офиса ? я тестил на офисе 2010…
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
14.01.2014, 12:35 [ТС] | 48 |
Это в тему - как при включенных макросах, не изменяя код - обойти выполнение событий открытия книги ) - меняем имя листу "ЭтаКнига" на какое-то другое, сохраняемся и ... при следующем открытии создается пустой лист "ЭтаКнига", а прежние обработчики работать уже не будут.
Там все интереснее - поиграйте с именами, к примеру - сделайте модуль с именем "ЭтаКнига", попробуйте переименовать обычный лист в "ЭтаКнига" ... попробуйте сменить ему имя через раздел "Name" в оснастке свойств ... (у кого есть сразу и английская версия - посмотрите, что будет при попытке "отжать" это имя сразу в обеих локализациях) Анализируя все эти затычки(со стороны Excl'я), пришел к выводу, что вооозможно в Майкрософт знают эту особенность поведения, но почему-то менять не хотят и не собираются, потому как - натыкали заглушек (и лист ЭтаКнига появляется всегда, но уже под какими-то другими именами ...) на счет совести пользователя ... честно говоря, не хотел бы данную тему превращать в диалог рассуждений ... вижу здесь (как говорят) только "сок мозга" (и знаний ...)
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
31.01.2014, 10:57 [ТС] | 49 |
Форматируем ячейку:
1. по горизонтали: по правому краю (отступ) 2. отступ: 1 вводим в эту ячейку 1(единички) одну за одной ... нажимаем "1", нажимаем "1", и т.д. ... смотрим как они сначала нажимаются и образуется к примеру строка "111111", но потом, при нажатии очередной "1" в ячейке отражается строка "1". Пробуем экспериментировать дальше и наблюдаем разные другие глюки ... Где логика?!
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||
25.02.2014, 16:54 [ТС] | 50 | |||||
хотел сделать паузу, но треш постоянных косяков вбил последний гвоздь ...
Встаем в любую ячейку, что-то пишем подлиннее, форматируем "Выровнять текст по правому краю" 1. Нажимаем F2 ... смотрим, наслаждаемся как в ячейке отражается вся введенная строка с курсором в конце строки (ESC)2. Нажимаем два раза мышью на ячейку ... смотрим, наслаждаемся как в ячейке отражается вся введенная строка с курсором на территории строки ))) (ESC)3. Жмем мышью в строке формул справа от строки ... и впадаем в бешенство, от того, что видно лишь первую часть строки ... а смешнее во всем этом то, что если нажать клавишу влево (для перемещения курсором в позицию между предпоследним и последним символом), то в ячейке отражена уже будет последняя часть строки ... где логика?! конечно, пипл схавает ... Добавлено через 23 минуты Из категории "не вредных советов". Если не хотите добить нервную систему пользователя, не ставьте:
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
01.04.2014, 09:07 | 51 |
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||
05.06.2014, 16:28 [ТС] | 52 | |||||
Если ваша книга не открывается по какой-то причине (валится эксель) ... на разных компьютерах с разным объемом оперативной памяти ...
- попробуйте ее открыть в Excel запущенном в защищенном режиме (редко, но иногда помогает) - ЗАЖИмаете клавишу Ctrl и далее по ярлыку экселя ... он некоторое время подумает и потом спросит "Excel обнаружено, что нажата клавиша CTRL. Запустить Excel в безопасном режиме?" Добавлено через 12 минут Допустим, вы хотите написать свою функцию(формулу), которая как-то отрабатывает при вызове с листа и ей передаете какое-то значение ссылкой на другую книгу ... На листе: =qwe([temp.xlsx]Лист!$A$1) Код:
Далее, закрываем temp.xlsx ... получаем на листе =qwe('D:\Temp\[temp.xlsx]Лист'!$A$1) - тоже работает! ок ... теперь все заново, но только передаем диапазон =qwe('D:\Temp\[temp.xlsx]Лист'!$A:$G) ... смотрим на Stop значение переменной a - получем: "Error 2036" Вывод: если из другой книги надо подтянуть одну ячейку - передается ее значение - просто Sting(Long, ...), если передается рейнч - должен создаться объект, на основе каких-то данных "находящихся в доступе" ... а т.к. книга закрыта - данные вне доступа ... (кто объяснит это более научным и/или более правильным языком?)
2
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
09.06.2014, 18:53 | 53 | |||||
Не согласен. Я вижу в a массив! Только если не целиком столбцы передавать, а ограниченный диапазон. Вот это почему так?
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
||||||
03.07.2014, 12:41 [ТС] | 54 | |||||
Действительно - с рейнджем работает, а со столбцом уже нет - что еще раз подтверждает основной смысл ветки. Кто знает причину столь странного поведения, когда массив по рейнджу создается, а по столбцу - нет (при закрытом файле экселя-источнике данных)?
Еще одна изюминка объекта нашей страсти: - кидаем на лист пару объектов ActiveХ - смотрим у каждого по отдельности правой клавишей мыши спиок элементов меню. у каждого есть "Свойства" - выделяем несколько объектов с "Ctrl", смотрим контекстное меню - полная идентификация объектов как рисованных - (очевидно) при этом, если окно "Свойства" держать открытым и выделить объекты с "Ctrl" - увидим общий список свойств этих объектов ... Все очевидно - и как и почему ... и видимо, с т.зрения разработчиков экселя - это логично ... только логика эта кажется немного странной ... ну почему это нельзя было проработать и сделать как для людей?! Добавлено через 1 час 44 минуты Наша красавица жжет. Отвечал по теме Как исправить проблему видимости элементов ActiveX на картинке? И в конце столкнулся с тем, что при закрытии программы, когда выскочило окно "Сохранить Да/Нет", ответив "Да" - после клика СРАЗУ повел мышь в сторону ... Напомню, код:
Так, Application.ThisWorkbook.Worksheets(Name).Shapes.Count не 0 (сколько у вас было объектов? = 2 ... 3 - не важно), но объектов уже нет!!! и событие на эти отсутствующие объекты продолжают работать!!! Почему бы не удалять объекты после полной работы интерпритатора? Видимо, это не логично ...
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
11.07.2014, 16:15 [ТС] | 55 |
Конечно, это придирка ...
Ставим проверку данных со списком, снимаем флаг "Игнорировать пустые ячейки". Пробуем - выбираем какое-то значение и жмем Del. - Del'ом значение удалились (почему? мы же убрали игнор пустых ячеек, а соответственно, она не должна быть пустой!) ... ладно, выбираем какое-то значение еще раз, жмем backspace много раз до Empty и заканчиваем Enter'ом ... и что же? вводимое значение не может быть пустым. Ну так почему бы не написать (перевести) "Игнорировать пустые значения" (вместо ячейки!) - или "Игнорировать ввод пустого значения"? Если речь идет про ячейки, то почему в результате (пользовательских действий) Del'ом - она может быть пустой, а вот бакспейсом - не может ... почему (с т.зрения пользователя) одна клавиша и способ очистки ячейки "круче" другого?! Речь не идет про то - почему (все понятно) ... а вот с т.зрения обычного пользователя - это не логично!
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
15.07.2014, 14:34 [ТС] | 56 |
Допустим, у вас в таблице есть столбец, в котором по строкам объединены некоторые ячейки и по этим объединенным ячейкам, вам необходимо фильтровать данные всей таблицы.
Если навесить фильтр на такие столбцы, то фильтр будет работать не корректно - часть фильтрованных значений будет оставаться видимыми. Для корректной работы такой задачи: - слева от столбца с объединенными значениями вставьте дополнительный столбец - в который в каждой строке пропишите значения, содержащиеся в ячейках справа (в том числе и объединенных ячеек) - объедините две ячейки этих двух столбцов над данными (там, где будут располагаться курсоры выбора фильтров) - установите фильтр - скройте добавленный столбец теперь фильтр будет работать корректно
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
17.07.2014, 14:29 | 57 |
По объединённым ячейкам - есть способ оставить значения в этих ячейках - тогда и фильтр, и например ВПР() будет работать корректно. Делается это копированием формата с объединённой ячейки на необъединённые с данными. Почему это нельзя было сделать при стандартном объединении?...
0
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
17.07.2014, 14:59 [ТС] | 58 |
Hugo121, совершенно не понял вас. Вы имели в виду ситуацию с картинки? Опишите пожалуйста подробнее.
Что вы имеете в виду, говоря "Делается это копированием формата с объединённой ячейки на необъединённые с данными." - т.е. в добавляемый столбец или во все остальные столбцы таблицы? Что вы подразумеваете под "стандартным объединением"?
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
17.07.2014, 16:15 | 59 |
Ну вот например на этой картинке выше - берёте копируете формат объединённой единицы поверх жёлтых единиц (стандартно кисточкой), а двойки поверх жёлтых двоек. Теперь столбец "заголовок 2" можно удалить, использовать как основной жёлтый столбец.
А "стандартное объединение" - это когда стандартно выделяют диапазон и жмут "<-a->"
1
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
|
|
18.07.2014, 13:44 [ТС] | 60 |
Согласен. Альтернативный способ (мои коллеги от него отказались потому, что пользователь в процессе работы со столбцом может менять области объединения ячеек и значения в них, а в дополнительном столбце можно указать формулу, которая будет всегда корректно отрабатывать на фильтр).
Вариант с объединенной ячейкой в строке фильтра дает возможность работать с дополнительными значениями фильтруемого столбца, например ">10", "отбракованные по спецификации" или наоборот, если оригинальный фильтруемый столбец содержит ОРИГИНАЛЬНЫЕ введенные пользователями данные (с разными символами плавающей точки, с пробелами и т.д.) - по фильтру (в доп. столбце) вы можете предложить организовать фильтрование по правильным (скорректированным) числовым значениям. Добавлено через 20 часов 15 минут Если ваш xlsx(xlsm) файл стал весить слишком много, то для сокращения его размера: 1. распакуйте (тем же раром) 2. запакуте все получившиеся после распаковки файлы (тем же раром) с параметром максимального алгоритма сжатия (в формате zip-архива) 3. переименуйте полученный файл-архив в файл с прежним расширением xlsx(xlsm) - наслаждайтесь Excel-файлом меньшего размера (обратите внимание, что после следующего сохранения Excel он снова вырастет)
0
|
18.07.2014, 13:44 | |
18.07.2014, 13:44 | |
Помогаю со студенческими работами здесь
60
USB устройство, проблемы и пути решения. Проблемы с выводом решения на стандартный поток Прошу помощи решения проблемы в перекрестном... Каковы возможные решения проблемы рывков в эмуляторе? ФР Electrolube PRP, проблемы, подводные камни, решения BDE - ошибки и решения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |