Страницы: 1
RSS
Как выделить не активную ячейку на которую наведен курсор мыши?
 
Соратники,
совершенно случайно наткнулся на интересное решение (у одного итальянца) для визуализации и не знаю, было ли оно тут описано. Eсли было, то можно тему грохнуть, если нет, то, на мой взгляд, достойно копилки.

Конечно это не позволят определить адрес произвольной ячейки листа, но интересующую область обработать можно.
Простота меня поразила
В основе функция Hyperlink, которая вызывает функцию. Я для примера описал её так
Код
Function onmouse(ByVal val, ByVal ValName As String)
    Application.Evaluate(ValName).Value = val
End Function
В отличии от танцев с бубном и изменения значений других ячеек из функции листа Hyperlink вызовет функцию по событию и это позволяет менять значение на листе.
Собственно все остальное - дело техники. В данном случае условное форматирование. "Нули" обрамляющие - для того чтобы сбросить значение если его не надо оставить как в варианте 3

В примере области обработки  - серые.
По вопросам из тем форума, личку не читаю.
 
БМВ, когда-то столкнулся с таким решением.
При одной двух формулах работает все гуд.
Если использвать более 2000-3000 (как у заказчика было) ексель глох намертво при отрытии файла.
пришлось переписывать структуру  файла.
да согласен, пример на 5+
Изменено: ivanok_v2 - 09.11.2018 11:40:32
 
БМВ, спасибо за интересный пример. Однозначно в копилку.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
ivanok_v2, Думаю проблема была не в самом решении а в его реализации. размножил на 2000 строк вариант 3 , никаких висяков.
По вопросам из тем форума, личку не читаю.
 
БМВ, спс за експеримент
 
Я завис. Все отбросил и завис.
Спасибо. Это же насколько нужно повернуть (перевернуть?) мозги, чтобы до такого нестандартного додуматься? :)

ivanok_v2 вон тоже в шоке - непонятно как шрифт покрасил :)
 
Было бы здорово, если бы макрос очищал неактивные ячейки, на которые наведен курсор)))! На примере ластика в paint....)))
 
Попробовал поставить эксперимент:
Каким способом зафиксировать 5 в ячейке А1, но указатель мыши вывести за границу области А1:F5.

Получилось сделать в следующей последовательности:
1. навести мышку на ячейке D3
2. вызвать меню ячейки (ПКМ)
3. увести мышь в свободное поле таблицы и убрать меню ячейки при помощи ЛКМ
 
IKor, Ну тут могу только напомнить фразу.
"Дай дураку стеклянный орган, он его сломает и руки порежет."  

Естественно все нужно обрамлять дополнительным кодом и прочим, но это дальнейшее развитие темы и способа.
По вопросам из тем форума, личку не читаю.
 
Здравствуйте, Михаил! Спасибо за находку!
Кстати, в таком (кешированном) варианте функция из #1 работает живее:
Код
Function onmouse(ByVal Val, ByVal ValName As String)
    Static oVal, oValname As String
    If oVal = Val And oValname = ValName Then Exit Function
    oVal = Val: oValname = ValName
    Application.Evaluate(ValName).Value = Val
End Function
Владимир
 
sokol92, Да, так лучше, но нужно  чтоб ошибка была  иначе гиперссылка начинает работать :-). вот так лучше

Код
Function onmouse(ByVal Val, ByVal ValName As String)
    Static oVal, oValname As String
    If oVal <> Val Or oValname <> ValName Then
    oVal = Val: oValname = ValName
    Application.Evaluate(ValName).Value = Val
    End If
End Function


просто на базе этого сделал выбор диапазона. Выбор дня, клик на нем, выбор второго дня. клик на нем.
По вопросам из тем форума, личку не читаю.
 
Любопытно. А Evaluate зачем? Более быстрая конструкция
Код
Range(ValName) = Val

не работает? Тот же вопрос и про модуль листа.
Владимир
 
Владимир, я ж стратегию вырабатываю. :-)  Вечер пятницы.
+ +
Изменено: БМВ - 09.11.2018 20:14:43
По вопросам из тем форума, личку не читаю.
 
Off. Я был на экскурсии по фабрике в горах SCO, выпускающей изделие №1 (эту марку) из #13. Главный инженер сказал, что никаких №2 и №3, только можно добавить чайную ложку хорошей воды для раскрытия вкуса. Надеюсь, модераторы не сочтут скрытой рекламой. :)  
Владимир
 
Off
Владимир. Не думаю что это совет можно отнести к купажированному продукту из супермаркета.
Односолодовый - реально интересно,
а все , включая раскрученный    - фуфло.

Так, вернемся к Excel

Range(ValName) = Value - не работает. Лист не известен. нужно тогда что-то допиливать, но на функции лита  конечно Range. можно, если оно  на этом листе, а если нет?
, но я как обычно пас. Макросы не мое.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Range(ValName) = Value - не работает.
Как обычно, восхищаюсь Вашей эрудицией.
А у меня в #11 (вроде как) работает (на обоих листах, только Val, а не Value). Что я не так делаю?
Изменено: sokol92 - 09.11.2018 21:18:07
Владимир
 
Цитата
sokol92 написал:
Что я не так делаю?
Владмир, работает? - не трогайте. :-). Думаю все остальные опции и расширения, оптимизации уже за пределы темы выходят. Мне очень хотелось поделится находкой , первоисточник тут, последние 2 файла. И датированы 13м годом.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
не позволят определить адрес произвольной ячейки листа
Миш, вот от ZVI вариант, который позволяет это сделать )
 
Юрий, да, я видел это как-то, но там цикл крутится, процессор греет :-) .
По вопросам из тем форума, личку не читаю.
 
2014 год Ролловер эффект в Excel
Алексей М.
 
АlехМ, Алексей, да, все новое - хорошо забытое старое :-). Я уже потом на статьи от 2011 натыкался. Это как навязчивая реклама от гугл, стоит поискать потом на каждом сайте она :-)
По вопросам из тем форума, личку не читаю.
 
Скажите почему этот файл - выдает ошибку на excel2013х64 и как ее исправить ?
 
Василиса Лукьянчикова,  конечно тема немного не об этом, но раз уж та в архиве, то если не ошибаюсь
просто
Код
Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
заменить на
Код
#If VBA7 Then
    Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
#Else
    Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Long
#End If


Разница именно в разрядности версии офиса.
Изменено: БМВ - 13.11.2018 10:17:50
По вопросам из тем форума, личку не читаю.
 
БМВ, это очень сильное колдунство  :D
спасибо за очень необычную фишку — голосую ЗА перемещение в копилку!  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
БМВ, спасибо.
Поняла.
 
Да. Отличная тема. Несколько лет назад тоже нашёл похожий файлик. Когда открыл, был приятно удивлён и долго вникал в него. Поэтому поделюсь тут. Не знаю где нашёл, но в копилку положил себе.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, может тут было http://optionexplicitvba.blogspot.com/2012/06/period-table-of-elements-in-excel.html
По вопросам из тем форума, личку не читаю.
 
БМВ, Не, брал точно не тут, но по ходу тут оригинал где вы показали. Я на каком-то форуме вытянул вроде. Видимо кто-то тоже делился.  :)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
Страницы: 1
Наверх