Доброго дня! При выделении ячейки мы делаем какое либо действие (например закрашиваем ее) и после этого делаем эту ячейку не активной.
Дальше планирую делать следующее: 1. как можно закрасить несколько ячеек во круг выделенной ячейки 2. сделать условие: если нажали на какую либо ячейку, то повторное нажатие нужно сделать только на одну из закрашенных ячеек, иначе из всех окрашенных ячеек(макросом) убирается заливка, и закраска идет как при первом нажатии.(например, нажали на ячейку C5, закрасился диапазон B4:D6. если следующее нажатие будет по ячейке D6, то закрашиваются дополнительно все крайние ячейки: C5:E7. если мы бы нажали на ячейку F9, тогда убираем заливку с ячеек, которые были закрашены перед этим нажатием, и закрашиваем ячейки во круг F9. это E8:G10)
Если это подскажите, огромное спасибо!
Доброго дня! При выделении ячейки мы делаем какое либо действие (например закрашиваем ее) и после этого делаем эту ячейку не активной.
Дальше планирую делать следующее: 1. как можно закрасить несколько ячеек во круг выделенной ячейки 2. сделать условие: если нажали на какую либо ячейку, то повторное нажатие нужно сделать только на одну из закрашенных ячеек, иначе из всех окрашенных ячеек(макросом) убирается заливка, и закраска идет как при первом нажатии.(например, нажали на ячейку C5, закрасился диапазон B4:D6. если следующее нажатие будет по ячейке D6, то закрашиваются дополнительно все крайние ячейки: C5:E7. если мы бы нажали на ячейку F9, тогда убираем заливку с ячеек, которые были закрашены перед этим нажатием, и закрашиваем ячейки во круг F9. это E8:G10)
_Boroda_, Спасибо за ответ. Посмотрел пример - ячейка все же остается активной, вообще реально ее сделать не активной после нажатия? Еще можете прокомментировать код, хотя бы пару слов на каждую строчку. я начинаю только изучать VBA не совсем понимаю что зачем и как
_Boroda_, Спасибо за ответ. Посмотрел пример - ячейка все же остается активной, вообще реально ее сделать не активной после нажатия? Еще можете прокомментировать код, хотя бы пару слов на каждую строчку. я начинаю только изучать VBA не совсем понимаю что зачем и как lFJl
Подождите, а какая связь между закраской соседних ячеек и "активностью" ячейки? Вам такси или шашечки красить или активацию убирать (кстати, а зачем)? Более того - если эта ячейка не активна, то что тогда должно быть активно (только не говорите, что ничего - так не бывает при включенном компьютере)? Комментарии [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] Хотя, добавил еще прямоугольник маленький и строку в макросе в самом низу. После каждого телодвижения этот прямоугольник выделяется, тем самым снимая выделение с листа
Подождите, а какая связь между закраской соседних ячеек и "активностью" ячейки? Вам такси или шашечки красить или активацию убирать (кстати, а зачем)? Более того - если эта ячейка не активна, то что тогда должно быть активно (только не говорите, что ничего - так не бывает при включенном компьютере)? Комментарии [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_
если эта ячейка не активна, то что тогда должно быть
Хотелось бы, чтобы ячейка, которую я нажимаю, после выполнения макроса становилась не активной, чтобы на нее можно было нажать еще раз.
Идея такова: В ячейке число. Нажимаю на ячейку, закрашивается диапазон, в пределах которого я могу передвинуть это число. если нажимаю в другом диапазоне, тогда убирается закрашивание, и ничего не происходит
Пока так. Если подскажете, как мне за место числа в ячейке использовать значение, или лучше картинку, то это было бы лучше
если эта ячейка не активна, то что тогда должно быть
Хотелось бы, чтобы ячейка, которую я нажимаю, после выполнения макроса становилась не активной, чтобы на нее можно было нажать еще раз.
Идея такова: В ячейке число. Нажимаю на ячейку, закрашивается диапазон, в пределах которого я могу передвинуть это число. если нажимаю в другом диапазоне, тогда убирается закрашивание, и ничего не происходит
Пока так. Если подскажете, как мне за место числа в ячейке использовать значение, или лучше картинку, то это было бы лучше lFJl
Поэкспериментировал, посмотрите что получилось. [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]
Поэкспериментировал, посмотрите что получилось. [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
Хочу сделать следующее: На листе много чисел(положительных и отрицательных), я нажимаю на любое число, и во круг него закрашивается радиус, на который могу передвинуть это число Если я передвигаю число на ячейку с числом, то числа складываются в ячейке, куда передвинул, а та ячейка, из которой передвигаю - "чистится". Если число передвинул и значение стало меньше 0, тогда вывести сообщение любое.
Хочу сделать следующее: На листе много чисел(положительных и отрицательных), я нажимаю на любое число, и во круг него закрашивается радиус, на который могу передвинуть это число Если я передвигаю число на ячейку с числом, то числа складываются в ячейке, куда передвинул, а та ячейка, из которой передвигаю - "чистится". Если число передвинул и значение стало меньше 0, тогда вывести сообщение любое.lFJl
Добрый день люди добрые! Я смог сделать часть того, что мне нужно(смотрим пример). Дальше у меня есть пара вопросов: 1)как сделать все это без присваивания значений к ячейкам? 2)мне нужно, чтобы после того, как я шагнул, я смог шагать дальше без лишних нажатий на соседние ячейки(линия 31 - там есть комментарий на эту тему. может у кого будет идея, как это сделать?)
Добрый день люди добрые! Я смог сделать часть того, что мне нужно(смотрим пример). Дальше у меня есть пара вопросов: 1)как сделать все это без присваивания значений к ячейкам? 2)мне нужно, чтобы после того, как я шагнул, я смог шагать дальше без лишних нажатий на соседние ячейки(линия 31 - там есть комментарий на эту тему. может у кого будет идея, как это сделать?)lFJl
Привет всем! на 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 до значения фигуры оригинала))
[vba]
Код
If MsgBox("Сделать копию?", vbYesNo, "") = vbYes Then 'предлагаем сделать копию фигуры 'делаем копию фигуры в выбранную ячейку Cells.Interior.Color = xlNone step1 = False 'Range(***).Select делаем ячейку с фигурой активной ElseIf vbNo Then Cells.Interior.Color = xlNone step1 = False Range(ad_).Select Exit Sub End If
[/vba]
5) Нужна возможность производить действия с копией аналогичные действиям оригинала 6) Взаимодействие между фигурами: Если фигуры одинакового цвета. Нужна возможность "сливания" две фигуры(например, если мы нажали на фигуру1, появляется радиус, и нажимаем на фигуру2. если она находится в радиусе фигуры1 и того же цвета что и фигура1, то складываются значения фигуры1 и фигуры2, затем фигуру 2 удаляем. Если фигуры разного цвета, то вычитаем значения фигуры1 и фигуры2, оставляем ту, значение которой было больше со значением, которое получилось в процессе вычитания)
Вот... [moder]Не, ну ладно предыдущий вопрос хоть как-то немного связан с названием темы, но этот-то каким боком сюда? Короче, нарушение п.5q Правил форума.
Привет всем! на 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 до значения фигуры оригинала))
[vba]
Код
If MsgBox("Сделать копию?", vbYesNo, "") = vbYes Then 'предлагаем сделать копию фигуры 'делаем копию фигуры в выбранную ячейку Cells.Interior.Color = xlNone step1 = False 'Range(***).Select делаем ячейку с фигурой активной ElseIf vbNo Then Cells.Interior.Color = xlNone step1 = False Range(ad_).Select Exit Sub End If
[/vba]
5) Нужна возможность производить действия с копией аналогичные действиям оригинала 6) Взаимодействие между фигурами: Если фигуры одинакового цвета. Нужна возможность "сливания" две фигуры(например, если мы нажали на фигуру1, появляется радиус, и нажимаем на фигуру2. если она находится в радиусе фигуры1 и того же цвета что и фигура1, то складываются значения фигуры1 и фигуры2, затем фигуру 2 удаляем. Если фигуры разного цвета, то вычитаем значения фигуры1 и фигуры2, оставляем ту, значение которой было больше со значением, которое получилось в процессе вычитания)
Вот... [moder]Не, ну ладно предыдущий вопрос хоть как-то немного связан с названием темы, но этот-то каким боком сюда? Короче, нарушение п.5q Правил форума.lFJl
Хорошо, но если я создам этот вопрос в отдельную тему, это не будет нарушение правил? у меня подобное уже было. [moder]Ну это же разные вопросы. А разные вопросы - разные темы.
Хорошо, но если я создам этот вопрос в отдельную тему, это не будет нарушение правил? у меня подобное уже было. [moder]Ну это же разные вопросы. А разные вопросы - разные темы.lFJl
Сообщение отредактировал _Boroda_ - Четверг, 10.09.2015, 14:21