PDA

Показать полную графическую версию : Спойлер-кнопка


victor21043
25-02-2016, 17:03
Уважаемые пользователи портала,
У Меня есть active-кнопка с кодом:

Private Sub Button_Click()
With Button
.Caption = IIf(.Caption Like "*", "Close page", "English page")
Me.Shapes(1).Visible = .Caption Like "*"
End With
End Sub

Есть текстовое поле.
-Мне нужно, чтобы после нажатия -"открыть" (English page) "показывалось" текстовое поле, потом "закрывалось" (Close page)
-Нужно чтобы кнопка была интерактивна те при открытии сразу (чтобы не надо было всякий раз включать пользователю макросы итд)
Благодарю

Iska
25-02-2016, 17:28
Нужно чтобы кнопка была интерактивна при открытии сразу (чтобы не надо было всякий раз включать пользователю макросы итд) »
Групповой политикой понижаете безопасность макросов Office до «Низкой». Чего крайне не рекомендую делать.

-Мне нужно, чтобы после нажатия открыть (OPEN) показывалось текстовое поле, потом закрывалось (CLOSE) next i »
-Код надо как-то зациклить (for i if end if) »
Поясните подробнее.

victor21043
25-02-2016, 17:41
Я имею нерабочий спойлер
-При нажатии на кнопку "english page" поле данных(белое) "не скрывается"
-По структуре кода VBA не видно циклических операторов,получается код-макроса выполнится один раз?

Спасибо

Iska
25-02-2016, 20:51
(приложен конкретный образец). »
У меня Office 2003, посему могут быть отличия.

-При нажатии на кнопку "english page" поле данных(белое) "не скрывается" »
1. «- English page» — вижу не «кнопку», а «Рисунок».
2. «поле данных(белое)» — вижу «Надпись», а не поле данных.
3. Вижу процедуру обработки нажатия от несуществующего элемента управления «Button» несуществующей формы.
и т.д. Вполне возможно, что всё это есть издержки преобразования из 2010 .docm в 2003 .doc.

-(http://www.cyberforum.ru/vba/thread624214.html) »
Описание верно. Тамошний код работает. Токмо имейте в виду, что это таки не спойлер — место, занимаемое «Надписью», остаётся занятым (сравните, скажем с тутошним спойлером), что хорошо видно, если разместить «Надпись» не за или перед текстом, а в самом текстовом слое: 134408.

-По структуре кода VBA не видно циклических операторов,получается код-макроса выполнится один раз? »
Вы так и не пояснили, для чего там нужен цикл?

victor21043
26-02-2016, 14:55
Почему после конвертации в docm 2010 ничего не работает
Код не был изменён.
Код скорректирован(сommandbutton имя spoller)

Option Explicit
Private Sub spoller_Click()
With spoller
.Caption = IIf(.Caption Like "*", "Close page", "English page")
Me.Shapes(1).Visible = .Caption Like "*"
End With
End Sub

Iska
26-02-2016, 16:42
Думаю добавлять это не нужно »
«Option Explicit» — крайне желателен во всех проектах, дабы не делать нелепых ошибок.

Вот файл в формате 2003 не работает »
Работает. Неправильно, но работает.

Код скорректирован(сommandbutton имя spoller) »
.Caption = IIf(.Caption Like "*", "Close page", "English page")
«.Caption Like "*"»— всегда будет истинным, посему «.Caption»'у у Вас всегда будет присваиваться значение «"Close page"».

Та же самая ошибка и в следующей строке:
Me.Shapes(1).Visible = .Caption Like "*"
— «Shapes.Item(1)» у Вас всегда будет видимым.

Достаточно поменять условия на правильные:
Option Explicit

Private Sub spoller_Click()
With spoller
.Caption = IIf(.Caption = "Close page", "English page", "Close page")
Me.Shapes(1).Visible = .Caption = "Close page"
End With
End Sub

и код будет не просто работать, но и работать правильно.




© OSzone.net 2001-2012