2016-09-23 2 views
1

Это мой VBA скрипт для MS ExcelПоказать Msg, когда клетка достигла детерминированного значение

Sub Reached_150() 

Dim cella As Range 
Dim nomi As Range 

For Each cella In [p2:p10] 
    For Each nomi In [a2:a10] 

    If cella.Value = 150 Then MsgBox "Lo studente " & nomi & " ha terminato le ore." 
    Next nomi 

Next cella 

End Sub 

в диапазоне p2: p10 рассчитать сумму, когда сумма ячейки достигает 150 выводит сообщение о том, ученик, чье имя находится в колонке А, закончил часы.

У меня есть два вопроса: 1) Как только первая ячейка достигает конца 150 часов, появляется сообщение для всех имен учеников, как я могу его избежать? 2) Как создать скрипт автоматически, а не вручную? В ожидании ответов спасибо всем, кто может мне помочь

+0

Ваш второй цикл выполняет итерацию всех имен учащихся, поэтому, если значение ячейки равно 150, для каждого элемента (т.е. имен) в этом цикле будет вызываться окно сообщения. Предположительно, вы хотите захватить одно имя, если да, то какое? – Ambie

+0

, только имя которого соответствующая ячейка, содержащая итоговые значения 150, примерные ячейки p2, достигло 150, показывает имя , содержащееся в ячейке a2 ... на практике каждый раз, когда ячейка достигает 150, показывает сообщение msg – Marduk

ответ

1

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

Если да, то ваш код должен быть:

For Each cella In [p2:p10] 
    If cella.Value = 150 Then MsgBox "Lo studente " & _ 
     cella.Offset(,-15).Value & " ha terminato le ore." 

Next cella 
+0

Это работа , но можно сделать автоматическую вещь ?, пока я вызываю скрипт с помощью alt + F8. – Marduk

+0

Да, это возможно. Как вы обновляете значение времени? У вас есть функция таймера какого-то типа, значения, введенные пользователем и т. Д.? Если бы вы могли сообщить мне об этом, я обновлю код. – Ambie

1

Вы не упомянули, что должно произойти, если значение больше, что 150. Если вы хотите конкретно 150, то удалите > из ">=150" ниже.

Чтобы сделать это автоматически, используйте событие Worksheet_Change. Вставьте это в область кода листа.

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, aCell As Range 

    Set rng = Range("P2:P10") 

    '~~> Check if there is any value >= 150 in that range 
    If Application.WorksheetFunction.CountIf(rng, ">=150") Then 
     For Each aCell In rng 
      If aCell.Value >= 150 Then _ 
      MsgBox "Lo studente " & _ 
        Range("A" & aCell.Row).Value & _ 
        " ha terminato le ore." 

     Next aCell 
    End If 
End Sub 
+0

Этот скрипт не работает, только ячейка достигает 150, ничего не происходит – Marduk

+0

где вы вставили код? –

+0

[! [Введите описание изображения здесь] [1]] [1] [1]: http://i.stack.imgur.com/fJvGY.png – Marduk

Смежные вопросы