Evento change

Solo consultas sobre macros y código VBA Excel.
Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Responder
gglenda122
Miembro Frecuente
Miembro Frecuente
Mensajes: 5
Registrado: 12 Feb 2019 11:29

Evento change

Mensaje por gglenda122 » 12 Feb 2019 11:48

Saludos querimos amigos expertos en Excel, estoy haciendo una macro se ve sencilla pero tengo una duda.. estoy ordenando una lista este es el codigo en el modulo1:

Sub Ordenar()

Dim rangoDatos As Range
Dim CampoOrden As Range
Dim Ultimafila As Long

Ultimafila = Sheets("Lugares").Range("B" & Rows.Count).End(xlUp).Row
Set rangoDatos = Range("B6:E17" & Ultimafila)
Set CampoOrden = Range("E6")

rangoDatos.Sort Key1:=CampoOrden, order1:=xlAscending, Header:=xlYes
End Sub

EN EL EVENTO CHANGE DE ESTE ES:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
Call Ordenar
End If


End Sub

FUNCIONA PERFECTAMENTE, pero quiero hacer la misma tabla aldo pero en la misma hoja por lo que hice otro modulo que llame modulo 2 que por supuesto es la misma programación anterior lo que cambia es el rango de Celdas y por supuesto lo cambie a ordenar2:

Sub Ordenar2()

Dim rangoDatos As Range
Dim CampoOrden As Range
Dim Ultimafila As Long

Ultimafila = Sheets("Lugares").Range("J" & Rows.Count).End(xlUp).Row
Set rangoDatos = Range("J6:M17" & Ultimafila)
Set CampoOrden = Range("M6")

rangoDatos.Sort Key1:=CampoOrden, order1:=xlAscending, Header:=xlYes
End Sub

EL PROBLEMA ES COMO PONGO EL COMANDO CHANGE LO DUPLICO Y ME SALE QUE ES AMBIGUO PORQUE PONGO ESTO:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 13 Then
Call Ordenar2
End If


End Sub

POR FAVOR COMO HAGO PARA PONER VARIOS EVENTOS CHANGE SI QUE ME DE CONFLICTOS. MIL GRACIAS A LOS QUE PUEDAN RESPONDERME.

GRACIAS



Avatar de Usuario
Dantte666
Miembro Frecuente
Miembro Frecuente
Mensajes: 415
Registrado: 31 May 2010 04:33

Re: Evento change

Mensaje por Dantte666 » 12 Feb 2019 12:49

No es necesario que establezcas varios eventos change (Además de que no es posible) para lograr lo que deseas, prueba con esto:

Código: Seleccionar todo

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Or Target.Column = 13 Then
  Select Case Target.Column
    Case 5:  Call Ordenar
    Case 13: Call Ordenar2
  End Select
End If
End Sub
Es posible optimizar aun más el código, me comentas como te fue.



gglenda122
Miembro Frecuente
Miembro Frecuente
Mensajes: 5
Registrado: 12 Feb 2019 11:29

Re: Evento change

Mensaje por gglenda122 » 12 Feb 2019 12:56

Amigo eres un genio, soy una novata, dime como hago para darte una buen like o algo parecido es la primera vez que uso esta pagina...



Avatar de Usuario
Dantte666
Miembro Frecuente
Miembro Frecuente
Mensajes: 415
Registrado: 31 May 2010 04:33

Re: Evento change

Mensaje por Dantte666 » 12 Feb 2019 13:16

Hay un error en ambas macros de Ordenado y es:

Código: Seleccionar todo

Set rangoDatos = Range("J6:M17" & Ultimafila)
Debiendo ser:

Código: Seleccionar todo

Set rangoDatos = Range("J6:M" & Ultimafila)



Avatar de Usuario
Dantte666
Miembro Frecuente
Miembro Frecuente
Mensajes: 415
Registrado: 31 May 2010 04:33

Re: Evento change

Mensaje por Dantte666 » 12 Feb 2019 13:42

Las Datos a ordenar se componen de 4 columnas siempre?



Avatar de Usuario
Dantte666
Miembro Frecuente
Miembro Frecuente
Mensajes: 415
Registrado: 31 May 2010 04:33

Re: Evento change

Mensaje por Dantte666 » 12 Feb 2019 13:59

Esto debe ser suficiente para lo que te propones:

Código: Seleccionar todo

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tc As Long
If Target.Column = 5 Or Target.Column = 13 Then Call Ordenar(tc:=Target.Column)
End Sub

Sub Ordenar(tc)
Dim Ultimafila As Long
With Sheets("Lugares")
  Ultimafila = .Cells(.Rows.Count, tc).End(xlUp).Row
  Set rangoDatos = .Range(.Cells(6, (tc - 3)), .Cells(Ultimafila, tc))
  Set CampoOrden = .Cells(6, tc)
  rangoDatos.Sort Key1:=CampoOrden, order1:=xlAscending, Header:=xlYes
End With
End Sub
Partiendo que los Datos a ordenar siempre se compongan de 4 columnas, en el supuesto de que pretendas ordenar más rangos únicamente deberas modificar la siguiente linea.

Código: Seleccionar todo

If Target.Column = 5 Or Target.Column = 13 Then Call Ordenar(tc:=Target.Column)
Adicionando las columnas, ejemplo:

Código: Seleccionar todo

If Target.Column = 5 Or Target.Column = 13 Then Call Ordenar Or Target.Column = 21 Then Call Ordenar(tc:=Target.Column)
Ello sera suficiente para que la macro se ejecute.



Avatar de Usuario
Dantte666
Miembro Frecuente
Miembro Frecuente
Mensajes: 415
Registrado: 31 May 2010 04:33

Re: Evento change

Mensaje por Dantte666 » 12 Feb 2019 14:02

Saludos.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.



gglenda122
Miembro Frecuente
Miembro Frecuente
Mensajes: 5
Registrado: 12 Feb 2019 11:29

Re: Evento change

Mensaje por gglenda122 » 12 Feb 2019 14:08

Gracias Dantte me habia funcionado como me lo dijiste la primera vez, ERES EXCELENTE , COMO TE DOY la MEJOR ESTRELLA.


SALUDOS... :D



Responder