Llamar a un dato de una hoja que aun no existe

Necesito ayuda para crear una función que llame a un dato de una hoja que no existe aun pero de la que tengo el nombre de como se llamara en una de las celdas de la hoja activa.
Tengo una hoja con los datos de servicios realizados con la siguiente estructura:
Id, inicio, fin, cliente, lugar, venta, coste, beneficio
Cuando activo la celda del campo id se crea una hoja nueva con el nombre de esta celda si no existe y si existe voy a la hoja con ese nombre. Pero necesito activar alguna función que a la vez que se crea la hoja nueva introduzca el dato de una celda concreta en la columna venta de la hoja principal y el dato de otra celda concreta de la nueva hoja en la columna coste de la hoja principal.
Gracias anticipadas

1 Respuesta

Respuesta
1
De cualquier forma la hoja existe, o bien la crea el Id o ya existe, por tanto puedes seleccionarla Sheets("Tu hoja).Select
Range("el que quieras utilizar").select
ActiveCell.Value=al dato que tu puedes traer en una variable
>Un saludo
>Julio
Muchas gracias Julio. ¿Me podrías indicar cómo llevo ahora el dato a la hoja principal a la celda de la linea donde hemos pulsado para crear la hoja? Te pego el código que yo tengo a medias:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
'ocultamos el procedimiento, para que
'no se vea la ejecución del macro
Application.ScreenUpdating = False
'pasamos a una variable el rango de datos
'en este caso de A3:A1002. Si fuera todo
'un área determinada tendríamos que cambiar el rango,
'de tal forma que si por ejemplo fuese todo A
'pondríamos esto:
'Set datos = Range("A:A")
Set Grupos = Range("A3:A1002")
'Si seleccionamos una celda de ese rango
'(en este caso, A3:A1002), y además
'esa celda no está vacía (porque si está vacía
'no crearemos una hoja sin nombre), entonces...
If Union(Target, Grupos).Address = Grupos.Address And ActiveCell <> "" Then
    'creamos una hoja con el nombre que haya
    'en esa celda que hemos seleccionado, siempre
    'y cuando no exista ya, partiendo de otra
    'hoja ya existente.
    hoja_de_calculo = ActiveCell.Value
    'seleccionamos la hoja con ese nombre
    Sheets(hoja_de_calculo).Select
    'si no existe esa hoja, la creamos
    'a partir de otra ya existente
    If ActiveSheet.Name <> hoja_de_calculo Then
        'quitaremos los caracteres no permitidos en
        'el nombre de las hojas, por si las moscas
        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, "]", "")
        'volvemos a comprobar que queda "algo" después de
        'eliminar los carecteres raros
        If hoja_de_calculo <> "" Then
            'copiaremos la Hoja2 (nombre interno VBA)
            'así si le cambian el nombre a la hoja (pestaña)
            'no tendremos ningún problema
            Grupo.Select
            'la pegamos al final (tras la última hoja)
            Grupo.Copy After:=Sheets(Sheets.Count)
            'le cambiamos el nombre, y le pondremos
            'el que figura en la celda seleccionada
            'pero para evitar problemas con la longitud
            'del nombre que haya en la celda, limitaremos
            'el nombre de la hoja, a los primeros 31 caracteres,
            ActiveSheet.Name = Left(hoja_de_calculo, 31)
            'Ponemos de una celda, el nombre
            'de la hoja de cálculo que necesitamos(por ejemplo en B1)
            Range(B1).Select
            ActiveCell = hoja_de_calculo
            'Seleccionamos la celda de la que necesitamos el valor
            'y nombramos una variable para el dato
            Range(I5).Select
            Set Facturado = ActiveCell.Value
            'Trasladamos el dato a la hoja principal
            Sheets(Informes).Select
            Range(????).Select
            ActiveCell.Value = Facturado
        End If
    Else
        'si ya existe una hoja con ese nombre,
'nos situamos en ella
hoja_de_calculo. Select
    End If
'finalizamos el condicional que comprueba
'si nos hemos situado en una celda del rango
End If
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub
Lo que esta en negrita es lo que no tengo claro. Debo trasladar el dato de la celda i5 de la nueva hoja a la columna h de la fila en la que he pulsado para crear la nueva hoja y que este dato se actualice con cada modificación de la hoja nueva.
Gracias anticipadas.
De acuerdo tu problema es que desconoces en qué celda (del rango seleccionado) se ha hecho click y por ello te es imposible decirle en la macro que se vaya a la columna H de esa misma fila. Para hacer esto un pequeño truquito en código que te explico a continuación:
Después de la linea Sheets(Informes).Select escribimos
celda = ActiveCell.Address
'Como ya estamos en la hoja y tenemos como celda activa donde se hizo click, con la instrucción anterior sacamos la referencia absoluta de la celda que sería del tipo $A$33 por ejemplo
celda = Mid(direccion, 4)
'Ahora eliminamos todo lo primero hasta el 4º caracter (tendremos problemas si utilizas 'columnas con 2 caracteres del tipo AD) pero si es así pones un 5 en vez 4
'Nos quedamos con el segundo elemento del vector que será solo la fila, y ahora utilizas la propiedad Range o la propiedad Cells, la que te guste si utilizas Range escribes:
Range("H",celda).Select 'Donde celda será la fila
Cells(celda, 8). Select 'O la propiedad Cells donde celda es la fila y 8 es el número que corresponde a la columna H contando desde A hacia la derecha.
Y ya te has situado donde querías para pegar tu dato que traes desde la otra hoja.
>Un saludo
>Julio
PD. Si te ha servido puntúa y finaliza la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas