2016-09-21 5 views
-1

Я ищу некоторую помощь в том, как запускать продолжение макроса на основе значения ячейки, пожалуйста.Как запустить макрос на основе содержимого ячейки

Я надеюсь, что когда ячейка A1 = ячейка B1, мне понадобится выполнить задачу, в противном случае - конец скрипта.

Я предполагаю, что это будет простой скрипт If... Then? Любая помощь очень ценится!

+0

Такого рода вещи обычно делается путем написания обработчика событий для 'Worksheet_Change' события. В Интернете легко найти различные примеры. –

ответ

1

Вот как это можно сделать, это предполагает, что все ваши значения уже есть, и вы используете чек, а не кто-то, набрав живое, в этом случае Джон будет хорошим способом. Однако одна вещь, которая мне не нравится в workheet_change, заключается в том, что после выполнения макроса вы не можете отменить отмену. Я добавил, если длина> 0, как будто у вас две пустые ячейки, они все равно будут срабатывать.

Sub TestValues() 

'Define variables 
Dim rng As Range 
Dim cell As Range 

'Set variables 
Set rng = Range("A1:A10") 

'Begin 
For Each cell In rng 
    If Len(cell) > 0 Then 
     If cell.Value = cell.Offset(0, 1).Value Then 
      'Run macro 
     End If 
    End If 
Next cell 

End Sub 

* Редактировать - Я думаю, что я точно не читал его правильно. По какой-то причине я думал, что у вас есть ряд ценностей, которые нужно пройти. Для того, чтобы делать то, что вы просили, было бы больше, как это, извините за длинный пост ...

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Address = "$A$1" Then 
    If Len(Target) > 0 Then 
     If Target.Value = Target.Offset(0, 1).Value Then 
      'Run macro 
     End If 
    End If 
End If 

End Sub 
1

Я предполагаю, что макрос отвечает за изменение A1 и/или B1 клетки так, что он действительно знает когда сделать это «проверка продолжения».

В этом случае вы можете сделать это несколькими способами, вот два из них:

  • Keep «продолжение» Код внутри макроса

    Sub main() 
    
        ' your code till the statement that changes A1 and/or B1 
    
        If Range("A1").Value <> Range("B1").Value Then Exit Sub '<-- if cells A1 and B1 DON'T have the same values then exit sub 
    
        'here follows your code for the "Task" 
    
    End Sub 
    
  • требуют задачи к другой Sub

    Sub main() 
    
        ' your code till the statement that changes A1 and/or B1 
    
        If Range("A1").Value = Range("B1").Value Then DoTask '<-- if cells A1 and B1 HAVE the same values then call 'DoTask()' 
    End Sub 
    
    
    Sub DoTask() 
        ' here your code code for the "Task" 
    End Sub 
    

    В этом последнем случае вы можете пройти o пе (или более) параметр из «Main» макрос DoTask

    Sub main() 
    
        ' your code till the statement that changes A1 and/or B1 
    
        If Range("A1").Value = Range("B1").Value Then DoTask Range("A1").Value '<-- if cells A1 and B1 HAVE the same values then call 'DoTask passing A1 cell value as "argument" 
    End Sub 
    
    
    Sub DoTask(val As Variant) '<--| DoTask accepts a parameter declared as of Variant type (but you may choose a more proper one 
        ' here your code code for the "Task" 
        ' it will use 'val' 
    End Sub 
    
+0

@ kitarika, вы прошли через это? – user3598756

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