Hola a tod@s, bueno les comento esto comenzando en esto de las macros ya he iniciado mis primeros pinitos pero la verdad ... NECESITO MAS.. bueno a lo que vinimos, he creado una tabla dinamica la cual me arroja bien los datos la cuestion es: tengo un campo puede llamarse B4, en el cual estan los nombres de las personas... pues bien cuando selecciono un nombre me muestra todos los datos filtrados que he seleccionado, ahora bien, la idea es crear por cada uno de los nombres una hoja con su respectiva informacion en orden alfabetico.
Ya he pillado en la web un codigo que he modificado y me permite crear una hoja nueva con el nombre seleccionado, pero el lio esta en que si mi base es de 1000.. o mas usuarios entonces deberia dar 1000 o mas click's.. y lo que quiero es que esto sea automatico con una macro pero la verdad nada...
Me podrian ayudar porfa..??
Mil gracias..
Hola, lo que necesitas agregarle a tu macro es un loop para que repita la acción "N" numero de veces, seria algo así:
ultimoregistro=cells(rows.count,2).end(xlup).row 'esto define el ultimo renglón ocupado, suponiendo como en tu ejemplo que los datos están en B4
For i=4 to ultimoregistro
'aquí va el código para crear la hoja
Next i
Este loop va a tomar todos los valores que tienes desde B4 hasta tu ultima celda ocupada y les va a aplicarel código que ya tienes para renombrar tu hoj
Visitanos en http://universoexcel.com
Visitanos en http://universoexcel.com
Hola.. disculpa por lo burdo de la programacion pero como te informe hasta ahora estoy iniciando...
Bueno te comento he intentado lo que me dices pero la verdad no me sale tal cual como lo pretendo.. no se si es porque el codigo lo estoy aplicando sobre la hoja y no sobre un modulo... si este es el caso, como le haria para que al ejecutar la macro automatica..?? o es preciso insertat un boton que me llame la macro?? el lio esta en que si lo hago asi no tendria oportunidad de ejecutar solo una hoja... me explico... lo tengo programado sobre hoja porque me exijo que pueda verse una sola hoja al seleccionar el nombre, pero tambien quiesiera un boton en el caso de que quiera que se vean todos los nombres... no se si soy claro en esto... la verdad me tiene loco..loco..
aca envio el codigo que estoy manejando..
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
ultimoregistro = Cells(Rows.Count, 2).End(xlUp).Row
For i = 4 To ultimoregistro
Set datos = Range(ActiveCell.Address("$B$4"))
If Union(Target, datos).Address = datos.Address And ActiveCell <> "" Then
hoja_de_calculo = ActiveCell.Value
datos = ActiveCell.Offset(0, 1).Value
Sheets(hoja_de_calculo).Select
If ActiveSheet.Name <> hoja_de_calculo Then
hoja_de_calculo = Replace(hoja_de_calculo, ":", "")
hoja_de_calculo = Replace(hoja_de_calculo, "/", "")
hoja_de_calculo = Replace(hoja_de_calculo, "\", "")
hoja_de_calculo = Replace(hoja_de_calculo, "?", "")
hoja_de_calculo = Replace(hoja_de_calculo, "*", "")
hoja_de_calculo = Replace(hoja_de_calculo, "[", "")
hoja_de_calculo = Replace(hoja_de_calculo, "]", "")
If hoja_de_calculo <> "" Then
Hoja2.Select
Hoja2.Copy After:=Hoja2
ActiveSheet.Name = Left(hoja_de_calculo, 31)
Range("$B$4").Select
ActiveCell = datos
End If
Else
hoja_de_calculo.Select
End If
End If
Application.ScreenUpdating = True
Next i
End Sub
Hola,
ok, vamos por partes, ahora que ya vi tu codigo, ya puedo ver que es lo que esta ocurriendo.
Lo que pasa es que al referencias siempre B4, la seleccion siempre iba a ejecutar lo que hubiera en B4 y nunca lo que tuvieras en otras celdas. Le hice un par de modificaciones a tu codigo, y ahora cuando seleccionas una celda sola, nombra una hoja de trabajo, o cuando seleccionas un rango, nombra varias.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
ultimoregistro = Cells(Rows.Count, 2).End(xlUp).Row
For i = 4 To ultimoregistro
Set datos = Range(ActiveCell.Address(i, 2))
If Union(Target, datos).Address = datos.Address And ActiveCell <> "" Then
hoja_de_calculo = ActiveCell.Value
datos = ActiveCell.Offset(0, 1).Value
Sheets(hoja_de_calculo).Select
If ActiveSheet.Name <> hoja_de_calculo Then
hoja_de_calculo = Replace(hoja_de_calculo, ":", "")
hoja_de_calculo = Replace(hoja_de_calculo, "/", "")
hoja_de_calculo = Replace(hoja_de_calculo, "\", "")
hoja_de_calculo = Replace(hoja_de_calculo, "?", "")
hoja_de_calculo = Replace(hoja_de_calculo, "*", "")
hoja_de_calculo = Replace(hoja_de_calculo, "[", "")
hoja_de_calculo = Replace(hoja_de_calculo, "]", "")
If hoja_de_calculo <> "" Then
Hoja2.Select
Hoja2.Copy After:=Hoja2
ActiveSheet.Name = Left(hoja_de_calculo, 31)
Range("B4").Select
ActiveCell = datos
End If
Else
hoja_de_calculo.Select
End If
End If
Application.ScreenUpdating = True
Next i
End Sub
Visitanos en http://universoexcel.com
Visitanos en http://universoexcel.com
Hola nuevamente, primero que todo muchas pero muchísimas gracias por tomarse el tiempo para ayudarnos a aquellos que no tenemos los conceptos o conocimientos previos para culminar las labores.
Prometo firmemente que una vez logre un nivel mas avanzado del tema hará la misma labor altruista que vienes desarrollando, por esto infinitas gracias.
Ahora a molestar... te comento con tu código intente realizar las actividades que necesito pero me ha sido imposible...
intente que el código fuese operado desde un botón para así generarlo de una vez pero al parecer se me queda en un loop indefinido, ya que no termina y finaliza bloqueándome el equipo.
No se cual podría ser el problema... me podrías tirar unos daticos para ver si al fin logro terminar esta locura que ya me descabezo...
acá te mando el código que utilizo..
Sub Botón109_Haga_clic_en()
On Error Resume Next
Application.ScreenUpdating = False
ultimoregistro = Cells(Rows.Count, 2).End(xlDown).Row
For i = 4 To ultimoregistro
Set datos = Range(ActiveCell.Address(i, 2))
If Union(Target, datos).Address = datos.Address And ActiveCell <> "" Then
hoja_de_calculo = ActiveCell.Value
datos = ActiveCell.Offset(0, 1).Value
Sheets(hoja_de_calculo).Select
If ActiveSheet.Name <> hoja_de_calculo Then
hoja_de_calculo = Replace(hoja_de_calculo, ":", "")
hoja_de_calculo = Replace(hoja_de_calculo, "/", "")
hoja_de_calculo = Replace(hoja_de_calculo, "\", "")
hoja_de_calculo = Replace(hoja_de_calculo, "?", "")
hoja_de_calculo = Replace(hoja_de_calculo, "*", "")
hoja_de_calculo = Replace(hoja_de_calculo, "[", "")
hoja_de_calculo = Replace(hoja_de_calculo, "]", "")
If hoja_de_calculo <> "" Then
Hoja2.Select
Hoja2.Copy After:=Hoja2
ActiveSheet.Name = Left(hoja_de_calculo, 31)
Range("B4").Select
ActiveCell = datos
End If
Else
hoja_de_calculo.Select
End If
End If
Application.ScreenUpdating = True
Next i
End Sub
Por tu colaboración y paciencia
Mil Gracias..
Cordialmente.
Martin.