Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Не работает скрипт смены цвета

Ответить
Настройки темы
2010 - [решено] Не работает скрипт смены цвета

Пользователь


Сообщения: 94
Благодарности: 2


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: victor21043
Дата: 11-03-2016
Уважаемый пользователи портала,
Есть docm word 2010 c несколькими кнопками в нём(button,button2 итд).
Как при наведении на конкретную active-кнопку(имя-button) указателем оптического манипулятора("мышь") произвести смену цвета,а при отведении-базовый цвет?
Есть код-но он не работает.
Благодарю
Пример:
Скрытый текст

For Each ИмяОбъекта In ИмяКоллекции
Операции над объектами
Next ИмяОбъекта
В этом примере показано, как изменить свойство BackColor у всех этикеток (Label), лежащих на форме
Код: Выделить весь код
Dim x As Object
For Each x In Me.Controls
If TypeName(x) = "Label" Then
x.BackColor = 0
End If
Next x

Листинг
Скрытый текст

Код: Выделить весь код
Public Sub button_MouseMove(ByVal Button As Integer, ByVal Shift _
As Integer, ByVal X As Single, ByVal Y As Single)
Dim ctr As Object
For Each Button In Me.Controls 
      If ctr = Button Then
      Me.Button.ForeColor = RGB(180, 91, 62) 
       End If
       Next Button
    Me.Button.ForeColor = vbBlack
End Sub

Public Sub Button_click()  
     With Button
         .Caption = IIf(.Caption Like "+*", ">> Ñlose", "+ English")       
         Me.Shapes(6).Visible = .Caption Like ">> *"
         Me.Button.ForeColor = vbBlack
     End With     
 End Sub

Файл
Скрытый текст

Отправлено: 16:42, 08-03-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата victor21043:
Есть docm word 2010 c несколькими кнопками в нём(button,button2 итд). »
Для тех, кто будет смотреть — упакуйте документ в архив и приложите к сообщению.

Отправлено: 17:01, 08-03-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 94
Благодарности: 2

Профиль | Отправить PM | Цитировать


Добавлено

Отправлено: 19:19, 08-03-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата victor21043:
Есть код-но он не работает. »
Вот Ваш код (из файла, формат 2003):
Код: Выделить весь код
Public Sub button_MouseMove(ByVal Button As Integer, ByVal Shift _
As Integer, ByVal X As Single, ByVal Y As Single)
'Dim ctr As Object
'For Each Button In Me.Controls
     ' If ctr = Button Then
      Me.Button.ForeColor = RGB(180, 91, 62)
      ' End If
     '  Next Button
   ' Me.Button.ForeColor = vbBlack
End Sub
и он работает, цвет шрифта меняется на указанный.

Отправлено: 19:48, 08-03-2016 | #4


Пользователь


Сообщения: 94
Благодарности: 2

Профиль | Отправить PM | Цитировать


1)Код модуля работает-оставлен частично неработающий код,который не может привести к overflow у кого-либо.
Цитата:
Как при наведении на конкретную active-кнопку(имя-button) указателем оптического манипулятора("мышь") произвести смену цвета,а при отведении-базовый цвет
2)Часть кода модуля (подпрограмма) закомментирована, при дебаггинге она вызывает ошибку компиляции
(не знаю почему-подпрограмма "собрана"по образцу("Пример")

Последний раз редактировалось victor21043, 11-03-2016 в 15:12.


Отправлено: 17:23, 09-03-2016 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата victor21043:
Оставлен частично неработающий код, »
Цитата victor21043:
2)Часть кода модуля (подпрограмма) закомментирована, значит при дебаггинге она вызывает ошибку компиляции
(не знаю почему »
У Вас ошибочное использование переменной «Button» (вот для чего нужен «Option Explicit»). Понимаете почему?

Отправлено: 23:08, 09-03-2016 | #6


Пользователь


Сообщения: 94
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо,
Элемент – это переменная, которая будет хранить значение при каждой итерации (переборе коллекции)
Коллекция – собственно, то, что нам надо обработать.Коллекция – по своей природе этот тот же массив, но количество элементов в нем нам неизвестно(нет счётчика). Элемент должен принадлежать коллекции.
Код переделан,но не работает
Код: Выделить весь код
Public Sub button_MouseMove(ByVal Button As Integer, ByVal Shift _
As Integer, ByVal X As Single, ByVal Y As Single) 'button_x имя процедуры\событие
Dim ctr As Object 'элемент\переменная
'Начинаем перебор коллекции
For Each ctr In Me.CommandBars  'элемент In коллекция
     If ctr = Button Then
      Me.Button.ForeColor = RGB(180, 91, 62) 'оператор
      Else
      Me.Button.ForeColor = vbBlack 'в противном случае 
      End If
Next ctr
End Sub

Последний раз редактировалось victor21043, 11-03-2016 в 16:21.


Отправлено: 15:51, 10-03-2016 | #7


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата victor21043:
Код переделан,но не работает »
Код для изменения цвета при наведении мышки приведен в посте №4, его и используйте. Вопрос, как я понимаю, каким образом вернуть кнопке исходный цвет.
Подходящего события (типа указатель уходит за пределы вашей кнопки "control 2") я не увидел. Единственный (правда уж очень кривой, но уж какой есть) вариант могу предложить следующий: вставьте в документ элемент управления - рисунок, подложите его под вашу кнопку, размеры задайте чуть больше вашей кнопки чтобы рисунок образовывал некую окантовку (рамку). Событие, когда мышка находится над рисунком будет активировать код, который будет менять цвет вашей кнопки на исходный.

То есть логика следующая: когда курсор прошелся над кнопкой - активируется код из поста №4. Если курсор уйдет с кнопки, он обязательно пройдет над рамкой (рисунком) и активирует код, приведенный в конце этого поста, который перекрасит кнопку в исходный цвет.

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

Для этого:
во вкладке меню Word "Разработчик" (помнится по умолчанию отображение этой вкладки отключено, возможно придется включить в параметрах) предварительно отобразив ваше текстовое поле, нажмите кнопку "Режим конструктора". В этом же секторе вкладки "Разработчик" -> "Элементы управления" выбрать вставку элемента управления "Изображения" (вставится пустая рамка). Щелкнуть по рамке рисунка и выбрать "формат объекта" -> "положение" -> "За текстом". Переместить поле под кнопку, но так чтобы оно было над вашем текстовым полем (поле можно сдвинуть ниже). В режиме конструктор доступна кнопка "свойства", чтобы поменять например цвет рамки рисунка, фон и т.д. Высоту и ширину изображения подгоняете слегка побольше чем кнопка, чтобы получилась некая рамка, после чего отключаете режим конструктора.
Необходимо вставить следующий код:
Код
Код: Выделить весь код
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    ActiveDocument.Shapes("Control 2").OLEFormat.Object.ForeColor = vbRed
End Sub

С любопытством ознакомлюсь с любым более "правильным" вариантом по возвращению кнопке исходного цвета.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:09, 11-03-2016 | #8


Пользователь


Сообщения: 94
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата:
Вопрос, как я понимаю, каким образом вернуть кнопке исходный цвет
Да +при отведении мышки-я думал ,что это будет очень просто реализовать!
Так переделан-упрощён-не работает.
-Dim ctr As Object почему? не др. тип данных VBA(ошибки,кроме Variant)
Object-используется только для хранения ссылок на объекты. Требуемая память: 4 байта
Данную переменную нельзя ,оказывается, глобально объявить(Public str),как другие в этом коде("перемен не объявлена")
-For Each ctr In "Me.CommandBars" Вообще не понятно ,что такое коллекция me.X?
Скрытый текст
Код
Код: Выделить весь код
Sub button_MouseMove(ByVal Button As Integer, ByVal Shift _
As Integer, ByVal X As Single, ByVal Y As Single) 'button_x имя процедуры\событие
Dim ctr As Variant 'переменная
For ctr = 0 To 1  'счётчик step=1 по умолч
    If ctr = Button Then
      Me.Button.ForeColor = RGB(180, 91, 62) 'оператор
     Else 'в противном случае
     Me.Button2.ForeColor = vbBlack
      End If
Next ctr

Последний раз редактировалось victor21043, 11-03-2016 в 16:17.


Отправлено: 15:38, 11-03-2016 | #9


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


victor21043, еще раз терпеливо вам объясняю:
1. чтобы менялся цвет при наведении на кнопку - используйте следующий код:
Цитата Iska:
Public Sub button_MouseMove(ByVal Button As Integer, ByVal Shift _
As Integer, ByVal X As Single, ByVal Y As Single)
Me.Button.ForeColor = RGB(180, 91, 62)
End Sub »
2. чтобы вернуть исходный цвет кнопки, выполните шаги начиная со слов:
Цитата a_axe:
Для этого: »
3. Отпишитесь о выполненных шагах, если что-то не работает - приложите файл.
4.По вашему вопросу - в вашем случае этого не нужно, но если хотите почитать:
Цитата victor21043:
-Dim ctr As Object почему? не single,string(коллекция -массив)
-For Each ctr In Me.CommandBars Вообще не понятно для каждой переменной ,что такое коллекция me.X? »
Ключевое слово Me.
Оператор for... each.
тип данных object.
Вообще на ресурсе много полезного, можно почитать с начала.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 11-03-2016 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Не работает скрипт смены цвета

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
После смены процессора ПК не работает. Mc_Smog Непонятные проблемы с Железом 3 10-03-2014 18:58
VBS/WSH/JS - Не корректно работает VBS-скрипт NoBrain Скриптовые языки администрирования Windows 3 11-02-2014 16:05
CMD/BAT - [решено] скрипт для автоматической смены маршрутов moobi Скриптовые языки администрирования Windows 6 26-12-2012 23:55
VBS/WSH/JS - скрипт смены пароля локального админа sp372 Скриптовые языки администрирования Windows 1 12-09-2011 17:07
Не работает скрипт на Perl Rudy Вебмастеру 1 18-06-2004 19:22




 
Переход