Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запуск Макроса по значению ячейки

2.3K
07 апреля 2003 года
BeginerVBA
10 / / 07.04.2003
Помогите бедному несчастному Beginer-у...

Нужно вызвать макрос в зависимости от значения ячейки(переход на другой лист).

Буду очень признателен
за ответы.
267
07 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by BeginerVBA
Помогите бедному несчастному Beginer-у...

Нужно вызвать макрос в зависимости от значения ячейки(переход на другой лист).

Буду очень признателен
за ответы.



Непонятно, что именно нужно.
Запускать определенный макрос в зависимости от того, что было введено в определенную ячейку?

Тогда делаешь в модуле листа так:

Код:
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


Или что-то еще? Не стесняйся в выражениях... :)
2.3K
07 апреля 2003 года
BeginerVBA
10 / / 07.04.2003
Спасибо за ответ.
Вот пошаговый пример:
1. Вводится значение в ячейку(например
в ячейку: Лист1!B:45).
2.После ввода должна осуществитmся проверка,
существует ли данное значение в ячейках другого листа( к примеру возмем диапазон Лист2!A:A)или нет.
3.Если там его нет, то переходим на Лист2!, добавляем (или идем в конец) новую ячейку в Лист2!, заполняем ее введенным значением из ячейки Лист1!B:45.
4.Если оно там есть , остаемся на листе Лист1!B:45
и продолжаем ввод( и вообще продолжаем жить дальше...)

Вот и весь problem...
267
07 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by BeginerVBA
Спасибо за ответ.
Вот пошаговый пример:
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


Разместишь это в модуле листа Sheet1 (на котором ячейка B45). Если тебе надо, чтобы при добавлении нового значения в столбец туда же переключался Эксель, вставь перед End If строчку
Application.Goto Reference:=w2.Cells(i, 1), Scroll:=True
2.3K
08 апреля 2003 года
BeginerVBA
10 / / 07.04.2003
Thanks...
45K
14 декабря 2008 года
Pupil_VB
4 / / 14.12.2008
Подскажите пожалуйста, а если у меня есть 3-4 макроса и я хочу относительно значения в ячейке скажем А1 запускать тот или иной. При значении 1 первый макрос, при значении 2 второй и так далее. Извините за глупый вопрос.
275
15 декабря 2008 года
pashulka
985 / / 19.09.2004
Pupil_VB, Ответ на Ваш вопрос наличествует во втором посте.
45K
15 декабря 2008 года
Pupil_VB
4 / / 14.12.2008
мои макросы не вызываются ((
В чем тут загвоздка?

Код:
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


Первая страница у меня с диаграммой, вторая с исходными данными
275
15 декабря 2008 года
pashulka
985 / / 19.09.2004
По всей видимости Вы проигнорировали требование о том, что событие Worksheet_Change() должно находиться в модуле нужного листа, а не в стандартном модуле.

P.S. Кстати, в наличии двух макросов нет никакой необходимости, равно как и в выделении листа и серии.
45K
15 декабря 2008 года
Pupil_VB
4 / / 14.12.2008
Цитата:
По всей видимости Вы проигнорировали требование о том, что событие Worksheet_Change() должно находиться в модуле нужного листа, а не в стандартном модуле.



Вот я ламер, спасибо огромное!

275
15 декабря 2008 года
pashulka
985 / / 19.09.2004
Если интересно, то в аттаче можно увидеть то, о чём я говорил в постскриптуме.
45K
15 декабря 2008 года
Pupil_VB
4 / / 14.12.2008
Спасибо огромное все отлично работает!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог