lunes, 9 de marzo de 2020

Lanzar una macro al producirse un evento de tipo Change

Puede descargar el archivo target.xlsm

Hoja 1


Vamos a crear el rango de color amarillo donde al escribir algo se lance automáticamente una macro que nos saluda. Esto se consigue con la programación por eventos que tiene Excel.


Primero programamos la macro 'saluda' en un módulo de nuestro editor de Visual Basic (VBA).


 Sub saluda()  
 MsgBox ("Hola, ¿qué tal?")  
 End Sub  

Luego nos vamos a la zona de programación para la Hoja1 que es en la que nos encontramos y creamos un evento de tipo Change. Es el siguiente.


 Private Sub Worksheet_Change(ByVal Target As Range)  
 Dim R As Range  
 Set R = Range("$B$6:$B$8")  
 If Intersect(Target, R) Is Nothing Then  
  Application.EnableEvents = False  
  Target.Value = UCase(Target.Value)  
  Application.EnableEvents = True  
  Target.Font.ColorIndex = 5  
 Else  
  If Target.Value > 1000 Then  
   Target.Font.ColorIndex = 3  
  Else  
   Target.Font.ColorIndex = 0  
  End If  
  saluda  
 End If  
 End Sub  



Hoja 2

Otro método para poder actuar sobre un rango concreto consiste en definir el rango indicando las columnas y filas en las que se encuentra.


 Private Sub Worksheet_Change(ByVal Target As Range)  
 If Target.Column = 2 And Target.Row >= 5 And Target.Row <= 8 Then  
  [E5] = Application.WorksheetFunction.Sum(Range("B5:B8"))  
 End If  
 End Sub