Страницы: 1
RSS
Как убрать фокус с созданной макросом кнопки
 
     Приветствую всех, кто читает данную тему!

    Имеется вопрос по работе кнопки, добавленной просто на лист Excel (без формы) из элементов управления формы.

    Ситуация такова: имеются несколько процедур в VBA, которые запускаются кнопками на листе. Эти кнопки создаются с помощью кода, помещённого в модуль "ЭтаКнига" при помощи события Workbook_Open. Всё работает за исключением одной вещи: после создания кнопка оказывается выделенной рамкой и при щелчке клавишей мыши по ней вместо запуска макроса вовнутрь кнопки помещается курсор с возможностью редактирования надписи на ней. Приходится щелкать дополнительно по любой ячейке листа, чтобы снять выделение с кнопки. Существует ли команда для убирания редактируемого состояния кнопки после её создания, такая, чтобы при щелчке сразу запускался макрос?

Как ни странно, нигде не нашёл ответа на этот вопрос. Создаётся впечатление, будто только у меня возникла такая проблема.

Кнопка создаётся следующим образом:
Код
This Workbook.Worksheets (" Лист1").Buttons.Add (690, 250, 240, 25).Select
With Selection
    .Name = "ISO_DRAWING_BUTTON"
    .OnAction = "ISO_DRAWING_FILE"
    .Characters.Text = "Создание ссылок на чертежах"
End With

Благодарю всех за помощь!
 
Варианты
1. После создания кнопки программно выделяйте любую ячейку
2. Попробуйте такой код
Код
Application.CommandBars.FindControl(ID:=1605).Reset
3. Вместо кнопок используйте Автофигуры
Согласие есть продукт при полном непротивлении сторон
 
Доброе время суток
Sanja, коллега там всё же приведён код, не связанный с кнопками панелей инструментов. Просто ТС нагло ленится оформить код, поэтому он не читаем. Достаточно написать
Код
With his Workbook.Worksheets (" Лист1").Buttons.Add (690, 250, 240, 25)

Чтобы не было выделения кнопки.
 
Цитата
Андрей VG написал:
Просто ТС нагло ленится оформить код
Эти ТС - вааще наглость потеряли! :)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Спасибо всем, кто откликнулся!
Насчёт того, что "Просто ТС нагло ленится оформить код". Это не так. Так как сижу в форуме с телефона, то код писал вручную, а это, как сами понимаете не проще, чем скопировать из редактора. Просто, если честно, я понятия не имею, как нужно оформлять код. Уж извините.

Андрей VG, попробовал ваш вариант. Всё получилось, спасибо! Но есть маленькая проблемка: после создания кнопки у меня была ещё такая запись по оформлению надписи на кнопке:
Код
With Selection.Characters(Start:=1, Length:=37).Font
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size =10
End With

Как понимаете, эта часть кода не срабатывает, так как нет объекта  Selection. Как быть в этом случае?
Простите, что код по-прежнему не оформлен )
 
Цитата
JohnMC написал:
так как нет объекта  Selection
- ну раз нет, так и не пишите :)
Вот прямо так буквально - уберите это слово.
Код
With ThisWorkbook.Worksheets("Лист1").Buttons.Add(690, 250, 240, 25)
    .Name = "ISO_DRAWING_BUTTON"
    .OnAction = "ISO_DRAWING_FILE"
    .Characters.Text = "Создание ссылок на чертежах"
    
    With .Characters(Start:=1, Length:=37).Font
           .Name = "Calibri"
           .FontStyle = "Regular"
           .Size = 10
    End With
    
End With
Изменено: Hugo - 23.11.2017 10:53:02
 
Спасибо всем ещё раз! Я разобрался, что нужно делать. Вариант Андрея VG подходит как нельзя лучше!
Просто добавил код для оформления текста в блок With - End With.

Единственный вопрос, который остался - можно ли обращаться к таким кнопкам на листе по имени? Буду весьма благодарен за ответ.
 
Hugo, спасибо за вариант! Я сделал немного по-другому. Мне просто не понятно, к какому объекту относится свойство .Characters в вашем варианте...
 
Цитата
JohnMC написал:
к какому объекту относится свойство .Characters в вашем варианте..
- к тому, что выше по "дереву" with.
Про имя - рекордер записал так6
Код
 ActiveSheet.Shapes.Range(Array("ISO_DRAWING_BUTTON")).Select
 
Hugo, честно говоря, у меня ваш вариант не прошел. VBA выдал ошибку в другом месте " Нельзя установить свойство  Locked класса Range" (у меня в проге просто блокируются ячейки, которые не нужно трогать лишний раз). Не знаю, как это связано, но не суть. Я просто добавил перед каждой записью-параметра текста
".Characters ( Start:=1, Length:=37).Font"

Код макрорекордера на имя кнопки меня немного удивил. Я сам, насколько помню, из макрорекордера код на кнопку брал. И он был основан, как я и привёл выше, на методе Add и координатах кнопки.
Попробую, то, что вы написали, возможно подойдет )
 
Так я взял код выделения уже ранее созданной кнопки.
 
JohnMC, Вам несколько раз намекнули про оформление кода. Посмотрите, как код оформлен у других и сделайте аналогично во всех своих сообщениях. Для этого ищите такую кнопку.
 
Юрий М, спасибо за подсказку. Намек-то я видел. А вот, как сделать правильно, не знал. Буду разбираться.
 
Немного не по теме, но про кнопки ))
А зачем её программно создавать? Заготовить заранее, и пусть живёт на листе.
 
как убрать фокус? а не нужно его ставить
Код
set MyButt = Workbook.Worksheets ("Лист1").Buttons.Add (690, 250, 240, 25)
' а потом уже
  MyButt.Name = "ISO_DRAWING_BUTTON" 
  MyButt.OnAction = "ISO_DRAWING_FILE" 
  MyButt ...

в другом макросе, если знаете как зовут кнопку
 set MyButt = activesheet.shapes("ISO_DRAWING_BUTTON")
 смотрите свойства MyButt и доступаетесь к тем, что Вам нужны
Изменено: Ігор Гончаренко - 23.11.2017 12:11:28
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Что-то непонятное произошло с сообщением. Сам не понял, как это всё вставилось...

Юрий М спросил: "Зачем вставлять кнопки программно?"
Суть в том, чтобы при запуске файла появлялось что-то вроде меню: 2 кнопки ("Редактирование файла расчетной модели" и "Создание ссылок на чертежах"), которые должны запустить несколько разных процедур. Делать ради этого форму смысла не вижу. При этом при нажатии каждой из кнопок запускаются отдельные макросы, которые создают другие кнопки для дальнейшей работы с ними. Оставлять при этом начальные кнопки было бы нецелесообразно, поэтому, они удаляются до тех пор, пока пользователь снова не выйдет в главное меню.


Спасибо всем, кто ответил! Обнаружил много разных вариантов решения проблемы. Обязательно все испробую :-)
Изменено: JohnMC - 23.11.2017 13:05:05
 
JohnMC, как понимать это Ваше сообщение?
 
Это когда руки действуют отдельно от головы :)
Вернитесь и приведите сообщение в порядок
Страницы: 1
Читают тему
Наверх