Страницы: 1
RSS
Исчезают данные в строке состояния при "не активном" окне
 
Добрый день.

Недавно перешел на 2013 версию Excel с 2010-ой по кое-каким причинам. В принципе всем доволен, но вот есть один нюанс, которого не было в 2010 версии.
Спрошу сразу: можно ли в 2013 версии настроить строку состояния таким образом, что бы значения, указанные на ней (сумма выделенных ячеек, их количество и т.д.), отображались всегда,  даже когда окно не активно?

Дело в том, что мне приходится работать одновременно с двумя открытыми окнами (разделяю каждое на пол экрана) и переписывать вручную итоговую сумму (и не только) выделенных ячеек из одного окна в другое. В 2010 версии это было приятным. Когда выделял ячейки и альтабался в другое окно, то сумма тех ячеек в строке состояния оставалась видна. Смотришь на нее и не глядя на клавиатуру, набираешь её в своей таблице.
А в 2013 версии (пробовал и 2016), данные в строке состояния пропадают, когда перехожу куда-либо (то есть делаю это окно не активным). И по скольку цифры у меня выходят большие (запоминать их каждый раз не вариант, много времени в итоге займет), то это становится уже не очень приятным занятием. :(

Можно ли этот момент настроить так же, как было в 2010 версии? Или же это теперь такая особенность в Excel от 2013 и старше?
Изменено: Jasdero - 16.09.2019 13:19:54
 
Думаю Вам нужно что-то типа этого: https://www.planetaexcel.ru/techniques/11/223/
 
Андрей_26, мм, скорее нет, чем да :) Там описываются макросы по изменению данных, отображающихся в этой строке. Мне же хватает того, что она уже умеет отображать. Что бы моя проблема стала более понятной, вот скриншот с примером (2010 версия), где выделены 3 ячейки с простыми числами и в строке состояния отображаются данные (в моем случае, это сумма ячеек, их количество и среднее значение):
Скрытый текст

И в работе между двумя экселями, я альтабаюсь из одного окна в другое и записываю суммы всех ячеек, с которыми работаю.
Только вот начиная с 2013 версии, когда альтабаюсь на другое окно, вся информация на этой строке состояния пропадает, потому что окно перестало быть активным, в этом и проблема, мне нужно что бы информация не пропадала, а оставалась видимой.

Ах и да, я только что заметил, что информация пропадает только в том случае, когда я переключаюсь на другое окно именно Экселя! То есть если просто сделать окно не активным, например нажал на рабочий стол или открыл папку, данные всё так же видны. Выходит, что они становятся невидимыми, только когда переключаюсь на другие эксель окна.

Мне бы как-то разрешить показывать данные строки состоянии сразу на 2+ открытых окнах, как было во всех версиях до 2013, а не ограничиваться только одним.
 
Jasdero, есть подозрение, что раньше у Вас две книги были открыты в разных экземплярах ERxcel, а теперь в одном.
 
Юрий М, вооо, во во, что-то в этом роде, да, но тогда файлы открывались все же не в одном Excel окне, а в отдельных (как-то через реестр это сделал, что бы можно было альтабаться, а до этого возможно как вы и говорили, открывались в одном экземпляре). А как в 2013 версии сделать подобное? Что бы тоже в одном экземпляре файлы запускались, дабы строка состояния не пропадала между окнами в будущем.
Изменено: Jasdero - 16.09.2019 15:56:55
 
Jasdero, я предложил вариант с макросом. Макрос соответственно нужно написать, на подсчет суммы выделенных ячеек. Тогда в нижнем левом углу книги Excel появится результат, который не исчезнет при переходе между Книгами. И он кстати будет отражаться во всех книгах (протестировал пример по ссылке), пока снова не перезапустите макрос. Это как возможный вариант. А проблему я вашу понял, сам протестировал, реально в строке состояния пропадают все данные.
 
Андрей_26, понял. Поискал макросы на сумму значений выделенных ячеек, везде почучуть насобирал, где-то лишнее убрал :D В общем получился такой макрос
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim d As Range, summ As Double
For Each d In Selection
  If IsNumeric(d.Value) Then
    summ = summ + d
  End If
Next
    Application.StatusBar = summ
End Sub
Вроде все отлично работает, но есть проблема, макрос вроде как сохраняю, однако после закрытия/открытия, в VBA этого кода уже нет, что не так Т_Т
Вот скриншот, где я писал макрос, а затем сверху просто нажал на дискету:
Скрытый текст


Попробовал забросить книгу с макросом в путь "...\Microsoft Office\Office15\XLSTART", но при запуске какой-нибудь книги, в добавок открывается еще и та, что в этой папке лежит :( + макрос работает только из нее, на другие книги не реагирует.
Наведите меня, куда макрос бросить для общего использования, а не только из одной книги и как сохранить, что бы не какие левые книги потом не открывались :D
Изменено: Jasdero - 17.09.2019 14:27:40
 
Цитата
Юрий М написал:
есть подозрение, что раньше у Вас две книги были открыты в разных экземплярах ERxcel, а теперь в одном.
Возможно, Вам окажется полезной эта статья:
Как открыть новый Excel в отдельном окне
 
Не, благодарю, мне уже посоветовали метод с макросом и когда он включен, то все работает как раз так, как нужно. Можно сказать пол дела сделано! :D
Проблема только в том, как сделать так, что бы он работал не только в той книге, где я его создал, а во всех книгах и всегда.

Можно конечно просто взять и сохранить макрос в файле Personal.xlsb, но я щас попробовал так, он автоматически не работает, нужно после каждого выделения использовать сочетание клавиш для этого макроса .. Вот можно было бы запустить 1 раз и чтоб автоматически работал ....
Изменено: Jasdero - 17.09.2019 15:34:55
 
Надстройку сделайте.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Jasdero написал:
Вот можно было бы запустить 1 раз и чтоб автоматически работал
Как отследить событие(например выделение ячеек) в любой книге?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А если выделить весь лист-эксель виснет наглухо.
И
Код
If Cells.Select Then Exit Sub 
не сильно помогает.
Код
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'If Cells.Select Then Exit Sub
Dim d As Range, summ As Double
For Each d In Selection
  If IsNumeric(d.Value) Then
    summ = summ + d
  End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim CellCount As Variant, rng As Range
    For Each rng In Selection.Areas     'перебираем все выделенные области
        RowsCount = rng.Rows.Count                          'число строк
        ColumnsCount = rng.Columns.Count                    'число столбцов
        CellCount = CellCount + RowsCount * ColumnsCount    'накапливаем общее число ячеек
    Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Application.StatusBar = "СУММА: " & summ & "   КОЛИЧЕСТВО: " & CellCount
End Sub
 
Цитата
mamalot написал:
выделить весь лист-эксель
ну уж извините - но это кажись уже из другой оперы песнь. Посчитайте сколько будет 1048576 умножить на 16384 и сделайте выводы о том, что происходит в этом куске:
Код
For Each d In Selection
Вы же перебираете ВСЕ ячейки листа.
Вообще в случае, когда нужна просто сумма всех выделенных ячеек(а в Вашем случае с указанным циклом это сумма вообще всех выделенных ячеек) куда продуктивнее использовать Application.Sum(Selection) или уж цикл тогда по всем ячейкам каждой области. Будет быстрее в разы.
А строка
Код
If Cells.Select Then Exit Sub
вообще непонятно что должна делать. Select это метод выделения и использовать в таком контексте его нельзя. Скорее всего хотелось сделать что-то вроде:
Код
If Selection.Count = Cells.Count Then Exit Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Как отследить событие(например выделение ячеек) в любой книге?
Спасибо за ссылку. Теперь стало понятней, как хоть создается надстройка. :)

mamalot, мне весь лист выделять и не нужно. Обычно я сначала выделяю около 100 строк в 1-2 столбика, что бы удалить лишние данные, а уже затем каждый раз выделяю всего по 5+ строчек в одном столбике для подсчета сумм, так что по идеи в моём случае зависать не должно :D но все же позаимствую ваш код, поэтому спасибо :)
Скажу сразу, в этом деле я не разбираюсь, полный ноль, не когда не лазил по таким местам экселя, т.к. у меня совсем другая специальность работы, поэтому пришлось на скорую руку в интернете искать этот код, пока время было.

Только вот ваш код почему-то не работает, пока не исправлю в первой строчке слово App на Workbook.

Что-то все равно не выходит :(

Вот моя последовательность действий:
Создал чистый файл Excel, вставил код и в ЭтуКнигу, и в созданный здесь же модуль (на всякий). Затем сохранил как файл надстройки под названием 1.xlam и всё закрываю. После чего открываю любой файл с поддержкой макросов, захожу в параметры, активирую эту надстройку:

Скрытый текст

И жму ОК, но ничего не меняется, макрос так же не работает, хотя если код вставить конкретно в ЭтуКнигу ЭТОГО же файла, то всё окей, т.е. сам по себе код верный, просто не вызывается почему-то.

Что на этот раз я сделал не так? >_<
Извините, что у меня постоянно какие-то косяки вылезают ... Из-за работы не могу сильно отвлекаться, поэтому не исключено, что упустил какую-то деталь ... приходится делать все очень быстро.
Изменено: Jasdero - 18.09.2019 11:06:11
 
Jasdero VBAProject(PERSONAL.XLSB) - личная книга макросов в "ЭтаКнига" (так будет работать во всех открытых книгах эксель). Или в "ЭтаКнига" конкретного файла (так будет работать только в этом файле).
Код
Public WithEvents app As Application
Private Sub Workbook_Open()
  Set app = Application
End Sub
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim d As Range, summ As Double
For Each d In Selection
  If IsNumeric(d.Value) Then
    summ = summ + d
  End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim CellCount As Variant, rng As Range
    For Each rng In Selection.Areas     'перебираем все выделенные области
        RowsCount = rng.Rows.Count                          'число строк
        ColumnsCount = rng.Columns.Count                    'число столбцов
        CellCount = CellCount + RowsCount * ColumnsCount    'накапливаем общее число ячеек
    Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=120771&TITLE_SEO=120771-ischezayut-dannye-v-stroke-sostoyaniya-pri-ne-aktivnom-okne
    Application.StatusBar = "СУММА: " & summ & "   КОЛИЧЕСТВО: " & CellCount
End Sub
Только насчёт выделения всего листа: сейчас не надо, а потом понадобится - и, как результат, потеря несохраненных данных (например).

P.S. Файл не хочет загружаться.
Изменено: mamalot - 18.09.2019 12:03:53
 
mamalot, оооо, работает!!! Безумно тебе благодарен! Даже не представляешь на сколько :D Очень выручил, спасибо !!

Только 1 вопрос еще. После того, как создал Personal (путем создания обычного макроса), теперь при открытии какого-либо файла, так же стало открываться еще одно Excel окно, пустое, то есть это и есть Personal, при помощи которого работает макрос.
Но вот вопрос, как его скрыть?? В интернете говорят, что вообще он как скрытый должен запускаться, а у меня видимый. И когда закрываю свой файл, приходится закрывать еще и это окно:

Скрытый текст
Изменено: Jasdero - 18.09.2019 12:13:52
 
Ааа, всё, отбой. У меня оказывается после установки пакета MS Office 2013, еще UbitMenu была установлена, которая доп. меню из старой версии MS Office добавило. И файл надстройки, отвечающий за это, хранился там же где и Personal. Попробовал удалить UbitMenu файл (все равно этим старым меню не пользуюсь) - и всё пошло отлично.

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

Спасибо большое еще раз всем за помощь и что потратили на меня время!! Моему счастью нет предела :D Жалко вам здесь плюсик в карму нельзя поставить, так бы накидал всем :)

Пользуясь случаем, хочу спросить напоследок, а реально ли изменить формат отображаемых чисел, что бы тысячные цифры отделялись? (пример на скриншоте снизу). Только цифры могут быть любыми, как 10 000, так и 100 000.
Скрытый текст

Если нельзя, либо требует приличного изменения кода, то и бог с ним, не нужно больше тратить время. Не особо мешает в принципе, просто приятно, когда красиво :)  
Изменено: Jasdero - 18.09.2019 13:01:01
 
Я не нашел. Не знаю.
 
Цитата
Jasdero написал:
Пользуясь случаем, хочу спросить напоследок, а реально ли изменить формат отображаемых чисел, что бы тысячные цифры отделялись? (пример на скриншоте снизу). Только цифры могут быть любыми, как 10 000, так и 100 000.
Выделяете ячейку (или весь столбец), жмете правой кнопкой мыши, выбираете формат ячеек, далее выбираете финансовый. В выпадающем окне "Обозначения" - выбираете "нет". Жмете "ок".
 
Андрей_26, имелось ввиду отображаемых чисел в строке состояния, выводимых, выше написанным, макросом :D
Изменено: Jasdero - 18.09.2019 14:40:46
 
Цитата
Jasdero написал:
имелось ввиду отображаемых чисел в строке состояния
используйте функцию Format(число, "формат")
Но конкретный синтаксис подсказывать не буду, т.к. это никакого отношения к текущей теме не имеет и нарушает правила. Следовательно все получим по шапке от модераторов и это
Цитата
Jasdero написал:
Пользуясь случаем
не прокатит. Правила есть правила :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Jasdero, как-то так:
Код
Public WithEvents app As Application
Private Sub Workbook_Open()
  Set app = Application
End Sub
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=120771&TITLE_SEO=120771-ischezayut-dannye-v-stroke-sostoyaniya-pri-ne-aktivnom-okne
Dim d As Range, summ As Double
If Target.Columns.Count > 100 Then Exit Sub 'выходим если выделен весь лист (сейчас 100 столбцов)
For Each d In Selection
  If IsNumeric(d.Value) Then
    summ = summ + d
  End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim CellCount As Variant, rng As Range
    For Each rng In Selection.Areas
        RowsCount = rng.Rows.Count
        ColumnsCount = rng.Columns.Count
        CellCount = CellCount + RowsCount * ColumnsCount
    Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Mysumm = Format(summ, "#,##0.000") 'после точки регулируем кол-во отображаемых нулей после запятой
    Application.StatusBar = "СУММА: " & Mysumm & "   КОЛИЧЕСТВО: " & CellCount
End Sub
Модераторам: прошу прощения если сильно нарушаю.
 
mamalot, ох, благодарю тебя за помощь, "снова" :) Здоровья тебе и твоим близким!
Ну, теперь вопросов точно больше нет. :D Спасибо всем за отзывчивость и помощь!

Тему можно закрывать.
Изменено: Jasdero - 19.09.2019 11:20:09
Страницы: 1
Наверх