Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address <> "$A$1" Then Exit Sub
Select Case Target.Value
Case 1
Call Macro1
Case "codenet"
Call Macro2
Case Else
Call Macro3
End Select
End Sub
Запуск Макроса по значению ячейки
Нужно вызвать макрос в зависимости от значения ячейки(переход на другой лист).
Буду очень признателен
за ответы.
Цитата:
Originally posted by BeginerVBA
Помогите бедному несчастному Beginer-у...
Нужно вызвать макрос в зависимости от значения ячейки(переход на другой лист).
Буду очень признателен
за ответы.
Помогите бедному несчастному Beginer-у...
Нужно вызвать макрос в зависимости от значения ячейки(переход на другой лист).
Буду очень признателен
за ответы.
Непонятно, что именно нужно.
Запускать определенный макрос в зависимости от того, что было введено в определенную ячейку?
Тогда делаешь в модуле листа так:
Код:
Или что-то еще? Не стесняйся в выражениях... :)
Вот пошаговый пример:
1. Вводится значение в ячейку(например
в ячейку: Лист1!B:45).
2.После ввода должна осуществитmся проверка,
существует ли данное значение в ячейках другого листа( к примеру возмем диапазон Лист2!A:A)или нет.
3.Если там его нет, то переходим на Лист2!, добавляем (или идем в конец) новую ячейку в Лист2!, заполняем ее введенным значением из ячейки Лист1!B:45.
4.Если оно там есть , остаемся на листе Лист1!B:45
и продолжаем ввод( и вообще продолжаем жить дальше...)
Вот и весь problem...
Цитата:
Originally posted by BeginerVBA
Спасибо за ответ.
Вот пошаговый пример:
1. Вводится значение в ячейку(например
в ячейку: Лист1!B:45).
2.После ввода должна осуществитmся проверка,
существует ли данное значение в ячейках другого листа( к примеру возмем диапазон Лист2!A:A)или нет.
3.Если там его нет, то переходим на Лист2!, добавляем (или идем в конец) новую ячейку в Лист2!, заполняем ее введенным значением из ячейки Лист1!B:45.
4.Если оно там есть , остаемся на листе Лист1!B:45
и продолжаем ввод( и вообще продолжаем жить дальше...)
Вот и весь problem...
Спасибо за ответ.
Вот пошаговый пример:
1. Вводится значение в ячейку(например
в ячейку: Лист1!B:45).
2.После ввода должна осуществитmся проверка,
существует ли данное значение в ячейках другого листа( к примеру возмем диапазон Лист2!A:A)или нет.
3.Если там его нет, то переходим на Лист2!, добавляем (или идем в конец) новую ячейку в Лист2!, заполняем ее введенным значением из ячейки Лист1!B:45.
4.Если оно там есть , остаемся на листе Лист1!B:45
и продолжаем ввод( и вообще продолжаем жить дальше...)
Вот и весь problem...
Блин, ну неужели трудно сразу корректно поставить вопрос? :-x
Тогда вот так:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim w1 As Worksheet, w2 As Worksheet, i As Long
If Target.Address <> "$B$45" Then Exit Sub
Set w1 = ThisWorkbook.Worksheets("Sheet1")
Set w2 = ThisWorkbook.Worksheets("Sheet2")
i = 1
While w2.Cells(i, 1).Value <> Target.Value And w2.Cells(i, 1).Value <> ""
i = i + 1
Wend
If w2.Cells(i, 1).Value = "" Then
w2.Cells(i, 1).Value = Target.Value
End If
End Sub
Dim w1 As Worksheet, w2 As Worksheet, i As Long
If Target.Address <> "$B$45" Then Exit Sub
Set w1 = ThisWorkbook.Worksheets("Sheet1")
Set w2 = ThisWorkbook.Worksheets("Sheet2")
i = 1
While w2.Cells(i, 1).Value <> Target.Value And w2.Cells(i, 1).Value <> ""
i = i + 1
Wend
If w2.Cells(i, 1).Value = "" Then
w2.Cells(i, 1).Value = Target.Value
End If
End Sub
Разместишь это в модуле листа Sheet1 (на котором ячейка B45). Если тебе надо, чтобы при добавлении нового значения в столбец туда же переключался Эксель, вставь перед End If строчку
Application.Goto Reference:=w2.Cells(i, 1), Scroll:=True
Thanks...
Подскажите пожалуйста, а если у меня есть 3-4 макроса и я хочу относительно значения в ячейке скажем А1 запускать тот или иной. При значении 1 первый макрос, при значении 2 второй и так далее. Извините за глупый вопрос.
Pupil_VB, Ответ на Ваш вопрос наличествует во втором
В чем тут загвоздка?
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address <> "$G$7" Then Exit Sub
Select Case Target.Value
Case 1
Call Red
Case 2
Call Blue
End Select
End Sub
Sub Red()
Sheets(1).Select
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.ColorIndex = 3
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = 3
.MarkerForegroundColorIndex = 3
.MarkerStyle = xlDiamond
.Smooth = True
.MarkerSize = 5
.Shadow = False
End With
Sheets(2).Select
End Sub
Sub Blue()
Sheets(1).Select
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.ColorIndex = 5
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = 5
.MarkerForegroundColorIndex = 5
.MarkerStyle = xlDiamond
.Smooth = True
.MarkerSize = 5
.Shadow = False
End With
Sheets(2).Select
End Sub
If Target.Address <> "$G$7" Then Exit Sub
Select Case Target.Value
Case 1
Call Red
Case 2
Call Blue
End Select
End Sub
Sub Red()
Sheets(1).Select
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.ColorIndex = 3
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = 3
.MarkerForegroundColorIndex = 3
.MarkerStyle = xlDiamond
.Smooth = True
.MarkerSize = 5
.Shadow = False
End With
Sheets(2).Select
End Sub
Sub Blue()
Sheets(1).Select
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.ColorIndex = 5
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = 5
.MarkerForegroundColorIndex = 5
.MarkerStyle = xlDiamond
.Smooth = True
.MarkerSize = 5
.Shadow = False
End With
Sheets(2).Select
End Sub
Первая страница у меня с диаграммой, вторая с исходными данными
P.S. Кстати, в наличии двух макросов нет никакой необходимости, равно как и в выделении листа и серии.
Цитата:
По всей видимости Вы проигнорировали требование о том, что событие Worksheet_Change() должно находиться в модуле нужного листа, а не в стандартном модуле.
Вот я ламер, спасибо огромное!
Если интересно, то в аттаче можно увидеть то, о чём я говорил в постскриптуме.
Спасибо огромное все отлично работает!