Macro: Copiar una celda según fila seleccionada

Estoy usando este código con ayuda de esta página

' Macro1 Macro
'
' Acceso directo: CTRL+a
'
Sub copiar_Hoja()
Hoja3.Copy After:=Sheets(Sheets.Count)
nombre = ActiveSheet.Name
Hoja1.Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _
SubAddress:="'" & nombre & "'!B2", TextToDisplay:="Ficha"
Sheets(Sheets.Count).Select
Range("B3").Select
ActiveCell.FormulaR1C1 = "=PROYECTOS!R[2]C[5]"
Range("B4").Select
End Sub

Esta basicamente crea una hoja y vincula un texto de una hoja que contiene información general a otra que contiene información especifica
Mi problema esta en esta parte

Sheets(Sheets.Count).Select
Range("B3").Select
ActiveCell.FormulaR1C1 = "=PROYECTOS!R[2]C[5]"
Range("B4").Select

Yo necesito que por ejemplo, ejecuto la macro, se crea una nueva hoja y en un parte en especifico aparezca el nombre del proyecto contenido en la hoja principal, que en este caso es G4
Luego, vuelvo a aplicar la macro y la nueva hoja contiene el nombre del proyecto siguiente, que se encuentra en la hoja principal [proyectos] en la celda G5 y así sucesivamente.
El problema con esto es que siempre se queda en la celda G4 y no va avanzando.

2 respuestas

Respuesta
3

¿La Hoja3 y la hoja "Proyectos" es la misma hoja?

La macro la ejecutas desde la hoja "Proyectos", es decir, seleccionas la celda G4 y ejecutas la macro, entonces quieres que ese dato de la celda G4 se ponga en la celda B3 de la nueva hoja; después seleccionarías la celda G5 y ejecutas nuevamente la macro. ¿Es más o menos lo que haces?

Te explico más detalladamente

Tengo una hoja que se llama proyectos donde tengo más de 500. Cada proyecto tiene su nombre yotros detalles. Yo estoy haciendo una ficha de cada uno de ellos. Para eso, al lado de su nombre agregué una columna, que como veras en el código, agrega un vinculo, llamado ficha, que lleva a una hoja dedicada solo a equis proyecto [la hoja se crea automáticamente por la macro]. Sucede, que en la hoja proyectos, hay información que quiero pasar a su hoja correspondiente, esta[s] hojas están efectivamente como "Hoja4", etc. Entonces, para no estar copiando y pegando más de 500 datos a sus correspondientes hojas, use la función que describo más arriba.

Entonces: yo me sitúo en un fila, presiono ctrl+A y en la fila se crea un vinculo llamado ficha, que al darle click me lleva a la hoja dedicada o más detallada del proyecto. Donde espero, también automáticamente se copien ciertos valores de las celdas, como el nombre de estos proyectos.

En el detalle de la explicación, puedes poner ejemplos reales, utiliza nombres de hoja real, celdas, etc.

Dices: "yo me sitúo en un fila", ¿de cuál hoja? ¿De cuál columna?

Dices: "Donde espero, también automáticamente se copien ciertos valores de las celdas", cuál celda, ¿de cuál hoja quieres copiar y en cuál hoja y cuál celda se debe pegar?

Tengo una pestaña llamada "proyectos". En esta tengo distintas columnas, dentro de la que se encuentra "nombre del proyecto". Ubicada en la columna G y desde la fila 4 hacia 502 [con posibilidad de que siga aumentando] Acá agregue una nueva columna A. Cada vez que presiono CTRL+A, en la columna A se crea un vinculo llamado Ficha, a su vez se crea una hoja [nombre HojaNumero] El vinculo Ficha lleva a esta hoja creada. Aparte de crear el vinculo ficha, este salta una fila. Además, este vinculo siempre lleva a la ultima hoja.

Lo que yo necesito es que ademas de hacer todo esto, copie el nombre del proyecto, ubicado en la columna G y se copie y pegue en la celda B3 de la nueva hoja. Por eso tambien usé el codigo "ActiveCell.FormulaR1C1" ya que si cambio algo en la hoja proyectos, ojalá se cabie automaticamente en su ficha correspondiente.

El problema, es que así como está, cada vez que presiono CTRL+A se copia el nombre de la celda G4 [que  es donde comienzan los proyectos] luego, presiono nuevamente CTRL+A, pero se sigue pegando la de G4 y no cambia a G5.

Por cierto, le cambié el nombre a las "Hojax" por n

La pestaña Proyectos contiene todo lo que necesito mover, mientras que las n(2) por ejemplo, contiene la ficha del primer proyecto

Te anexo una nueva macro.

Antes de ejecutar la macro debes seleccionar la fila a la cual le vas a crear la hoja, es decir, si la fila 6 todavía no tiene su hoja, entonces seleccionas la celda A6.

La macro realiza lo siguiente:

1. Verifica que hayas seleccionado una fila de la columna A.

2. Segundo, copia la hoja "n" (la hoja "n" deberá existir), y la nueva hoja la pone al final de las hojas

3. Crea un vínculo en la hoja "proyectos" para direccionarse a la nueva hoja.

4. En la nueva hoja, en la celda B3, pone una fórmula, para obtener el nombre del proyecto de la hoja "proyectos", de la columna "G" y de la fila de donde fue llamada la macro.

5. Regresa a la hoja "proyectos" y te pone el cursor en la siguiente fila de la columna A

Sub Crear_Una_Hoja()
'Por Dante Amor
    '
    'Validaciones
        fila = ActiveCell.Row
        If fila < 4 Or ActiveCell.Column <> 1 Then
            MsgBox "Selecciona una celda de la colunmna A y fila mayor a 3"
            Exit Sub
        End If
    'Crear hoja
        Set h1 = Sheets("Proyectos")            'hoja de proyectos
        Set h2 = Sheets("n")                    'hoja que se va a copiar
        h2.Copy after:=Sheets(Sheets.Count)
        Set h3 = ActiveSheet
    'Crear vínculo
        h1.Hyperlinks.Add Anchor:=h1.Cells(fila, "A"), Address:="", _
            SubAddress:="'" & h3.Name & "'!B2", TextToDisplay:="Ficha"
    'Poner datos en la hoja creada
        h3.Range("B3").Formula = "='" & h1.Name & "'!G" & fila
        h1.Select
        Cells(fila + 1, "A").Select
End Sub

El detalle que veo en la lógica es el siguiente, qué pasa si seleccionas la fila 6, te crea una hoja y realiza el vínculo. Qué pasa si más adelante pones el cursor en la fila 6 y ejecutas la macro, pues la macro te crearía otra hoja y el vínculo quedaría con la recién hoja creada, pero tendrías 2 hojas para el mismo proyecto.


Prueba la nueva macro y dime si requieres un ajuste para que los nombres de las hojas, por ejemplo, tengan el nombre del proyecto, de esa forma podríamos validar si ya se creó una hoja para el proyecto y no duplicar hojas.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda
Respuesta
2

Prueba con esta macro

Sub copia_hoja()
Dim existe As Boolean
Set hp = Worksheets("proyectos")
Set H1 = Worksheets("hoja1")
Set h3 = Worksheets("hoja3")
Set proyectos = hp.Range("g4").CurrentRegion.Columns(1)
regresa:
With proyectos
    R = .Rows.Count
    For i = 1 To R
    existe = False
        nombre = .Cells(i, 1)
        On Error Resume Next
        existe = (Worksheets(nombre).Name <> Empty)
        On Error GoTo 0
        If Not existe Then
            h3.Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = nombre
            H1.Select
            ActiveCell.Offset(1, 0).Select
            ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _
            SubAddress:="'" & nombre & "'!B2", TextToDisplay:="Ficha " & nombre
            Sheets(Sheets.Count).Select
            Range("b3") = nombre
            Exit For
        End If
    Next i
End With
Set hp = Nothing:   Set H1 = Nothing
Set h3 = Nothing: Set proyectos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas