Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2014, 22:54   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию количество кнопок на екране

Можно ли посчитать количество кнопок, которые видны на екране (не скрытые)? Сейчас их 8, а после скрытия строк 1-3 должно быть 6. Файл прилагаю
Вложения
Тип файла: zip кнопки.zip (10.7 Кб, 13 просмотров)
Jaroslav вне форума Ответить с цитированием
Старый 19.11.2014, 11:49   #2
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Код:
ActiveSheet.Buttons.Count
считает количество кнопок на листе. Подскажите, пожалуйста, как посчитать количество кнопок в скрытых строках (столбцах)
Jaroslav вне форума Ответить с цитированием
Старый 19.11.2014, 19:15   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Вот ответ:
Код:
Private Sub Test()
     Dim iList As Worksheet, iButton As Button, iCount&
     
     Set iList = ActiveSheet 'ThisWorkbook.Worksheets(1)
     For Each iButton In iList.Buttons
         With iList.Range(iButton.TopLeftCell, iButton.BottomRightCell)
              If Not (.EntireRow.Hidden Or .EntireColumn.Hidden) Then
                 iCount = iCount + 1
              End If
         End With
     Next
     
     MsgBox "Видимых кнопок (в т.ч. и частично) = " & iCount
End Sub
Jaroslav вне форума Ответить с цитированием
Старый 19.11.2014, 20:09   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

да уж...
оцените точность подсчета количества ВИДИМЫХ кнопок макросом.
Вложения
Тип файла: rar ВидимыеКнопки.rar (12.8 Кб, 11 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.11.2014, 21:02   #5
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Вообще-то в оригинале ответа говорится о том, что для если видимость кнопок действительно нужно ограничивать экраном, то понадобится использовать ActiveWindow.VisibleRange

А это макрос предназначен для подсчёта видимых(в т.ч. и частично) кнопок в рабочем листе, без привязки к экрану.
pashulka вне форума Ответить с цитированием
Старый 19.11.2014, 22:24   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

pashulka, взгляните шире.

допустим, Вы уже написали функцию, которая определяет сколько кнопок пересекаются с ActiveWindow.VisibleRange

я чуть-чуть изменил исходный файл. окройте его.

1. сколько точек Вы видите на экране? (ответ: 2)
2. сколько точек сосчитала бы Ваша гипотетическая функция? (ответ: 1)

нажмите кнопку, читайте подсказку в окне 1-го сообщения (как видите кпопка подписанная как "Кнопка 3" не имеет с ActiveWindow.VisibleRange ничего общего, хотя отчетливо видна на экране)

использовать ActiveWindow.VisibleRange - нужно, но подсчет кнопок в нем не дает ответ на поставленный вопрос.

ответ, есть, но он не очевидный и, видимо, не простой.
собственно по этому в теме еще не опубликован макрос, отвечающий на поставленный вопрос
Вложения
Тип файла: rar ВидимыеКнопки.rar (13.2 Кб, 8 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.11.2014, 22:35   #7
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

IgorGO, Если взглянуть шире, то нужно учитывать наличие закреплённой области, разделение окна, не говоря уже о том, что на экране могут отображаться несколько окон, причём они могут принадлежать разным книгам, эти окна могут перекрываться и т.д. и т.п. ...
pashulka вне форума Ответить с цитированием
Старый 19.11.2014, 22:46   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а другие книги и листы... тут отсечены уже вот этим:
Код:
For Each iButton In ActiveSheet.Buttons
(перебираем кнопки активного листа)

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

достойным ответом здесь будет макрос, который посчитает видимые полностью или хоть частично кнопки
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.11.2014, 23:02   #9
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Дык, это отсечение и есть неправильность, разумеется, с Вашей точки зрения ибо, повторюсь, на экране могут быть несколько окон и они могут принадлежать разным книгам.

Так что в идеале, конечно можно попробовать перебирать все окна (Windows) у этих окон все (Panes), но даже это не даст ответа на вопрос, ибо окна могут перекрывать друг друга и VisibleRange выдаст диапазон, кнопки которого не будут видны нашему глазу, но формально будут на экране.
pashulka вне форума Ответить с цитированием
Старый 20.11.2014, 00:18   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

понятно, что как обычно - задача поставлена на намеках

в одном из первых сообщений от автора:
ActiveSheet.Buttons.Count
Цитата:
считает количество кнопок на листе. Подскажите, пожалуйста, как посчитать количество кнопок в скрытых строках (столбцах)
если внимательно почитать, то... но не в этом дело... я не нашел как на основании имеющихся свойств кнопки определить есть она на экране сейчас или нет(((
только проверять пересекаются-ли габариты кнопки с территорией ActiveWindow.VisibleRange, а тут еще вылезло, что закрепленная область не есть частью ActiveWindow.VisibleRange, надо определить видимую часть закрепленной области и пересечение кнопок с ней.

и фиг знает что еще может всплыть. на жто я нарвался во время поисков решения, а действительно, когда окно разбито на несколько, наверняка в каждом будет свой ActiveWindow.VisibleRange
это все можно проверить, но... это не красиво и геморройно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите сделать - программа выводит текст на экран, определяет количество предложений и количество слов (язык С) карен1 Фриланс 4 26.12.2013 21:35
СозданиЕ определенного количество кнопок Giku Помощь студентам 9 07.11.2011 23:35
Задана последовательность чисел в формате:сначала количество цифр в числе, потом - цифры числа. Подсчитать количество. Arn1 Помощь студентам 4 03.10.2011 20:03
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15
Количество кнопок на форме fuv Общие вопросы Delphi 5 25.04.2007 16:33