Tengo dos eventos que deben ocurrir cuando una celda se llena

Tengo una planilla que tiene 3 columnas, una pide las maquinas (que puede ser más de dos) con el siguiente código:

Option Explicit
Sub DividirPorSlach(MiRango As Range)
    Dim Celda As Range
    Dim MatrizResultado() As String
    Dim i As Long
    For Each Celda In MiRango
        MatrizResultado = Split(Celda.Value, "/")
        For i = 0 To UBound(MatrizResultado)
            Celda.Offset(0, i + 15).Value = Trim(MatrizResultado(i))
        Next i
    Next Celda
End Sub

y se ejecuta automaticamente con el mando:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 7 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
    End If
End Sub

ahora tengo otra columna que pide el id (me arroja el nombre que corresponde al id), que ya tengo definida en un modulo pero la tenía programada para que se ejecutara con un boton, ahora me gustaría que se ejecutara automaticamente a medida que se escribe en las celdas pero mi gran duda es como poder llamarla, ya que  ocupará las mismas variables que las maquinarias, su ayuda please!  

1 Respuesta

Respuesta
1

Puedes poner el código que tienes en el botón para revisarlo y adaptarlo a tu evento Change.

pero mi duda principal es como adaptarlo, ya que si pongo por ej:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 7 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
    End If
     If Target.Column = 4 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
    End If    If Target.Column = 7 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
   End If
End Sub

la macro falla y me dice que está mal definida, mi duda es como definirla, ya que usa Target las dos veces

pero mi duda principal es como adaptarlo, ya que si pongo por ej:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 7 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
    End If
     If Target.Column = 4 And Target.Row >= 5 Then
        Call calculo.Calcular_n(Target)
    End If 
End Sub

la macro falla y me dice que está mal definida, mi duda es como definirla, ya que usa Target las dos veces

Entonces puedes poner tu macro Calcular_n para revisar todo completo

A esta macro no le veo ningún problema

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 7 And Target.Row >= 5 Then
        Call division.DividirPorSlach(Target)
    End If
     If Target.Column = 4 And Target.Row >= 5 Then
        Call calculo.Calcular_n(Target)
    End If 
End Sub

Qué mensaje de error te aparece y en cuál línea?

¿Tienes un módulo definido con el nombre "calculo" y dentro de este módulo la macro "Calcular_n"?

[

claro,

este es Calcular_n:

    Dim cont_p As Long
    Dim ultLinea_p As Long
    Dim nom_provee As Variant
    Dim rut_provee As Variant
    Dim rango_p As Variant
    ultLinea_p = Sheets("COMPRAS ENERO 2018").Range("E" & Rows.Count).End(xlUp).Row
    Set rango_p = Workbooks("CLIENTES Y PROVEEDORES.xlsm").Sheets("PROVEEDORES").Range("B3:E200")
    For cont_p = 3 To ultLinea_p
        rut_provee = Sheets("COMPRAS ENERO 2018").Cells(cont_p, 5)
        nom_provee = Application.VLookup(rut_provee, rango_p, 2, False)
        If IsError(nom_provee) Then
            nom_provee = "CREAR"
        End If
        If rut_provee = 0 Then
            nom_provee = ""
        End If
        Sheets("COMPRAS ENERO 2018").Cells(cont_p, 6) = nom_provee
    Next cont_p
    MsgBox "Datos cargados exitosamente!", vbInformation, "Exito"

el error que me arroja es en la linea del:

Private Sub Worksheet_Change(ByVal Target As Range)

me dice que esta mal definida la variable.

Pero no pusiste la primer línea de la macro Calcular_n

Ahí es donde tienes definida la variable que va a tomar a Target.

Es decir, haces el llamado a la macro Calcular_n y le pasas como parámetro el Target

Call calculo.Calcular_n(Target)

Entonces en la macro Calcular_n , debes tener algo como esto:

Sub Calcular_n(rango)

o como esto

Sub Calcular_n(rango as range)

Puedes poner todas las macros involucradas completas para revisarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas