Ayuda con suma que se repite

Saludos

Estoy tratando de hacer funcionar este código que me envío Dam en una ocasión pero me suma los valores de dos en dos a ver porque lo hace ya que no entiendo

En un modulo tengo cargado el siguiente código que usted me proporciono

Este código es para buscar el articulo no importa el lugar

Sub Datos()
Dim fila As Integer
fila = 2
While Inventariox.Cells(fila, 2) <> Empty
dato = ActiveCell.Offset(-1, -1)
dato1 = ActiveCell.Offset(-1, 0)
If Inventariox.Cells(fila, 2) = dato Then
Inventariox.Cells(fila, 3) = Inventariox.Cells(fila, 3) + dato1
'stock = Inventariox.Cells(fila, 3)
'MsgBox ("Stock actual es " & stock & " de " & dato & " " & dato1), vbInformation, "Aviso"
End If
fila = fila + 1
Wend
End Sub

Y en otra hoja llamada compras

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D2:D45000")) Is Nothing Then
If IsNumeric(Range("D" & Target.Row)) Then
Range("E" & Target.Row) = Application.VLookup(Range("B" & Target.Row), Inventariox.Range("A3:F4500"), 6, False)
End If
End If
Datos
End Sub

Mi pregunta es porque se repite dos veces el código del modulo provocando esto que se sumen dos veces los productos ingresados en la hoja de compra

1 Respuesta

Respuesta
1

Se repite porque el evento Worksheet_Change se repite en CADA cambio en la hoja.

Podes evitar que se ejecute este evento (con Application. EnableEvents en False) o podes limitar la acción del Change a solo las celdas que necesitas cambiar.

Por ej: If Target.Address <> "$D$4" then exit sub

Ajustá a tu rango.

Si necesitas mayores aclaraciones, escribime nuevamente.

Entiendo que el Worksheet_Change solo debería ejecutarse si hay una acción sobre cualquier celda de la columna D y no entiendo que pasa, si le quitas el código dentro de Worksheet_Change por ejemplo y dejas solo la referencia al modulo hay funciona muy bien

Espero me entiendas

Tu situación es la siguiente:

Si la celda modificada está en el rango D2:D45000 se coloca la fórmula en celda E de la misma fila.

Y ahí termina la comparación. Luego se ejecuta 'Datos' para TODAS LAS CELDAS, es decir que al cambiar la celda E nuevamente se ejecuta.

Probalo de esta manera y comentame:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D2:D45000")) Is Nothing Then
If IsNumeric(Range("D" & Target.Row)) Then
Range("E" & Target.Row) = Application.VLookup(Range("B" & Target.Row), Sheets("Inventariox").Range("A3:F4500"), 6, False)
Datos
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas