Страницы: 1
RSS
Запуск макроса по событию в ячейке, ...только при появлении числа (даты)
 
Добрый день данные макрос запускаются по событиям в определенных ячейках:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [m1:ar10000]) Is Nothing Then Exit Sub
With Target
If .Cells.Count > 1 Then Exit Sub
Select Case .Column
Case 13: Call MyMail(.Row, 13)
Case 16: Call MyMail(.Row, 16)
Case 26: Call MyMail1(.Row, 26)
Case 29: Call MyMail1(.Row, 29)


End Select
End With

End Sub

А можно сделать так , чтою они запускались по вводу числа (даты) , например при очитке ячейки мне макрос не нужен.
Спасибо
 
Добавить проверку на наличие данных в ячейке?
With Target
If .Cells.Count > 1 Then Exit Sub
if .value > 0 then
Select Case .Column
Case 13: Call MyMail(.Row, 13)
Case 16: Call MyMail(.Row, 16)
Case 26: Call MyMail1(.Row, 26)
Case 29: Call MyMail1(.Row, 29)
End Select
end if
End With
 
проверка именно даты.
Код
If IsDate(Target) = False Then Exit Sub
 
Спасибо.

Я так понимаю это надо после  With Target воткнуть ?
А если число или дата можно?
 
мои знания поверхностные, ну раз спецы молчат предложу вариант
Код
.....
If IsNumeric(Target) = True Or IsDate(Target) = True Then
With Target
....
End With
Else: Exit Sub
End If
End Sub
 
Нагляднее так:
Код
If Not IsDate(Target) Then ...

Миша, уточни задачу - всё перепуталось ))
 
Уточняю если ввели число ИЛИ дату посылаем ...если текст ,очистили ячейку ввели пробел ИЛИ "0" то не посылаем ничего .
 
Если текст ,очистили ячейку ввели пробел ИЛИ "0" - это нормальная ситуация . Так?
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Target.Value > 0 Then
        MsgBox IsDate(CDate(Target.Value)) & vbLf & Target.Value
    End If
End Sub
 
Да ситуация нормальная особо очистка ...но макрос не запускаем Юр, запускаем только в случае введения числа отличного от 0 или Даты
 
См. для ячеек А1:А10
 
Спасибо Юра и Ran.... мне бы еще понять как всю эту бодягу встроить в работающий макрос с

Select Case .Column
Case 13: Call MyMail(.Row, 13)
Case 16: Call MyMail(.Row, 16)
Case 26: Call MyMail1(.Row, 26)
Case 29: Call MyMail1(.Row, 29)
End Select

см. пост1 в этой теме.
 
А в чём проблема? В моём коде меняй диапазон, вместо MsgBox пишем Exit Sub. А затем уже твои Select Case .Column
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Value > 0 Then
            On Error Resume Next
            If CDate(.Value) Then
                Select Case .Column
                Case 13, 16, 26, 29
                    Call MyMail(.Row, .Column)
                End Select
            End If
        End If
    End With
End Sub
 
Цитата
Юрий М пишет:
А в чём проблема? В моём коде меняй диапазон, вместо MsgBox пишем Exit Sub. А затем уже твои Select Case .Column
Юра ты прекрасно знаешь что для меня и это проблема там еще какие-то With Target...Вот диапазон поменять смогу))))
 
Спасибо Ran попробую так
 
Цитата
RAN пишет:
If Intersect(Target, [m1:ar10000]) Is Nothing Then Exit Sub
With Target

Цитата
RAN пишет:
Код
 Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Value > 0 Then
            On Error Resume Next
            If CDate(.Value) Then
                Select Case .Column
                Case 13, 16, 26, 29
                    Call MyMail(.Row, .Column)
                End Select
            End If
        End If
    End With
End Sub 

А у меня еще конструкция была...

If Intersect(Target, [m1:ar10000]) Is Nothing Then Exit Sub
With Target

ее то куда Ran
Спасибо
 
Микки там же и оставьте где и была (перед With Target)
 
Цитата
Микки пишет:
А у меня еще конструкция была...
....
ее то куда Ran

A зачем она вам? Дорога как память?  :)
 
Я настолько слаб в макросах ..что боюсь отпилить что-либо  нужное ..хотя насколько я понял Ваш ..оно там лишнее?
 
Прозевал, однако.
Так надо
Код
    Select Case .Column
    Case 13, 16
        Call MyMail(.Row, .Column)
    Case 26, 29
        Call MyMail1(.Row, .Column)
    End Select
 
Ну до этого я бы и сам додумался..все равно огромное спасибо
 
на сколько я понимаю данная строчка отвечает за то чтоб макрос срабатывал только в диапазоне m1:ar10000, а у вас RAN по моему макрос будет срабатывать в любой ячейке листа (даты и числа не касаюсь) или я не правильно понимаю? Если я прав то вопрос к Микки нужно ли это ограничение?
хотя пока не знаю за что отвечает процедура Case, может из за неё и ни нужна данная строка.  :(
Изменено: V - 15.04.2013 16:39:06
 
Не совсем так.
Макрос в любом случае срабатывает в любой ячейке листа.
Если есть конструкция
Код
If Intersect(Target, [m1:ar10000]) Is Nothing Then Exit Sub 

то в зависимости от выполнения условия макрос либо продолжает, либо завершает работу.

Если этой конструкции нет, то при условии ввода числа/даты в столбцы 13, 16, 26 или 29 запускается процедура отправки письма.

В остальных случаях никаких действий не выполняется, точнее, выполняются 2 лишних проверки.
 
RAN спс. понял.
 
Спасибо всем огромное тема закрыта работает как надо .
Страницы: 1
Читают тему
Наверх