Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сделать выбранную ячейку не активной. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сделать выбранную ячейку не активной. (Макросы/Sub)
Сделать выбранную ячейку не активной.
lFJl Дата: Среда, 02.09.2015, 09:13 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Доброго дня!
При выделении ячейки мы делаем какое либо действие (например закрашиваем ее) и после этого делаем эту ячейку не активной.

Дальше планирую делать следующее:
1. как можно закрасить несколько ячеек во круг выделенной ячейки
2. сделать условие: если нажали на какую либо ячейку, то повторное нажатие нужно сделать только на одну из закрашенных ячеек, иначе из всех окрашенных ячеек(макросом) убирается заливка, и закраска идет как при первом нажатии.(например, нажали на ячейку C5, закрасился диапазон B4:D6. если следующее нажатие будет по ячейке D6, то закрашиваются дополнительно все крайние ячейки: C5:E7. если мы бы нажали на ячейку F9, тогда убираем заливку с ячеек, которые были закрашены перед этим нажатием, и закрашиваем ячейки во круг F9. это E8:G10)

Если это подскажите, огромное спасибо! :)
К сообщению приложен файл: 2635397.xlsm (13.8 Kb)
 
Ответить
СообщениеДоброго дня!
При выделении ячейки мы делаем какое либо действие (например закрашиваем ее) и после этого делаем эту ячейку не активной.

Дальше планирую делать следующее:
1. как можно закрасить несколько ячеек во круг выделенной ячейки
2. сделать условие: если нажали на какую либо ячейку, то повторное нажатие нужно сделать только на одну из закрашенных ячеек, иначе из всех окрашенных ячеек(макросом) убирается заливка, и закраска идет как при первом нажатии.(например, нажали на ячейку C5, закрасился диапазон B4:D6. если следующее нажатие будет по ячейке D6, то закрашиваются дополнительно все крайние ячейки: C5:E7. если мы бы нажали на ячейку F9, тогда убираем заливку с ячеек, которые были закрашены перед этим нажатием, и закрашиваем ячейки во круг F9. это E8:G10)

Если это подскажите, огромное спасибо! :)

Автор - lFJl
Дата добавления - 02.09.2015 в 09:13
_Boroda_ Дата: Среда, 02.09.2015, 09:46 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Такой вариант
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Target.Count > 1 Then Exit Sub
     col = Range("A1")
     If Target.Interior.Color <> col Then Cells.Interior.Color = xlNone
     r0_ = Target.Row
     c0_ = Target.Column
     r_ = -1 - (r0_ = 1)
     c_ = -1 - (c0_ = 1)
     rr_ = 3 + (r0_ = 1)
     cc_ = 3 + (c0_ = 1)
     Target.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col
End Sub
[/vba]
К сообщению приложен файл: 2635397_1.xlsm (16.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой вариант
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Target.Count > 1 Then Exit Sub
     col = Range("A1")
     If Target.Interior.Color <> col Then Cells.Interior.Color = xlNone
     r0_ = Target.Row
     c0_ = Target.Column
     r_ = -1 - (r0_ = 1)
     c_ = -1 - (c0_ = 1)
     rr_ = 3 + (r0_ = 1)
     cc_ = 3 + (c0_ = 1)
     Target.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 02.09.2015 в 09:46
lFJl Дата: Среда, 02.09.2015, 10:42 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, Спасибо за ответ.
Посмотрел пример - ячейка все же остается активной, вообще реально ее сделать не активной после нажатия?
Еще можете прокомментировать код, хотя бы пару слов на каждую строчку. я начинаю только изучать VBA не совсем понимаю что зачем и как :)
 
Ответить
Сообщение_Boroda_, Спасибо за ответ.
Посмотрел пример - ячейка все же остается активной, вообще реально ее сделать не активной после нажатия?
Еще можете прокомментировать код, хотя бы пару слов на каждую строчку. я начинаю только изучать VBA не совсем понимаю что зачем и как :)

Автор - lFJl
Дата добавления - 02.09.2015 в 10:42
_Boroda_ Дата: Среда, 02.09.2015, 10:57 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Подождите, а какая связь между закраской соседних ячеек и "активностью" ячейки? Вам такси или шашечки красить или активацию убирать (кстати, а зачем)?
Более того - если эта ячейка не активна, то что тогда должно быть активно (только не говорите, что ничего - так не бывает при включенном компьютере)?
Комментарии
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)'при выделении ячейки (ек) на листе
      If Target.Count > 1 Then Exit Sub'если выделено более одной ячейки - выход
      col = Range("A1")'код раскраски смотрим в А1
      If Target.Interior.Color <> col Then Cells.Interior.Color = xlNone'если выделенная ячейка не закрашена нужным цветом, то убираем раскраску со всего листа
      r0_ = Target.Row'номер строки выделенной ячейки
      c0_ = Target.Column'номер столбца
'если выделена первая строка и\или первый столбец, то сместиться выше и\или левее не получается (см. комментарий к последней строке)
'для определения того, на сколько ячеек смещаться, написаны 4 нижеследующих строки
      r_ = -1 - (r0_ = 1)' r0_=1 может дать или true, или false - первое в VBA равно минус 1, второе 0
      c_ = -1 - (c0_ = 1)'
      rr_ = 3 + (r0_ = 1)
      cc_ = 3 + (c0_ = 1)
      Target.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col'от выделенной ячейки прыгаем на одну ячейку вверх и на одну влево, оттуда берем 3 ячейки вниз и 3 вправо и полученное красим
ActiveSheet.Shapes("Rectangle 1").Select'выделение прямоугольника
End Sub
[/vba]
Хотя, добавил еще прямоугольник маленький и строку в макросе в самом низу. После каждого телодвижения этот прямоугольник выделяется, тем самым снимая выделение с листа
К сообщению приложен файл: 2635397_2.xlsm (18.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПодождите, а какая связь между закраской соседних ячеек и "активностью" ячейки? Вам такси или шашечки красить или активацию убирать (кстати, а зачем)?
Более того - если эта ячейка не активна, то что тогда должно быть активно (только не говорите, что ничего - так не бывает при включенном компьютере)?
Комментарии
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)'при выделении ячейки (ек) на листе
      If Target.Count > 1 Then Exit Sub'если выделено более одной ячейки - выход
      col = Range("A1")'код раскраски смотрим в А1
      If Target.Interior.Color <> col Then Cells.Interior.Color = xlNone'если выделенная ячейка не закрашена нужным цветом, то убираем раскраску со всего листа
      r0_ = Target.Row'номер строки выделенной ячейки
      c0_ = Target.Column'номер столбца
'если выделена первая строка и\или первый столбец, то сместиться выше и\или левее не получается (см. комментарий к последней строке)
'для определения того, на сколько ячеек смещаться, написаны 4 нижеследующих строки
      r_ = -1 - (r0_ = 1)' r0_=1 может дать или true, или false - первое в VBA равно минус 1, второе 0
      c_ = -1 - (c0_ = 1)'
      rr_ = 3 + (r0_ = 1)
      cc_ = 3 + (c0_ = 1)
      Target.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col'от выделенной ячейки прыгаем на одну ячейку вверх и на одну влево, оттуда берем 3 ячейки вниз и 3 вправо и полученное красим
ActiveSheet.Shapes("Rectangle 1").Select'выделение прямоугольника
End Sub
[/vba]
Хотя, добавил еще прямоугольник маленький и строку в макросе в самом низу. После каждого телодвижения этот прямоугольник выделяется, тем самым снимая выделение с листа

Автор - _Boroda_
Дата добавления - 02.09.2015 в 10:57
lFJl Дата: Среда, 02.09.2015, 11:55 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
_Boroda_,
О, теперь понятно как это работает! :)
если эта ячейка не активна, то что тогда должно быть

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

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

Пока так.
Если подскажете, как мне за место числа в ячейке использовать значение, или лучше картинку, то это было бы лучше :)
 
Ответить
Сообщение_Boroda_,
О, теперь понятно как это работает! :)
если эта ячейка не активна, то что тогда должно быть

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

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

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

Автор - lFJl
Дата добавления - 02.09.2015 в 11:55
lFJl Дата: Четверг, 03.09.2015, 07:09 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Поэкспериментировал, посмотрите что получилось.
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
col = Range("A1")
     If Target.Count > 1 Then Exit Sub 'если выделено более одной ячейки - выход
     If Target.Interior.Color <> col Then
         If Target.Text = "" Then
             Cells.Interior.Color = xlNone 'если выделенная ячейка не закрашена нужным цветом, то убираем раскраску со всего листа
         Else
             r0_ = ActiveCell.Row 'номер строки выделенной ячейки
             c0_ = ActiveCell.Column 'номер столбца
             r_ = -1 - (r0_ = 1) ' r0_=1 может дать или true, или false - первое в VBA равно минус 1, второе 0
             c_ = -1 - (c0_ = 1)
             rr_ = 3 + (r0_ = 1)
             cc_ = 3 + (c0_ = 1)
             ActiveCell.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col 'от выделенной ячейки прыгаем на одну ячейку вверх и на одну влево, оттуда берем 3 ячейки вниз и 3 вправо и полученное красим
         End If
     Else
         If Target.Interior.Color = col Then
             'Тут нужно действие, которое будет перетаскивать значение из ячейки(имеется в виду ячейка со значением, которая была нажата 1 раз, после которой закрасились соседние ячейки)
         End If
     End If
      
End Sub
[/vba]
К сообщению приложен файл: 8862458.xlsm (13.9 Kb)
 
Ответить
СообщениеПоэкспериментировал, посмотрите что получилось.
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
col = Range("A1")
     If Target.Count > 1 Then Exit Sub 'если выделено более одной ячейки - выход
     If Target.Interior.Color <> col Then
         If Target.Text = "" Then
             Cells.Interior.Color = xlNone 'если выделенная ячейка не закрашена нужным цветом, то убираем раскраску со всего листа
         Else
             r0_ = ActiveCell.Row 'номер строки выделенной ячейки
             c0_ = ActiveCell.Column 'номер столбца
             r_ = -1 - (r0_ = 1) ' r0_=1 может дать или true, или false - первое в VBA равно минус 1, второе 0
             c_ = -1 - (c0_ = 1)
             rr_ = 3 + (r0_ = 1)
             cc_ = 3 + (c0_ = 1)
             ActiveCell.Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col 'от выделенной ячейки прыгаем на одну ячейку вверх и на одну влево, оттуда берем 3 ячейки вниз и 3 вправо и полученное красим
         End If
     Else
         If Target.Interior.Color = col Then
             'Тут нужно действие, которое будет перетаскивать значение из ячейки(имеется в виду ячейка со значением, которая была нажата 1 раз, после которой закрасились соседние ячейки)
         End If
     End If
      
End Sub
[/vba]

Автор - lFJl
Дата добавления - 03.09.2015 в 07:09
lFJl Дата: Четверг, 03.09.2015, 09:01 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Если направите в правильную сторону, буду благодарен! )
 
Ответить
СообщениеЕсли направите в правильную сторону, буду благодарен! )

Автор - lFJl
Дата добавления - 03.09.2015 в 09:01
lFJl Дата: Четверг, 03.09.2015, 09:57 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Хочу сделать следующее:
На листе много чисел(положительных и отрицательных), я нажимаю на любое число, и во круг него закрашивается радиус, на который могу передвинуть это число
Если я передвигаю число на ячейку с числом, то числа складываются в ячейке, куда передвинул, а та ячейка, из которой передвигаю - "чистится". Если число передвинул и значение стало меньше 0, тогда вывести сообщение любое.
 
Ответить
СообщениеХочу сделать следующее:
На листе много чисел(положительных и отрицательных), я нажимаю на любое число, и во круг него закрашивается радиус, на который могу передвинуть это число
Если я передвигаю число на ячейку с числом, то числа складываются в ячейке, куда передвинул, а та ячейка, из которой передвигаю - "чистится". Если число передвинул и значение стало меньше 0, тогда вывести сообщение любое.

Автор - lFJl
Дата добавления - 03.09.2015 в 09:57
lFJl Дата: Четверг, 03.09.2015, 12:40 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Что-то у меня не работает :)
 
Ответить
СообщениеЧто-то у меня не работает :)

Автор - lFJl
Дата добавления - 03.09.2015 в 12:40
RAN Дата: Четверг, 03.09.2015, 15:17 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Саш, потерял?
[vba]
Код
Private Sub Worksheet_Activate()
     ad_ = Selection(1).Address
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеСаш, потерял?
[vba]
Код
Private Sub Worksheet_Activate()
     ad_ = Selection(1).Address
End Sub
[/vba]

Автор - RAN
Дата добавления - 03.09.2015 в 15:17
lFJl Дата: Понедельник, 07.09.2015, 10:14 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Добрый день люди добрые!
Я смог сделать часть того, что мне нужно(смотрим пример).
Дальше у меня есть пара вопросов:
1)как сделать все это без присваивания значений к ячейкам?
2)мне нужно, чтобы после того, как я шагнул, я смог шагать дальше без лишних нажатий на соседние ячейки(линия 31 - там есть комментарий на эту тему. может у кого будет идея, как это сделать?)
К сообщению приложен файл: 0876245.xlsm (14.8 Kb)
 
Ответить
СообщениеДобрый день люди добрые!
Я смог сделать часть того, что мне нужно(смотрим пример).
Дальше у меня есть пара вопросов:
1)как сделать все это без присваивания значений к ячейкам?
2)мне нужно, чтобы после того, как я шагнул, я смог шагать дальше без лишних нажатий на соседние ячейки(линия 31 - там есть комментарий на эту тему. может у кого будет идея, как это сделать?)

Автор - lFJl
Дата добавления - 07.09.2015 в 10:14
_Boroda_ Дата: Понедельник, 07.09.2015, 10:34 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Саш, потерял?

Не, не потерял. Просто не ту версию выложил, а потом поменять забыл
К сообщению приложен файл: 6795700.xlsm (27.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Саш, потерял?

Не, не потерял. Просто не ту версию выложил, а потом поменять забыл

Автор - _Boroda_
Дата добавления - 07.09.2015 в 10:34
lFJl Дата: Четверг, 10.09.2015, 12:38 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Привет всем!
на 1 листе получил примерно то, что я хотел.
На 2 листе хочу сделать примерно тоже самое, только чтобы перемещать фигуры(например прямоугольник)
1) Можете сказать, почему для того, чтобы макрос начал работать так как мне нужно, нужно 3 раза нажать на фигуру.
2) Для удаления цвета заливки со всего листа, я использую [vba]
Код
Cells.Interior.Color = xlNone
[/vba], можете сказать, как удалять только то, что было нарисовано этим макросом [vba]
Код
Range(ad_).Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col
[/vba]
3) У фигуры должно быть положительное значение. При отрицательном значении фигура удаляется
4) Дальше мне нужна возможность создать копию этой фигуры(с возможностью выбрать значение фигуры(от 0 до значения фигуры оригинала))

5) Нужна возможность производить действия с копией аналогичные действиям оригинала
6) Взаимодействие между фигурами: Если фигуры одинакового цвета. Нужна возможность "сливания" две фигуры(например, если мы нажали на фигуру1, появляется радиус, и нажимаем на фигуру2. если она находится в радиусе фигуры1 и того же цвета что и фигура1, то складываются значения фигуры1 и фигуры2, затем фигуру 2 удаляем. Если фигуры разного цвета, то вычитаем значения фигуры1 и фигуры2, оставляем ту, значение которой было больше со значением, которое получилось в процессе вычитания)

Вот...
[moder]Не, ну ладно предыдущий вопрос хоть как-то немного связан с названием темы, но этот-то каким боком сюда?
Короче, нарушение п.5q Правил форума.
К сообщению приложен файл: 7520987.xlsm (21.2 Kb)


Сообщение отредактировал _Boroda_ - Четверг, 10.09.2015, 12:57
 
Ответить
СообщениеПривет всем!
на 1 листе получил примерно то, что я хотел.
На 2 листе хочу сделать примерно тоже самое, только чтобы перемещать фигуры(например прямоугольник)
1) Можете сказать, почему для того, чтобы макрос начал работать так как мне нужно, нужно 3 раза нажать на фигуру.
2) Для удаления цвета заливки со всего листа, я использую [vba]
Код
Cells.Interior.Color = xlNone
[/vba], можете сказать, как удалять только то, что было нарисовано этим макросом [vba]
Код
Range(ad_).Offset(r_, c_).Resize(rr_, cc_).Interior.Color = col
[/vba]
3) У фигуры должно быть положительное значение. При отрицательном значении фигура удаляется
4) Дальше мне нужна возможность создать копию этой фигуры(с возможностью выбрать значение фигуры(от 0 до значения фигуры оригинала))

5) Нужна возможность производить действия с копией аналогичные действиям оригинала
6) Взаимодействие между фигурами: Если фигуры одинакового цвета. Нужна возможность "сливания" две фигуры(например, если мы нажали на фигуру1, появляется радиус, и нажимаем на фигуру2. если она находится в радиусе фигуры1 и того же цвета что и фигура1, то складываются значения фигуры1 и фигуры2, затем фигуру 2 удаляем. Если фигуры разного цвета, то вычитаем значения фигуры1 и фигуры2, оставляем ту, значение которой было больше со значением, которое получилось в процессе вычитания)

Вот...
[moder]Не, ну ладно предыдущий вопрос хоть как-то немного связан с названием темы, но этот-то каким боком сюда?
Короче, нарушение п.5q Правил форума.

Автор - lFJl
Дата добавления - 10.09.2015 в 12:38
lFJl Дата: Четверг, 10.09.2015, 14:16 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 6 ±
Замечаний: 0% ±

Excel 2013
Хорошо, но если я создам этот вопрос в отдельную тему, это не будет нарушение правил? у меня подобное уже было. :)
[moder]Ну это же разные вопросы. А разные вопросы - разные темы.


Сообщение отредактировал _Boroda_ - Четверг, 10.09.2015, 14:21
 
Ответить
СообщениеХорошо, но если я создам этот вопрос в отдельную тему, это не будет нарушение правил? у меня подобное уже было. :)
[moder]Ну это же разные вопросы. А разные вопросы - разные темы.

Автор - lFJl
Дата добавления - 10.09.2015 в 14:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сделать выбранную ячейку не активной. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!