Страницы: 1
RSS
Определить строку по активной картинке
 
Приветствую всех на форуме! Скажите можно ли решить такой вопрос?  
 
На каждую кнопку (картинку) в столбцах F, G, I в ручную назначен  отдельный макрос, макросы различаются лишь тем  что каждый определяет  свою строку  для выполнения действия,  
но действий всего три, убавить, прибавить  в зависимости от значений  
в столбцах  J и K, и третье скрыть строку . Если учесть что  лист создается  
автоматически и позиций достаточно много,  то способ назначать макросы в ручную  
отпадает, но если бы макрос умел вычислить строку с кнопкой  на которую только что нажали и выполнить  
действие на этой строке, тогда можно было бы назначить один макрос на все кнопки разом допустим  в столбце  F,  и тд.  
 
Возможно такое? Или может  есть какой нибудь другой способ? посоветуйте что нибудь.  
   
 
Sub plus_colvo1()  
определить строку на которой находится  кнопка на которую только что нажали  
If Cells(i, 5) < Cells(i, 11) Then Cells(i, 5) = Cells(i, 5) + Cells(i, 10)  
End If  
Next  
End Sub  
Работали бы такие макросы, было бы  удобно :)))
 
Перекликается с соседней темой...  
Sub Test()  
MsgBox "Кнопка/картинка находится в ячейке " & ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address  
End Sub  
Назначьте этот макрос любой кнопке.  
А зачем вообще кнопки? - даблклик или правый клик по ячейке чем хуже?
 
Не совсем понял как использовать ваш вариант в моем случае, всегда пишет  
Run-time error компонент с указанным именем не найден  
 
Я не знаю поняли ли вы что именно мне нужно, но на всякий случай попробую  объяснить вопрос в двух словах:  
В моем примере два листа, на первом листе как раз предстоит выполнять действие  
которое назначало бы всем картинкам в соответствующих столбцах грубо говоря  
вот такую задачу:  
If Cells(i, 5) < Cells(i, 11) Then Cells(i, 5) = Cells(i, 5) + Cells(i, 10)  
и в дальнейшем при клике по любой из этих картинок, действие должно произойти  
в той же строке в какой находится кликаемая картинка  
 
Как именно может выглядеть ваш вариант относительно первого листа моего  
примера?
 
sanhasan,  
Прислушайтесь к совету Юрия и вызывайте процедуру, по событию на листе, а не по клику на шейпу..  
Не, ну если хочется головной боли, то вперед :)
Спасибо
 
Я скорее всего так бы и сделал, вот только бы знать как
 
{quote}{login=sanhasan}{date=12.02.2012 12:29}{thema=}{post}Не совсем понял как использовать ваш вариант в моем случае, всегда пишет Run-time error компонент с указанным именем не найден{/post}{/quote}Скопируйте мой код в общий модуль, затем правый клик по кнопке/фигуре - Назначить макрос. И укажите этот макрос.
 
Не выходит адаптировать ваш код под мою задачу, он выдает сообщение с адресом  
а мне нужно действие на данной строке.
 
Раз есть адрес - узнать строку не проблема:  
Sub Test()  
x = Split(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address, "$")(2)  
MsgBox "Кнопка/картинка находится в строке № " & x  
End Sub
 
Повторюсь: при большом количестве строк использовать какие-либо кнопки непродуктивно. Попробуйте всё же события листа. Вот для даблклик по столбцу А:  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
If Not Intersect(Target, Range("A5:A1000")) Is Nothing Then  
   MsgBox "Активна строка № :" & Target.Row  
End If  
Cancel = True  
End Sub  
Скопируйте это в модуль листа.
 
> x = Split(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address, "$")(2)  
 
Юра, или ты перемудрил, или я чего-то не понимаю)))  
 
y = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row  
x = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column
 
Кончено перемудрил: извлекал из готовой строки, которая УЖЕ была ранее (адрес) :-) Но работает.
 
Да, наверно я тему не правильно обозвал, либо ещё что-то не понимаю  
все варианты работают замечательно, они выдают сообщение с адресом/строкой  
но мне нужно другое, разве есть что то подобное в моем примере на втором листе?  
Возможно вы считаете что я мигом подстрою ваши варианты под свою задачу,  
но это не так.
 
У Вас макросы на КАЖДУЮ строку, а требуется всего ТРИ макроса (по одному на каждый столбец). Как определять номер строки - Вам показали. Что конкретно не получается или непонятно?
 
Просто я не знаю как совместить ваш код с  
If Cells(i, 5) < Cells(i, 11) Then Cells(i, 5) = Cells(i, 5) + Cells(i, 10)    
этим действием, таким образом чтобы результат был таким же как на втором листе моего примера вот и всё.
 
См. пример. Вместо фигур в ячейках символы. Макросы срабатывают на ДаблКлик по ячейке с символом.
 
Ясно Спасибо! ДаблКлик конечно менее удобно, просто нужно быстро корректировать  
список прибл. из 20-30 строк, но раз по другому ни как буду делать так.
 
Что нужно быстро корректировать? О чём Вы?  
Можно и на фигуры повесить - все исходные коды у Вас теперь есть.
 
{quote}{login=Юрий М}{date=12.02.2012 08:44}{thema=}{post}Что нужно быстро корректировать? О чём Вы?  
Можно и на фигуры повесить - все исходные коды у Вас теперь есть.{/post}{/quote}  
 
Если вы откроете мой пример и перейдете на второй лист  
то увидите список из 7 поз. обычно он от 20 до 30 поз. под корректировкой  
я подразумеваю изменение значений в столбце E при помощи как раз этих кнопок.  
 
Вообще вся операция очень проста: открывается список, производится корректировка  
жмем далее и список с исправленными значениями складывается в нужный столбец на др. лист а этот список стирается, вот и все дела все удобно и быстро.  
 
Просто при одном клике всё это гораздо быстрее происходит.
 
Так хотели?
 
Поправка: в макросе Sub clear_()  
строку  
If Cells(Rw, 1) = 1 Then Cells(Rw, 5) = ""  
замените строкой  
Cells(Rw, 5) = ""
 
Ура! Благодарю, теперь можно назначать этот код на все кнопки, и получается  
как раз то что мне нужно.
 
Это макрос (Main) УЖЕ назначен всем имеющимся кнопкам :-) Не забудьте про поправку в моём предыдущем сообщении.
 
Эта тема просто не хочет заканчиваться :)  
Что значит "УЖЕ назначен всем имеющимся кнопкам"    
Я открыл точно такой же список что и в моем примере только вообще  
новый без модулей и макросов, создал новый модуль, вставил ваш код, сохранил  
перезагрузил, проверил кнопки, ничего. тогда я назначил им ваш код,  
все работает.    Не понимаю почему уже назначены  
 
То есть назначать такой макрос нельзя? или можно?  
И еще вопрос в моей книге много листов и макросов не повлияет ли данный макрос  
на другие листы книги?  
Заранее спасибо.  
 
 
поправку в макросе учел
 
{quote}{login=sanhasan}{date=12.02.2012 11:15}{thema=}{post}Что значит "УЖЕ назначен всем имеющимся кнопкам" {/post}{/quote}Это означает ровно то, что написано: всем имеющимся на первом листе фигурам (в количестве 21 шт.) назначен один и тот же макрос.    
Если будете создавать новые строки с аналогичными фигурами, то тоже придётся КАЖДОЙ фигуре назначить этот макрос.
 
Все работает так как надо спасибо!
Страницы: 1
Читают тему
Наверх