¿Como colocar dos macros en una misma hoja de excel?

Debo de realizar un macro para que guarde una suma acumulada en una misma celda, y este es el código que estoy ulizando para hacerlo:

"Option Explicit
Dim valor As Long
Dim cantidadVeces As Integer

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$4" Then
cantidadVeces = cantidadVeces + 1
If cantidadVeces > 1 Then
Exit Sub
End If
valor = valor + Sheets("Hoja1").Range("G4").Value
Sheets("Hoja1").Range("G4").Value = valor
End If
End Sub.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
valor = 0
cantidadVeces = 0
If Target.Address = "$G$4" Then
valor = Sheets("Hoja1").Range("G4").Value
End If
End Sub "

El problema es que yo lo necesito para varias celdas, no solo para "G4" pero no se como hacerloooo...¡AYUDA!

1 Respuesta

Respuesta
1

Te anexo las macros actualizadas:

Dim valor
Const rango = "G4:G10"
Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range(rango)) Is Nothing Then
        Application.EnableEvents = False
        Target = Target + valor
        Application.EnableEvents = True
    End If
End Sub
'
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range(rango)) Is Nothing Then
        valor = Target
    End If
End Sub

Veo que en tu macro tienes la variable "cantidadVeces" para controlar que ya no se repita el proceso. Cuando tienes el evento change y modificas la misma celda, en este caso la G4, el evento change se vuelve a ejecutar, así es como entra en un loop, para evitar esto se utiliza la instrucción 

Application.EnableEvents = False

Eso deshabilita los eventos, para habilitar nuevamente los eventos hay que utilizar:

Application.EnableEvents = True

Al principio de la macro declaré el rango = "G4:G10", cambia el rango de celdas por el rango de celdas que necesitas.


Otro comentario, esta instrucción se utiliza cuando seleccionas o modificas más de una celda a la vez, entonces si modificas más de una celda, la macro termina:

If Target.Count > 1 Then Exit Sub

':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas