Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142

Check Box Точность как на экране

30.01.2020, 22:56. Показов 1805. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как сделать, чтобы Check Box на вкладке своей надстройки показывал и переключал состояние точность как на экране???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2020, 22:56
Ответы с готовыми решениями:

Как использовать Check Box?
Проблема с использованием Check Box. Есть скрипт GUID и скрипт с основной программой. Нужно нарисовать график (или несколько графиков) в...

Как инициализировать Check Box
Как инициализировать чекбокс, если true чтобы галка в окошке стояла?

Как добавить в GRID компонент Check box
Check box нужен для отметки. как выбор. как его можно добавить в грид?

19
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.05.2020, 00:02  [ТС]
Вывел себе на вкладку надстройки Check Box, который ставит и убирает флажок с настройки "Точность как на экране":
Visual Basic
1
2
3
4
5
6
7
Public Sub ScreenAccuracyR(rc As IRibbonControl, isButtonChecked As Boolean)
    If isButtonChecked = True Then
        ActiveWorkbook.PrecisionAsDisplayed = True
    Else
        ActiveWorkbook.PrecisionAsDisplayed = False
    End If
End Sub
Как сделать, чтобы при открытии любой книги проверялось состояние флажка настройки "Точность как на экране" и передавалось в мой Check Box??
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.05.2020, 10:07
Sisin, Так опубликовали бы весь код и схему.

P.S. Если третьего состояние не будет, то достаточно :

Visual Basic
1
ActiveWorkbook.PrecisionAsDisplayed = isButtonChecked
1
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.05.2020, 13:17  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
Так опубликовали бы весь код и схему.
Другого кода для Check Box нет. Я что-то упускаю??

Цитата Сообщение от pashulka Посмотреть сообщение
1
ActiveWorkbook.PrecisionAsDisplayed = isButtonChecked
pashulka, я так и хотел сделать, но не могу понять как сделать, чтобы работал и код ActiveWorkbook.PrecisionAsDisplayed = isButtonChecked при открытии книги и предыдущий макрос.
Visual Basic
1
2
3
Private Sub Workbook_Open()
 
End Sub
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.05.2020, 19:59
Sisin, Чтобы контролировать открытие/активацию всех книг, используйте событие приложения. В Вашей же теме, в пятом сообщении, есть именно такой пример. Вам же останется только изменить событие на нужное и при открытии/активации книг менять состояние "флажка". В качестве костыля, можно мучить событие getPressed контрола...
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.05.2020, 23:03  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
Sisin, Чтобы контролировать открытие/активацию всех книг, используйте событие приложения. В Вашей же теме, в пятом сообщении, есть именно такой пример. Вам же останется только изменить событие на нужное и при открытии/активации книг менять состояние "флажка". В качестве костыля, можно мучить событие getPressed контрола...
По этой логике я и действовал, именно по этому сообщению)
Но не выходит каменный цветок.

Добавлено через 2 часа 36 минут
Моя проблема в том, что макрос записан в мою надстройку xlam, а в ней он не работает:

Visual Basic
1
2
3
Private Sub Workbook_Open()
    Call Test 
End Sub
Visual Basic
1
2
3
4
5
6
7
Sub Test()
    If ActiveWorkbook.PrecisionAsDisplayed = False Then
        MsgBox "Галки нет"
    Else
        MsgBox "Галка стоит"
    End If
End Sub
Если макрос будет записан просто в книгу с поддержкой макросов xlsm, то все работает.

Если я заменю ActiveWorkbook на ThisWorkbook, то обращение будет к моей надстройке xlam, а нужно к книге, которая загружается после надстройки.

Как быть??
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.05.2020, 23:14
Событие Open выполняется в т.ч. и при открытии надстройки .xlam
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.05.2020, 23:36  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
Событие Open выполняется в т.ч. и при открытии надстройки .xlam
Никто и не спорит. Вопрос не в этом.

Добавлено через 10 минут
Вопрос не в этом, а в том как прочитать значение PrecisionAsDisplayed при загрузке книги?
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
30.05.2020, 23:42
В третий раз повторяю, надо использовать события приложения.
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
30.05.2020, 23:51  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
В третий раз повторяю, надо использовать события приложения.
Какие события, кроме Workbook_Open, я могу использовать в моем случае?
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 00:57
Sisin, я не попугай, что повторять одно и тоже бесконечно. Всё, что нужно для решения задачи есть здесь.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 10:40
А если нужно готовое решение, то его можно найти здесь, там же, наличествует и ссылка на файл-пример.
1
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
31.05.2020, 14:09  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
А если нужно готовое решение, то его можно найти здесь, там же, наличествует и ссылка на файл-пример.
Спасибо, конечно. И за терпение тоже.
Но это не решение проблемы. Все что там написано я уже сделал.

Я не могу передать значение true свойству PrecisionAsDisplayed при открытии книги.

Visual Basic
1
2
3
4
5
Private Sub Workbook_Open()
 
    ActiveWorkbook.PrecisionAsDisplayed = True
    
End Sub
Если данный код стоит прописан в xlsm, то все работает, если в xlam - то нет.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 14:16
А ничего, что файл-пример, это именно .xlam ?

и раз я такой терпеливый, то могу в пятый раз повторить, что нужно использовать событие приложение, и оно там есть m_appXL_WorkbookActivate. Единственный нюанс, это то, что Me.RibUI может быть Nothing (во всяком случае, у меня такая беда приключилась), поэтому, имеет, смысл добавить проверку.
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
31.05.2020, 14:43  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
и раз я такой терпеливый, то могу в пятый раз повторить, что нужно использовать событие приложение, и оно там есть m_appXL_WorkbookActivate. Единственный нюанс, это то, что Me.RibUI может быть Nothing (во всяком случае, у меня такая беда приключилась), поэтому, имеет, смысл добавить проверку.
Прошу прощения, но я не могу разобраться в этом моменте. Поэтому если Вы 10 раз повторите, что надо использовать событие приложение, мне это не поможет. Второй день просто ради того, чтобы разобраться в этом я ломаю голову, т.к. не сталкивался с этой проблемой ранее. Если Вы можете помочь мне разобраться с этим на пальцах, то буду Вам очень признателен.

PS: по ссылке на файл-пример CheckboxEnable.xlam, открыв который кода не наблюдается. Открывал в Excel 2019.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 14:54
Код наличествует в модулях ThisWorkbook, Module1 и CAppEvt
Миниатюры
Check Box Точность как на экране  
1
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
31.05.2020, 15:02  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
Код наличествует в модулях ThisWorkbook, Module1 и CAppEvt
Дело в том, что при открытии у меня вообще нет CheckboxEnable.xlam в окне проектов.
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 15:25
Даже не смешно, Вы зачем собираетесь создавать свою надстройку, если не хотите разобраться с принципом её работы ?

Файл-Параметры-Надстройки-Управление: Надстройки Excel - Перейти-Обзор-выбор файла-Ok
0
0 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 142
31.05.2020, 16:48  [ТС]
Цитата Сообщение от pashulka Посмотреть сообщение
Файл-Параметры-Надстройки-Управление: Надстройки Excel - Перейти-Обзор-выбор файла-Ok
В Excel 2019 она не открывается. В 2010 открылась.

Добавлено через 1 час 0 минут
Вроде работает как я хотел. pashulka, спасибо))

Эта книга:
Visual Basic
1
2
3
4
5
6
7
Option Explicit
 
Private Sub Workbook_Open()
 
    Set g_clsAppEvt = New CAppEvt
    
End Sub
Modules - Module1
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
 
Public g_clsAppEvt As CAppEvt
 
Public Sub GetPressed(control As IRibbonControl, ByRef returnedVal)
    returnedVal = g_clsAppEvt.ChkBoxPressed
End Sub
 
Public Sub PageSetupOnAction(control As IRibbonControl, pressed As Boolean)
    If pressed = True Then
        ActiveWorkbook.PrecisionAsDisplayed = True
    Else
        ActiveWorkbook.PrecisionAsDisplayed = False
    End If
End Sub
Class Modules - CAppEvt
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
 
Public ChkBoxPressed As Boolean
Public BookName As String
Public RibUI As IRibbonUI
Private WithEvents m_appXL As Application
 
Private Sub Class_Initialize()
    Set m_appXL = Application
End Sub
 
Private Sub m_appXL_NewWorkbook(ByVal Wb As Workbook)
 
    If ActiveWorkbook.PrecisionAsDisplayed = True Then
        Me.ChkBoxPressed = True
    End If
    
    If ActiveWorkbook.PrecisionAsDisplayed = False Then
        Me.ChkBoxPressed = False
    End If
    
End Sub
 
Private Sub m_appXL_WorkbookActivate(ByVal Wb As Workbook)
 
    If ActiveWorkbook.PrecisionAsDisplayed = True Then
        Me.ChkBoxPressed = True
    End If
    
    If ActiveWorkbook.PrecisionAsDisplayed = False Then
        Me.ChkBoxPressed = False
    End If
    
End Sub
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
31.05.2020, 17:25
Зачем плодить странности

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Public Sub PageSetupOnAction(control As IRibbonControl, pressed As Boolean)
 
    ActiveWorkbook.PrecisionAsDisplayed = pressed
 
End Sub
 
Private Sub m_appXL_WorkbookActivate(ByVal Wb As Workbook)
 
    Me.ChkBoxPressed = Wb.PrecisionAsDisplayed
    
End Sub

P.S. При создании новой книги - всё равно будет выполнено событие WorkbookActivate, поэтому в использовании NewWorkbook нет смысла, и автор его тоже не мучает.


Учитывая, что активной книги может и быть, например, если закрыть книги, но не приложение, то более разумным будет так :

Visual Basic
1
2
3
4
5
6
7
Public Sub PageSetupOnAction(control As IRibbonControl, pressed As Boolean)
'
' Code for onAction callback. Ribbon control checkBox
'
    If Not ActiveWorkbook Is Nothing Then _
       ActiveWorkbook.PrecisionAsDisplayed = pressed
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2020, 17:25
Помогаю со студенческими работами здесь

Как Яндекс сделал скрываемые check box?
Вот справа на панели есть такие синие треугольники при нажатии на которых скрываются или показываются дополнительные элементы html: check...

Check Box - как поменять цвет фона или текста?
Приветствую уважаемые гуру. Подскажите как в обычном чекбоксе (выполненом в виде кнопки pushlike) поменять цвет фона или текста? ...

Как сделать так, чтобы при наведении курсора на папку, слева появлялся check box?
И в какой винде можно?

вопрос по Check Box
Всем доброго времени суток! Вопрос наверно немного глупый, но я не очень силён в формулахю Существует Checkbox. В нём формула ...

Check Box Activation
Уважемые форумчане, Помогите пожалуйста скорректировать следующий код.. Есть строки таблицы и напротив каждой строки стоит чекбокс,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru