Copiar celdas vba con referencias

Hola!
Estoy programando en VBA Excel un sistema de gestión de información para recibir informes de diferentes fuentes y ordenarlas y clasificarlas. Tengo casi todo completo pero, claro, lo fundamental es copiar celdas y pegarlas en otros libros. Para esto he estado intentando programar una Sub a que pasándole los parámetros de LibroOrigen, HojaOrigen, InicioRango, FinRango, LibroDestino,... Me copiase toda la información desde donde yo quiero hasta donde me apetezca.
Lo he intentado de todas las maneras:
"Workbook(orig).Worksheets(a).Range(Cells(i, j).Address, Cells(k, m).Address).Value = Workbook(desT).Worksheets(2).Range(Cells(i2, j2), Cells(k2, m2))"
__________________-
"Sheets(1).Select
            Range(A1:A23).Select
            Selection.Copy
            Windows("Libro2").Activate
            Range("A1:A23").Select
            ActiveSheet.Paste
            Workbook.Close (NombreDeArchivoAimportar)"
Así pero metiendo referencias (ni si quiera tal y como está escrito me funcionaba)
Ya he quemado google, toda la ayuda y manuales que he encontrado. ¿En qué me equivoco? He definido las variables tanto como Range, workbooks, sin definir...
También me da error al llamar a las funciones pidiéndome más parámetros. Vamos que tengo la pincha hecha un lío.
A ver si alguien me entiende, por que ni siquiera yo me comprendo...
{"lat":20.000612248781,"lng":73.7828493118286}

1 respuesta

Respuesta
Vamos a ver si te puedo orientar, yo para hacer esto haría lo siguiente:
1º Crearía una carpeta con todos los archivos de los que quiero importar los datos para que la ruta para abrir los libros sería siempre la misma y no tendría que modificar la macro.
2º Pasaría a variables tanto el nombre del libro como el rango que quiero copiar, de esta manera:
Sub Copiar()
Dim Nomb_Libro As String
Dim Mi_Hoja As String
Dim Mi_Rango As String
Dim Libro_Guardar As String
Nomb_Libro=InputBox("ESCRIBA EL NOMBRE DEL LIBRO")
Mi_Hoja=InputBox=("ESCRIBA LA HOJA QUE UTILIZAREMOS")
Mi_Rango=Inputbox("ESCRIBA EL RANGO A COPIAR")
Libro_Guardar=InputBox("LIBRO DONDE GUARDAR LOS DATOS")
ChDir "C:\"
    Workbooks.Open Filename:= _
        "C:\" & Nomb_Libro & ".xls"
    Sheets(" & Mi_Hoja & ").Select
    Range(Mi_Rango).Select
    Selection.Copy
    ActiveWindow.Close
    ChDir "C:\"
    Workbooks.Open Filename:="C:\" & Libro_Guardar & ".xls"
    Range("A1").Select
    ActiveSheet. Paste
    ActiveWorkbook. Sabe
    ActiveWindow. Close
End Sub
Todos los libros están en C:\ evidentemente esta macro esta en un libro vacío la ejecutas y te abre el libro que quieres, la hoja que quieres y eliges el rango lo copia y te abre el libro de destino que hayas elegido y te pega en la hoja activa lo copiado.
>Un saludo
>Julio
Muchas gracias por tu respuesta. Pero no se ajusta mucho a mis necesidades, lo que necesito es una función, subprograma o lo que sea que pasándole los argumentos que previamente me ha seleccionado el usuario, me copie las celdas que le diga desde el programa principal. Mi programa está en este estado:
________________________________
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
'Actualizar pantalla desactivada
'Definimos las variables
Dim NumeroDeSurveys As Integer
NumeroDeSurveys = TextBox1
Dim NumeroDeWorks As Integer
NumeroDeWorks = TextBox2
Dim NombreDeArchivoAcomponer
Dim Ruta As String
Dim NombreDeArchivoAimportar As Workbook
Dim n As Integer 'n nos servirá de contador
'Variables definidas
'Vamos a elegir donde Guardar el archivo a componer
MsgBox ("Select where do you want to save the Dairy Report")
Ruta = BrowseForFolder
'Formamos el nombre del archivo a componer
NombreDeArchivoAcomponer = Ruta & "\" & TextBox5 & "-" & TextBox4 & "-" & TextBox3
'Creamos el archivo a componer
Workbooks.Add
    ActiveWorkbook.SaveAs Filename:= _
        NombreDeArchivoAcomponer, FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=Fals
'Archivo a componer creado
'Ahora empezamos a importar, primero los surveys
'APARTIR DE AQUÍ HAY QUE RECTIFICAR LAS CELDAS A COPIAR
'APARTIR DE AQUÍ HAY QUE RECTIFICAR LAS CELDAS A COPIAR
'APARTIR DE AQUÍ HAY QUE RECTIFICAR LAS CELDAS A COPIAR
'APARTIR DE AQUÍ HAY QUE RECTIFICAR LAS CELDAS A COPIAR
If CheckBox1 = True Then
    n = 1 'reiniciando el contador
    While n <> NumeroDeSurveys + 1
            MsgBox ("Select the " & n & " Survey Dairy Report")
            Workbooks.Open (Application.GetOpenFilename())
            Sheets(1).Select
            Range(A1:A23).Select
            Selection.Copy
            Windows("Libro2").Activate
            Range("A1:A23").Select
            ActiveSheet.Paste
            Workbook.Close (NombreDeArchivoAimportar)
            n = n + 1
    Wend
        MsgBox ("All Surveys report Imported")
End If
Application.ScreenUpdating = True
'Actualizar pantalla actualizado
End Sub
Function BrowseForFolder(Optional OpenAt As Variant) As Variant
    Dim ShellApp As Object
    Set ShellApp = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "Please choose a folder to save the file", 0, OpenAt)
    On Error Resume Next
    BrowseForFolder = ShellApp.self.Path
    On Error GoTo 0
    Set ShellApp = Nothing
    Select Case Mid(BrowseForFolder, 2, 1)
    Case Is = ":"
        If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
    Case Is = "\"
        If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
    Case Else
        GoTo Invalid
    End Select
    Exit Function
Invalid:
     'If it was determined that the selection was invalid, set to False
    BrowseForFolder = False
End Function
Sub AbrirHoja(Nombre_del_Fichero)
Dim Nombre_del_Fichero As Variant
Nombre_del_Fichero = Application.GetOpenFilename()
Workbooks.Open Nombre_del_Fichero
'A partir de aquí sólo estan los botones de la interfaz
End Sub
Private Sub Label2_Click()
End Sub
Private Sub TextBox1_Change()
End Sub
Private Sub TextBox2_Change()
End Sub
Private Sub CheckBox1_Click()
End Sub
Private Sub CheckBox2_Click()
End Sub
Private Sub TextBox3_Change()
End Sub
Private Sub TextBox4_Change()
End Sub
Private Sub TextBox5_Change()
End Sub
______________
Resumiendo, todo esto sirve para crear un informe diario a partir de los partes de trabajos que recibo.
En un cuadro de dialogo selecciono fecha, si quiero incorporar informes de supervisores y cuantos, si quiero incorporar partes de trabajo y cuantos y un botón de empezar.
Se me crea un archivo con la fecha, este archivo va a ser el informe diario a componer, abro el primer archivo a importar y ¡Ahora empieza mi problema!
Como de cada tipo de informe y de cada informe, tengo que copiar información de diferentes sitios a diferentes lugares del archivo a componer; estaba intentando crear algún tipo de función o subprograma que me haga esto a partir de la información que le pase en los parámetros. Nótese que no estoy acostumbrado visual y a lo mejor me uso vocabulario de otros lenguajes.
Muchísimas gracias por tu ayuda, empiezo a estar desesperado!
Vamos a ver para generar los informes puedes hacer macros en módulos a parte. Pongamos que has terminado con lo que has puesto en la macro, ahora es cuando tienes que abrir un archivo copiar un rango de hoja y llevarlo a tu libro. Pues todo este código lo pones en una macro independiente con su entrada Sub ........() hasta el final End Sub. Tiene que comenzar por Sub y no por Private Sub.
En la macro que has puesto arriba antes de la ultima linea End Sub, escribes Call AQUÍ EL NOMBRE QUE LE DES A LA MACRO DEL MODULO, si la llamastes Copiar_Datos por ejemplo se lamaría Sub Copiar_Datos() pues en la macro pones Call Copiar_Datos y lo que hace esta instrucción es mandarte a la macro que tienes en el módulo la ejecuta y vuelve a la primera. Con esto tienes una macro independiente que puedes utilizar desde diferentes controles del UserForm.
>Un saludo
>Julio
Si necesitas ayuda me escribes lo que quieres hacer y veremos la forma de solucionarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas