Copiar datos desde un libro a otro sin necesidad de abrir los dos.

38 envíos / 0 nuevos
Último envío
Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Copiar datos desde un libro a otro sin necesidad de abrir los dos.

Tnego un libro Excel, con cinco hojas.

Los datos se introducen en la Hoja1. El resto de las Hojas, hacen procesos sobre estos datos de la Hoja1

A lo largo del tiempo, voy haciendo modificaciones en el libro, para mejorar o sencillamente para resulver pequeños fallos detectados en el diseño...

El usuario ha introducido ya sus datos en la Hoja1 y le envio la nueva version. Se encuentra con que debe "traspasar" los datos desde la version anterior y aunque es obvio que puede hacerse por el recurso de abrir los dos libros y copiar y pegar los datos desde la Hoja1 vieja a la Hoja1 nueva, ya que el formato de columnas, filas y celdas en general, es el mismo en las dos versiones.

Puedo, sin dificultad, utilizando la Application.GetOpenFilename... escoger el fichero donde estan los datos metidos, pero mi pregunta en concreto es: Se puede gestionar este traspaso de datos desde el libro nuevo, sin necesidad de abrir el libro viejo...?

La idea, es incluir un boton en alguna de las hojas del libro, y vincularlo al macro que pudiera hacer ese proceso... Agradeceria cualquier pista al respecto...

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 horas 1 min
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Copiar datos desde un libro a otro sin necesidad de ...

Para leer del libro viejo Excel tendrá que abrirlo, otra cosa es que se le muestre el proceso al usuario.

Prueba a crear un objeto workbook que se refiera al libro antiguo y con él das los pasos necesarios para traer la información al libro nuevo

 

Dim LibroAntiguo As Workbook

    Set LibroAntiguo = Workbooks.Open(RutaAlArchivo) 'la ruta que obtienes con getopenfilename

    With LibroAntiguo

    'importas los datos que necesites

    

    End With

    LibroAntiguo.Close False    'cerramos sin guardar cambios

    Set LibroAntiguo = Nothing

End Sub

 

si no quieres que el usuario vea el proceso puedes desactivar la actualización de la pantalla durante la macro
Application.ScreenUpdating=false 'al principio del proceso

 

 

------
Ya sé Excel, pero necesito más.

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Muchas gracias Paco... una vez mas.

Voy a trabajar sobre la idea que me ofreces, y volvere a hacerme presente en el Foro, tanto si responde a mi planteamiento, como si encuentro alguna dificultad.

He querido responder pronto, porque preveo estar unos dias ocupado en otras cosas. En cuanto salga de ello, lo probare.

De todas maneras, tiene toda la pinta de que va a funcionar...

Gracias, Paco.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: Copiar datos desde un libro a otro sin necesidad de ...

Saludos.

Una opción seria utilizar las viejas macrofucniones, un ejemplo.

 

 

Sub Obtener_Datos()

Application.ScreenUpdating = False

With Sheets("Hoja1")

'verificamos si hay datos en la hoja

'donde se almacenaran los resultados

datos = Application.CountA(.Range("A1:A11"))

'insertamos una linea para poder limpiar el rango

.Range("A1:D1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

'si hay datos en la hoja donde se almacenaran los resultados

'los borramos para actualizarla

With .Range("A2:D11")

If datos > 0 Then .ClearContents

'definimos de que libro extraeremos los datos

ruta_libro = "C:\Users\Usuario\Desktop"

nombre_libro = "Libroprueba.xls"

nombre_hoja = "Hoja1"

'insertamos las formulas

.Formula = "='" & ruta_libro & "\[" & _

nombre_libro & "]" & nombre_hoja & "'!a1"

'dejamos solo los valores

.Value = .Value

End With

'recorremos el rango para eliminar ceros

For b = 1 To 4

With .Columns(b)

.AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="=00"

.SpecialCells(xlCellTypeVisible).ClearContents

End With

Next

'eliminamos la linea que habiamos inssertado

.Range("A1:D1").Delete Shift:=xlUp

End With

Application.ScreenUpdating = True

End Sub

 

Atte.

joshua

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Te agradezco, Joshua, tu aportacion al tema.

Pero la verdad es que se me "escapan" muchas de las expresiones que utilizas, en las macro-funciones.

Es mas, me llega a confundir, algunas de las lineas como esta:

.AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="=00"

porque no entiendo el papel que desempeña lo del formato con un cero... con dos...

De todas maneras, no puedo menos que agradecerte que hayas querido aportar tu solucion al planteamiento que he hecho de los dos libros...

Saludos cordiales 

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: Copiar datos desde un libro a otro sin necesidad de ...

Saludos.

No es complicado en el ambito vba de excel la terminologia que uilizo es la más comun y simple, pero bueno lo más sencillo para entender que es lo que hace una macro es utilizar un exit sub al final de una linea para detener la macro y ver que es lo que realizo en breve te adjuntare un ejemplo.

 

con respecto a la linea que indicas te amplio.

 

'recorremos el rango para eliminar ceros

'usamos un bucle para recorrer las columnas donde se insertaron las formulas

esto es para limpiarlas de ceros ya que si no existen datos se genera un cero en el

resultado.

For b = 1 To 4

'comando utilizado para no repetir una misma instrucción que en

'este caso seria Columns(b)

With .Columns(b)

'esta parte no es mas que un autofiltro simple que filtra los resultados con un cero o

'con doble cero

.AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="=00"

'con esta linea borramos solo las celdas visibles

.SpecialCells(xlCellTypeVisible).ClearContents

End With

Atte.

joshua

xoan ninguen
Imagen de xoan ninguen
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 19/01/2011 - 10:03
Puntos: 835
Re: Copiar datos desde un libro a otro sin necesidad de ...

Existen otras opciones, aunque van a requerir "algunos" conocimientos de VBA (para entenderlo...) 

 

Incluyo directamente los enlaces, porque copiar+pegar tanto texto sería criminal. Y porque, de todas formas, si la información a intercambiar reside en un libro sin macros, la forma más simple es hacerlo como indica Paco. Lo siguiente es para gente que tenga "mucho muchísimo" interés en probar y trastear.

http://www.trazex.com/2012/05/12/abrir-archivos-en-referencias-externas/

http://www.trazex.com/2012/05/03/intercambio-de-informaci%C3%B3n-con-otros-archivos-mediante-ado/

 

Con el primero, se podrían abrir libros con el mismo nombre (no sería la primera vez que me ocurra). Con lo del segundo, se pueden importar datos de un libro, sin necesidad de abrirlo (por tanto, sin que se ejecuten sus macros).

 

Un saludo

-----------------------------------------------------------------

www.TrazEX.com (soluciones sobre Excel)

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Muchas gracias Enrique, por tu nueva aportacion.

Tnego que decir, que me has acercado al tema de ADO al que una vez me acerque... y sali "asustado" a la primera dificultad... No consegui ni compilar una macro con esas instrucciones, porque supongo que hay que disponer de algun complemento mas...

De todas maneras, te agradezco que estes atento en ayuda del que la solicita...

En mi caso, no me puedo quejar: sois tres buenos amigos, los que habeis respondido a mi llamada de ayuda.

Estoy peleando con el planteamiento de Paco, porque a pesar de que el planteamiento de la solucion es claro como el agua cristalina, me estoy liando con los "pequeños detalles". No controlo cuando esta activo un libro y cuandop esta activo el otro, porque despues de copiar el bloque desde uno de los ficheros, a la hora de pegarlo en el otro, me saltan errores por todas partes... Pero quiero seguir peleando... porque es la unica manera de llegar a aprender. Cada error que soluciono, una gran satisfaccion que me llevo...

De tu aportacion, amigo Joshua, te dire, que "ya voy entendiendo" un poco mas. Espero ese fichero de prueba que me anunciabas, para poder ver sobre un supuesto, el funcionamiento de cada instruccion.  La sugerencia me ha parecido muy buena... para mi, que soy novato: eso de poner un End Sub al final de la linea que se desea y "ver" lo que ha pasado...

Pasito a pasito... Gracias a los tres.

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Re: Copiar datos desde un libro a otro sin necesidad de ...

Bueno, en vez de poner un "end sub", lo que puedes hacer es ejecutar la macro línea a línea con F8. Si lo que quieres ver está muy lejos, con poner delante de donde te interese un punto de detención (pinchas a la izquierda de la expresión y se pone un punto rojo), ejecutas con F5 y cuando llega al punto se detiene y puedes ver qué ha ocurrido. Si "sobrevuelas" con el ratón las variables, te aparece el valor que tienen en cada momento. Y a partir de ahí, con F8 vas avanzando línea a línea.

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Hola Cron.

Gracias tambien a ti, por "meter la cuchara".

Sabes? Todo es bueno para el cocido... del aprendizaje.

He "descubierto" sobre todo la ayuda del "punto de detencion" al que he visto que se llega por distintos caminos, desde pinchar como tu sugieres en tu aporte, hasta ir al F9 para hacer lo mismo... Evivente... lo de pinchar, (lo pone o lo quita secuencialmente), mas comodo.

La tecla F8 para ir paso a paso, viene a ser otra manera de analizar el proceso que se esta ejecutando en la macro...

Joshua me habia sugerido poner Exit Sub (no End Sub como equivocadamente puse en mi respuesta anterior), y esta bien conocer diferentes opciones y hacer uso de la mejor en cada ocasion.

Sobrevolar las variables, esta tambien muy bien. Puede aclarar lo que esta ocurriendo... porque he visto que se puede sobrevolar una variable colocada mucho mas adelante en la macro, y se va actualizando en cada F8 que le afecta... Otra idea que va al puchero...

Gracias Cron.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: Copiar datos desde un libro a otro sin necesidad de ...

 

Saludos.

Disculpa la tardanza, te adjunto el ejemplo que te habia prometido.

Coloca los dos libros en una misma carpeta, esto es porque estoy haciendo referencia a la ruta del Libro_destino con la siguiente línea.

ruta_libro = ActiveWorkbook.Path, pero se pueden colocar en carpetas diferentes cambiando el ActiveWorkbook.Path por la ruta de la carpeta donde se encontrara el Libro_origen de esta forma "C:\Users\Usuario\Desktop", bueno la macro la ejecutas desde el Libro_destino, pruébala y comentas, si quieres probarla de lleno en tu original habría que modificar los rangos de extracción pero esto es sencillo, si no lo puedes realizar con gusto te lo hago solo necesitaría una copia de tu original claro esta que con datos ficticios pero muy importante con la misma estructura es decir rallados formatos, etc.

 

Atte.

joshua

AdjuntoTamaño
Office spreadsheet icon libro_destino.xls35.5 KB
Office spreadsheet icon libro_origen.xls22.5 KB
Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Hola Joshua:

He visto el funcionamiento de tu macro en estos dos ficheros. Perfecto. Copia los datos y formatea las celdas con alineacion al centro.

Lo he aplicado a mis ficheros haciendo las variaciones en el macro, para ajustar a las columnas y filas que me interesan... y me pierdo...

No acierto a controlar las columnas ni las filas... y en loas datos copiados, sobre todo, los que contienen fechas o numeros... me hace cosas rarisimas que no entiendo...

Me gustaria enviarte los ficheros que yo utilizo, para que veas por donde surgen los problemas.

El fichero origen tiene datos y tiene las hojas protegidas... Me gustaria enviartelo a tu direccion de correo si es posible, para darte las claves de acceso y demas...

He visto que ofreces la posibilidad de enviarte un correo, pero no veo la manera de enviarte los ficheros adjuntos...

Saludos cordiales

 

 

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: Copiar datos desde un libro a otro sin necesidad de ...

Saludos.

Puedes enviarmelos a eliasorozco.serviconta@gmail.com

 

Atte.

joshua

Jose Luis Casla...
Imagen de Jose Luis Casla Araiz
Offline
última acción: Hace 1 año 1 mes
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntos
alta: 11/05/2012 - 15:15
Puntos: 1785
Re: Copiar datos desde un libro a otro sin necesidad de ...

Gracias Joshua por el envio de los ficheros adaptados para aplicar tu macro. Funciona perfectamente.

Quedo muy agradecido por la solucion que me has proporcionado, y quiero ponerlos a disposicion de todos, por si alguno mas, puede beneficiarse de ello.

Los dos ficheros, se explican por si mismos. El libro_origen tiene los datos, y el libro_destino contiene el macro para recibir los datos.

Saludos cordiales.

Jose Luis

AdjuntoTamaño
Office spreadsheet icon libro_destino.xls399.5 KB
Office spreadsheet icon libro_origen.xls384.5 KB
visitante (no verificado)
Imagen de visitante
Re: Copiar datos desde un libro a otro sin necesidad de ...

Gracias..son los mejores..un saludo desde  Puerto Maldonado,Perú...son extraordinarios....mis respetos

visitante (no verificado)
Imagen de visitante
Re: Copiar datos desde un libro a otro sin necesidad de ...

Hola Yo tb necesito algo similar pero con la diferencia elmio debebuscar datos  con un criterio y luego copiar donde corresponda alcriterio buscado.

visitante (no verificado)
Imagen de visitante
Re: Copiar datos desde un libro a otro sin necesidad de ...

amigos como debería hacer para que solamente copie por ejemplo el rango de la comuna "A" y pague en el rango de la columna "B" del libro destino?..

JOHN ANDRES (no verificado)
Imagen de visitante
AYUDA URGENTE

HOLA TENGO DOS ARCHIVOS DE CALIFICACIONES... TENGO UN TERCERO QUISIERA QUE LAS NOTAS FINAL DEL PRIMER Y SEGUNDO ARCHIVO KISIERA SE KOPIEN AUTOMATICO AL TERCERO ME AYUDARIAS EN ESO... NO ENTIENDO MUCHO DE ESTO SE ME HARIA MAS FACIL CON UN VIDEO O TUTORIAL... GRACIAS DE ANTEMANO

jose d (no verificado)
Imagen de visitante
filtrar los datos por nombre o por cualquiera

como se filtraria los datos para cojer los datos filtrados y enviarlos para la hoja destino, tengo otra enquietu si tengo una planilla ya echa y quiero meter los datos q estoy mando a esa planilla ya echa pero al momento de insertar esos datos sea mayor, pues q se genere esa nueva columna pero si hay menos q el formato me que asi intacto, espero q me entiendas.

Programacion de... (no verificado)
Imagen de visitante
responder consultas

Joshu mi nombre es cesar... me gustaria que me apoyaras con muchas consultas en excel que tengo. como puedo hubicarte para tener tu correo... y poder hacerte las consultas. te paso mi correo. cesargaitanp@hotmail.com

 

Perezperez (no verificado)
Imagen de visitante
Copiar el valor de una celda especifica a otro libro

Es una pregunta relacionada.

Tengo 84 archivos excel en una carpeta y necesito extraer la celda G4 de cada uno de ellos para hacer un nuevo libro que contenga una lista copilando esos datos.

jorge (no verificado)
Imagen de visitante
consulta

al ejecutar esta macro me muestra una mensaje que dice: Este libro contiene uno o mas vinculos que no se pueden actualizar.

-para cambiar el origen de los vinculos o intentar de nuevo actualizar los valores, haga click en modificar

-para dejar los vinculos tal como estan, haga click en continuar

Y NO QUIERO QUE ME APAREZCA ESTE MENSAJE PORFAVOR, AYUDA! SALUDOS 

' CopiarDatos Macro

Workbooks.Open Filename:=ruta_planilla    'Abre archivo planilla diaria TURBOVAPOR

Sheets("Trafos").Select

Range("H9:H39").Select

Selection.Copy

Workbooks(nombre_movcombustible).Sheets(b).Activate

Sheets(b).Select

Range("AP21:AP51").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

 

 

seba64 (no verificado)
Imagen de visitante
Saludos

Saludos quisiera saber si alguien tiene los códigos para abrir libros con el mismo nombre y para importar datos de un libro sin necesidad de abrirlo. Es que en este post todos hablan de cosas muy interesantes y códigos muy alucinantes, pero nadie dejo una pizca de código, sólo unos enlaces a páginas que ya no existen. Se agradecer+ia que pusieran esos códigos en el post, para el registro. Además de que no he econtrado otros post en los que se traten estos temas.

Elias (no verificado)
Imagen de visitante
Consulta
CesarBoys (no verificado)
Imagen de visitante
Encontre esta información en

Encontre esta información en esta liga

http://www.audeser.com/2012/05/03/intercambio-de-informaci%C3%B3n-con-ot...

 

Abrir un archivo Excel y leer datos del mismo es relativamente sencillo, pero puede ser más interesante realizar el intercambio de datos sin recurrir a abrir el programa asociado.

Microsoft permite realizar este intercambio mediante varias tecnologías, entre ellas ADO (hay detractores al respecto).

 

Hacerlo a través de Excel no resulta del todo simple, pero mediante estas rutinas pueden llevarse a cabo las tareas principales:

 

Option Explicit

Private Sub GetSheetNames2(ByRef szFullName As StringByRefaszSheetList() As String)

    Dim bIsWorksheet As Boolean
    Dim objConnection As ADODB.Connection
    Dim rsData As ADODB.Recordset
    Dim lIndex As Long
    Dim szConnect As String
    Dim szSheetName As String

    Erase aszSheetList()
    
    Dim ExcelVersion As Integer
    ExcelVersion = VBA.Val(Application.Version)
    If ExcelVersion < 12 Then
        szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & szFullName & ";Extended Properties=Excel 8.0;"
    Else
        szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & szFullName & ";Extended Properties=Excel 8.0;"
    End If

    Set objConnection = New ADODB.Connection
    objConnection.Open szConnect
    Set rsData = objConnection.OpenSchema(adSchemaTables)

    Do While Not rsData.EOF
        bIsWorksheet = False
        szSheetName = rsData.fields("TABLE_NAME").Value
        If Right$(szSheetName, 1) = "$" Then
            ''' This is a simple sheet name. Remove the trailing "$" and continue.
            szSheetName = Left$(szSheetName, Len(szSheetName) - 1)
            bIsWorksheet = True
        ElseIf Right$(szSheetName, 2) = "$'" Then
            ''' This is a sheet name with spaces and/or special characters.
            ''' Remove the right "&'" characters.
            szSheetName = Left$(szSheetName, Len(szSheetName) - 2)
            ''' Remove the left single quote character.
            szSheetName = Right$(szSheetName, Len(szSheetName) - 1)
            bIsWorksheet = True
        End If
        If bIsWorksheet Then
            ''' Embedded single quotes in the sheet name will be doubled up.
            ''' Replace any doubled single quotes with one single quote.
            szSheetName = Replace$(szSheetName, "''", "'")
            ''' Load the processed sheet name into the array.
            ReDim Preserve aszSheetList(0 To lIndex)
            aszSheetList(lIndex) = szSheetName
            lIndex = lIndex + 1
        End If
        rsData.MoveNext
    Loop

    rsData.Close
    Set rsData = Nothing
    objConnection.Close
    Set objConnection = Nothing

End Sub

Public Function GetSheetsNames(strFileName As StringAsCollection
    'Needs a reference to:
    'Microsoft ActiveX Data Object X.X Library
    'Microsoft ADO Ext. X.X for DLL and Security
    
    Dim tbl As ADOX.Table
    Dim sSheet As String
    Dim Col As New Collection
    
    Dim objConn As ADODB.Connection
    Set objConn = New ADODB.Connection
    objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0" & ";" & _
                 "Data Source=" & strFileName & ";" & _
                 "Extended Properties=Excel 8.0;"
    
    Dim objCat As ADOX.Catalog
    Set objCat = New ADOX.Catalog
    Set objCat.ActiveConnection = objConn
    
    For Each tbl In objCat.Tables
        sSheet = tbl.Name
        sSheet = Application.Substitute(sSheet, "'", "")
        sSheet = Left(sSheet, InStr(1, sSheet, "$", 1) - 1)
        On Error Resume Next
        Col.Add sSheet, sSheet
        On Error GoTo 0
    Next tbl
    Set GetSheetsNames = Col
    objConn.Close
    Set objCat = Nothing
    Set objConn = Nothing

End Function

Public Function ReadDataFromWorkbook(ByVal SourceFile AsStringByVal SourceRange As StringAs Variant
' Requiere una referencia a Microsoft ActiveX Data Objects library (Microsoft ActiveX Data Objects x.x Object Library)
' Si SourceRange es una referencia a un rango, la función sólo devuelve datos de la primera hoja en SourceFile
' Si SourceRange es un nombre de referencia la función puede devolver datos de cualquier hoja en SourceFile
' SourceRange must include the range headers
' examples:
' varRecordSetData = ReadDataFromWorkbook("C:\FolderName\SourceWbName.xls", "A1:A21")
' varRecordSetData = ReadDataFromWorkbook("C:\FolderName\SourceWbName.xls", "A1:B21")
' varRecordSetData = ReadDataFromWorkbook("C:\FolderName\SourceWbName.xls", "DefinedRangeName")
    Dim dbConnection As ADODB.Connection, rs AsADODB.Recordset
    Dim dbConnectionString As String
    
    Set dbConnection = New ADODB.Connection
    On Error GoTo InvalidInput
    'dbConnectionString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & SourceFile
    'dbConnection.Open dbConnectionString ' Abre una conexión a la base de datos
    
    With dbConnection
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & SourceFile & ";" & _
        "Extended Properties=Excel 8.0;"
        .Open
    End With
        
    Set rs = dbConnection.Execute("[" & SourceRange & "]")
    On Error GoTo 0
    ReadDataFromWorkbook = rs.GetRows ' Devuelve una matriz de dos dimensiones con todos los campos del RecordSet
    rs.Close
    dbConnection.Close ' Cierra la conexión a la base de datos
    Set rs = Nothing
    Set dbConnection = Nothing
    On Error GoTo 0
    Exit Function

InvalidInput:
    MsgBox "The source file or source range is invalid!", vbExclamation, "Get data from closed workbook"
    Set rs = Nothing
    Set dbConnection = Nothing

End Function

Sub Test()
    Dim Col As Collection
    Dim lgHoja As Long
    Dim strRuta_y_NombreArchivo As String
    Call fAbrirArchivo(strRuta_y_NombreArchivo)
    
    Set Col = GetSheetsNames(strRuta_y_NombreArchivo)
    For lgHoja = 1 To Col.Count
        MsgBox Col(lgHoja)
    Next lgHoja
End Sub


Sub TestReadDataFromWorkbook()
' Lee datos de un Libro cerrado
    Dim strRuta_y_NombreArchivo As String
    Call fAbrirArchivo(strRuta_y_NombreArchivo)
    
    Dim matrizTemporal As Variant, lgFila As Long, lgColumnaAs Long
    matrizTemporal = ReadDataFromWorkbook(strRuta_y_NombreArchivo, "A1:B21")
    ' Sin transposición de datos
'    For lgFila = LBound(matrizTemporal, 2) To UBound(matrizTemporal, 2)
'        For lgColumna = LBound(matrizTemporal, 1) To UBound(matrizTemporal, 1)
'            ActiveCell.Offset(lgFila, lgColumna).Formula = matrizTemporal(lgColumna, lgFila)
'        Next lgColumna
'    Next lgFila
    ' Con transposición de datos
    matrizTemporal = Application.WorksheetFunction.Transpose(matrizTemporal)
    For lgFila = LBound(matrizTemporal, 1) ToUBound(matrizTemporal, 1)
        For lgColumna = LBound(matrizTemporal, 2) ToUBound(matrizTemporal, 2)
            ActiveCell.Offset(lgFila - 1, lgColumna - 1).Formula = matrizTemporal(lgFila, lgColumna)
        Next lgColumna
    Next lgFila

End Sub

Steven (no verificado)
Imagen de visitante
Macro perfecta

Hola Joshua estuve viendo tu macro y es exactamente lo que necesito, solo necesito hacerle unos cambios  ya que necesito hacerlo con varios files, si me pudieras ayudar te lo agradeceria demasiado, mi correo es lcruz10@hotmail.com

jose luis (no verificado)
Imagen de visitante
buscar palabra dentro de un archico excel sin tener que abrirlo

Hola vi tus codigos pero cuando lo ejecuto me sale error de compilacion.

quisiera saber si se puede hacer un macro que te permita buscar ciertas palabras dentro de un archivo excel sin tener que abrirlo y mostrarlo en un lista con todas las coincidencias encontradas, y que muestre su ruta o que se ponga como un link que diga abrir la carpeta de ubicacion del archivo.

le agradezo de antemano, espero puedan ayudarme. 

si dueran tan amables de enviarme los codigos a mi correo. jose_montalvo_22@hotmail.com

 

Slds

jesanley (no verificado)
Imagen de visitante
consulta

hola como podria hacer lo mismo pero en una de las hojas se encuentra indicado las hojas que deseo importar.

 

saludos y gracias por tu tiempo

HOLA (no verificado)
Imagen de visitante
INFORMACION SOBRE ADO

POR FAVOR MAS INFORMACION DE TU COMENTARIO

PAULINA (no verificado)
Imagen de visitante
MACRO

 Tengo una consulta , como puedo traspasar grandes cantidades de datos a otro excel ya que la macro que han entregado funciona super pero solo traslada 62 lineas hacia abajo .. y yo tengo como 100 registros .

gracias.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Revisa la condición de

Revisa la condición de terminación del bucle.

 

Un saludo

GORKIM (no verificado)
Imagen de visitante
REFERENCIAR LISTA DESDE UN LIBRO EN RED

HOLA PACO GRACIAS POR LA AYUDA QUE BRINDAS, QUISIERA PREGUNTARE ALGO ES PARECIDO A ESTE TEMA:
TENGO UN LIBRO EN MI RED DEL CUAL QUIERO QUE SEA LA BASE PARA UNA LISTA (VALIDACION DE DATOS) EN OTRO LIBRO (NO EN RED). EL PROBLEMA ES QUE DE IGUAL MANERA HE INTENDAO CON FORMULAS AGARRAR EL RANDO DE AHI, ESTA ES UNA DE ELLAS "=DESREF(\\cerl\Royl\[MAESTROS.xlsx]MA_Gestion!$B$2,,,CONTARA(\\cerl\Royl\[MAESTROS.xlsx]MA_Gestion!$B$2:$B$10))" ENTRE OTRAS ALGUNAS FUNIOCNAN OTRAS NO PERO SI O SI TENGO QUE ABIRR AMBOS LIBROS PARA QUE HAGA EL JUEGO CORRECTO. LO MALO ES QUE NO DEBERIA ABRIR EL DE RED PUES EL USUARIO NO DEBERIA PODER HACERLO. QUE ME ACONSEJAS? QUIZAS CON UNA MACRO? PERO COMO ENLAZARIA UNA MACRO CON LA FORMULA EN LA VALIDACIO DE DATOS LISTA?? GRACIAS ESPERO ME AYUDEN.! SALUDOS

esteban RC (no verificado)
Imagen de visitante
No me funciona en excel 2013

Hola Jose luis trate de implementar este apartado pero no me funciona cuando son mas de 65 000 lineas las que se intentan copiar, creo que es por la version de excel. podrías ayudarme para ver como funciona en excel 2013? te agradecería tu respuesta a estebanrc2319@gmail.com 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Me he encontrado con cosas

Hola, Gorkim. Me he encontrado con cosas parecidas.

Todos los tipos de referencias volátiles, como DESREF, referencias estructuradas a tablas, INDIRECTO, etc. necesitan que el otro libro esté abierto, porque si no lanzan un error.

La única solución que he encontrado por internet es ponerle al usuario un botón que abre todos los libros referenciados, actualiza y vuelve a cerrarlos. Por supuesto, la apertura es oculta, en modo lectura y se cierran sin guardar para que todo sea transparente al usuario.

Esto funciona hasta cierto punto. En algunas ocasiones, que creo que tiene que ver con el número de libros que se abren para sincronizar, al cerrarlos todos vuelve a dar el error. Probablemente en algún cierre recalcule de nuevo, generando el error.

Otra opción, más laboriosa, es poner un botón de actualizar datos manualmente, y que ese botón abra el otro archivo, recupere los datos, los coloque en su sitio como valor y vuelva a cerrar el origen. De esta manera eliminamos la fórmula volátil, con sus pros y sus contras.

Finalmente, convertir la fórmula en una no volátil (si existe la posibilidad) puede ayudar también, pues las fórmulas no volátiles no necesitan que el otro libro esté abierto para recuperar los datos.

 

Un saludo

Jesus55 (no verificado)
Imagen de visitante
Se puede usar desde libro de macros personal

Buenas tardes Pacomejia,

Se que es un tema bastante antiguo pero espero que me puedas ayudar.

Mi intención es copiar datos de un libro (que siempre es el mismo) a otro que es donde ejecuto la macro que estoy haciendo, pero este archivo es un archivo destino siempre cambia y tiene extensión xlsx (es decir no esta habilitado para macros). Este archivo destino lo necesito con esa extensión sin macros. Por tanto estoy escribiendo la macro en el libro de macros personal para poder ejecutarla en cualquier archivo.

 

Digamos que he conseguido abrir el archivo origen y copiar los datos que quiero pero al copiarlos me los copia en el libro de macros personal no en el archivo que yo quiero. Creo que el problema esta en instrucción This workbook e probado también con Active workbook y el resultado es el mismo.

He tratado como comentas de usar crear dos objetos workbook digamos:

dim Wborigen as workbook

dim Wbdestino as workbook

Set Wbdestino = This workbook

Set Wborigen = Workbooks.Open(RutaAlArchivo)

Te agradezco de antemano la ayuda...

Saludos

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 horas 1 min
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
ThisWorkbook representa el libro que contiene el código

(pues sí es antiguo el tema del foro, ocho años)

ThisWorkbook representa el libro que contiene ese código, así que si lo utilizas en el libro de macros personal se referirá precisamente al libro de macros personal

Así que en tu caso, debes cambiar la asignación del libro de destino

Set Wbdestino = This workbook

y definirlo con el libro de destino.

Set Wbdestino =Workbooks ("elnombredetulibrodedestino")

Si quieres crear un libro nuevo, pues puedes hacerlo también así:

Set Wbdestino =Workbooks.Add

Dependerá de cuál sea tu libro de destino.

 

------
Ya sé Excel, pero necesito más.

diego jimenez medina (no verificado)
Imagen de visitante
Desproteger Libro En excel

Se tiene un libro en excel que tiene clave para ingresar 

y se tiene otro libro en excel donde trae datos referenciados del libro 1, como el Libro 1 tiene clave de acceso me solicita que la ingrese desde el libro 2 la clave, como se puede hacer por medio de macros para que no me pida la clave al abrir el libro 2 

Si me pueden ayudar, muchas Gracias

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
La función Workbook.Open

La función Workbook.Open tiene un parámetro (el 5º) para pasar la contraseña.

Workbooks.Open Filename:=PathName & Filename, Password:="ContraseñaConTodasLasLetras123"

Un saludo