{quote}{login=Hugo}{date=17.06.2010 05:08}{thema=}{post}Вот, нашёл...{/post}{/quote} А не подскажете, как этим можно воспользоваться?
Например, есть вот такой файл (в архиве). Их на самом деле около сотни и хотелось бы как-то автоматизировать процесс переноса данных в Excel. Подскажите, пожалуйста.
Ключевой момент был раскрыт в этом абзаце (машинный перевод):
В Microsoft Excel 97 — Excel 2003 можно добавить элементы управления для каждого контекстного меню с помощью VBA-кода (хотя это не было протестировано для любого случая) но это не возможно изменение контекстные меню с помощью RibbonX.
Excel 2007 можно добавить элементы управления почти каждый контекстное меню с помощью VBA-кода. Тем не менее не позволяет изменить некоторые контекстные меню, такие как Shapes и Picture контекстное меню с помощью VBA. Кроме того это невозможно изменить контекстное меню с помощью RibbonX.
Excel 2010 можно добавить элементы управления почти каждый контекстное меню с помощью VBA-кода. Действуют те же ограничения для изменения некоторых контекстных меню с помощью VBA как Excel 2007. Кроме того можно добавить кнопки и меню для каждого контекстного меню с помощью RibbonX, но если вы хотите отключить или re-purpose элементы управления, будет возможность найти правильные идентификаторы (idMso).
'---
Например, при редактировании контекстного меню для листов, чтобы убрать кнопку Удалить нужно вставить такие теги:
Оно недовольным становиться, если щёлкнуть по улыбке и потянуть. )))
Вполне нормальный вариант. Жаль только при клике по объекту происходит заливка и пока не уберёшь курсор с объекта процессор грузится по полной программе. Баг мелкомягких. :)
Вот не добрался пока до наведения мыши на объект, так как проблема уже на уровне обновления фигуры проявилась. Не обновляется фигура, даже если не отключать обновление экрана.
Попытка отражена в файле. Пока так, а дальше ещё надо подумать. ))
На форуме уже много было вопросов по редактированию контекстного меню, но я к сожалению не нашёл ответа на свой вопрос. То есть, добавить/удалить свои кнопки в то или иное контекстное меню не вызывает вопросов. Вопрос стоит, как удалить/скрыть стандартные опции.
В файле книга с примером. В Module1 макрос OnOffPopupMenu формирует контекстное меню для листа (Ply) и тут же показывает его. После его скрытия на текущем листе в таблице выводятся все опции этого меню. Не запускайте макрос на листе с данными, так как лист очищается полностью в начале макроса.
Макрос DisableHideMenuItems удаляет/отключает или скрывает указанную опцию в указанном меню. Точнее так хотелось бы, но этого не происходит. При клике ПКМ на вкладке листа открывается полное контекстное меню. Но запустив макрос OnOffPopupMenu в таблице не будет опции, которую перед этим удаляли.
В общем, помогите, пожалуйста разобраться с этим вопросом.
Методом тыка удалось убрать почти все вкладки и кнопки. Но пару вкладок всё никак не могу найти. Вот пример кода XML, который убирает все вкладки панели Ribbon и почти все вкладки в меню Файл:
Может кто-нибудь пробовал уже? Подскажите имена (idMso или idQ) для кнопки Параметры и вкладки Последние. Может это можно выяснить средствами VBA. Пока новая для меня тема.
{quote}{login=}{date=31.03.2012 12:44}{thema=}{post}Можно и без DBD, но событие DropButtonClick происходит два раза: когда раскрываем список и схлопываем его, в этом случае происходит лишняя, вторая, запись в ComboBox.List . При схлопывании и DBD=True - экономим :-){/post}{/quote}
Да, так правильней. В том смысле, что сразу нужно везде всё экономить. Иначе потом это нарастает, как снежный ком.
Вот не видел я, чтобы в справочнике были похожие примеры. А всё ведь дело в нюансах. Вот например, свойство List не видно в свойствах (Propeties) ComboBox. Как можно было догадаться, что его нужно использовать? :) Пошёл перечитывать книги...
{quote}{login=}{date=30.03.2012 11:37}{thema=}{post}Транспонирование возвращает не диапазон, а массив А свойство ListFillRange имеет ввиду именно ссылку на диапазон.{/post}{/quote}
Если в свойство ListFillRange дать ссылку на диапазон без транспонирования, то тоже не выходит. Точнее если дать ссылку на вертикальный диапазон, то получается, а горизонтальный нет. Нужна помощь.
А у меня что-то не получается из горизонтального именного диапазона сделать выпадающий список. Пробовал и через формулу =ТРАНСП(именной диапазон) и вариант, который здесь предлагали, но что-то никак не выходит. Покажите, пожалуйста, на простом примере в приложенном файле.
Спасибо за примеры. То есть, если разделитель не указан, то в качестве разделителя выступает пробел, если он есть. Если же нет ни одного пробела, то в массиве один элемент. В качестве разделителей выступают любые указанные знаки. Правильно?
А что означает (1) ? Посмотрел в справке функцию Split и не нашёл объяснения. Вот как можно было прийти к тому, что в конце нужно добавить (1), чтобы получить такое элегантное решение? )))
Объект Label из коллекции ActiveX неплохо подходит для решения поднятой в теме задачи. Но есть ещё одна подзадача в этой задаче. При клике по этому объекту он окрашивается в установленный в свойстве BackColor цвет даже, если в свойстве BackStyle установлена константа fmBackStyleTransparent. И до тех пор пока курсор находится над объектом, даже находясь в статичном состоянии, процессор сильно грузится, а объект заслоняет своим цветом объекты, которые находятся даже над ним по слоям.
Я попробовал при клике по объекту устанавливать заново свойство BackStyle = fmBackStyleTransparent, но это не решает проблему.
Пока ждал попробовал ещё поискать ответ на свой вопрос по другим форумам. Ответ найден. Пользователь EducatedFool предлагал достойное решение:
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Label1.Caption = "X= " & X & vbLf & "Y=" & Y Call ОкраскаКнопок(X, Y) End Sub
Sub test() MsgBox "макрос запущен", vbInformation End Sub
Sub ОкраскаКнопок(ByVal X As Single, ByVal Y As Single) d = 5: Dim sha As Shape For Each sha In Me.Shapes With sha If .Name Like "MyButton*" Then НадКнопкой_поX = ((Abs(.Left - X) < d) Or (Abs(X - .Left - .Width) < d) Or (X - .Left - .Width) * (.Left - X) > 0) НадКнопкой_поY = ((Abs(.Top - Y) < d) Or (Abs(Y - .Top - .Height) < d) Or (Y - .Top - .Height) * (.Top - Y) > 0) КурсорРядом = НадКнопкой_поX And НадКнопкой_поY НоваяПрозрачность = IIf(КурсорРядом, 0.7, 0.1) If НоваяПрозрачность <> .Fill.Transparency Then .Fill.Transparency = НоваяПрозрачность '.TextFrame.Characters.Font.Bold = КурсорРядом End If End If End With Next End Sub
//---
Жаль что на этом форуме нельзя вставлять код так, чтобы он выглядел как в редакторе. Примите как пожелание для улучшения форума. )))
А можно ли к автофигуре "приклеить" события? Пробовал с помощью класса, но что-то пока не вышло. Если это можно сделать только средствами VBA, покажите пример, пожалуйста.
Попробовал много разных способов и никак не получается сделать, чтобы при нажатии на левой/правой кнопкой мыши объекты не выделялись. Нашёл в книге Уокенбаха пример с диаграммой. Пример вполне понятен, но не нашёл, как это можно сделать с фигурами или любыми другими объектами.
Например, у Уокенбаха в модуле класса:
Public WithEvents myChartClass As Chart
...далее обработчик нужного события.
В модуле:
Dim SummaryChart As New EmbChartClass
//---
Для фигур это уже не подходит. Пробовал объявлять, как Shape, Shapes, ShapeRange, но не получается. Покажите пример, пожалуйста.
//---
В файле пример от Уокенбаха.
//---
Та же история и с контекстным меню на фигурах. Где угодно меню отключается (на этом форуме много примеров и в книгах тоже), но как отключить меню на фигурах не нашёл, а сам не смог реализовать пока. Нужен пример.