Creacion de hojas mediante campo dinamico

5 envíos / 0 nuevos
Último envío
nitramara
Imagen de nitramara
Offline
última acción: Hace 12 años 3 meses
alta: 05/01/2012 - 17:23
Puntos: 45
Creacion de hojas mediante campo dinamico

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..

universoexcel
Imagen de universoexcel
Offline
última acción: Hace 6 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 25/10/2011 - 19:41
Puntos: 710
Re: Creacion de hojas mediante campo dinamico

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

nitramara
Imagen de nitramara
Offline
última acción: Hace 12 años 3 meses
alta: 05/01/2012 - 17:23
Puntos: 45
Re: Creacion de hojas mediante campo dinamico

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



universoexcel
Imagen de universoexcel
Offline
última acción: Hace 6 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 25/10/2011 - 19:41
Puntos: 710
Re: Creacion de hojas mediante campo dinamico

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

nitramara
Imagen de nitramara
Offline
última acción: Hace 12 años 3 meses
alta: 05/01/2012 - 17:23
Puntos: 45
Re: Creacion de hojas mediante campo dinamico

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.