Tengo un sistema escolar comprado, que exporta e importa su información en forma de libros de excel, y quiero importar datos desde FoxPro, el problema es que al crear el sistema comprado los libros de excel, los crea con varias hojas, y yo solo se leer archivos de excel que tengan una sola hoja, podrías echarme una mano explicándome como leer varias hojas de excel desde Visual Basic o como manipularlas para poder partir o dividir un libro de excel de varias hojas en libros con una sola hoja c/u, o viceversa, a partir de varias hojas crear un libro con esas hojas en un cierto orden.
Gracias de antemano.
Esta muy interesante tu duda, de hecho es la primera vez que alguien, que yo conozca lo necesita, así que me puse a trabajar un poco en ello, el código que te anexo esta sobre VBA en Excel, es decir, lo tienes que probar directamente sobre un modulo de Excel, pero si ya has programado en VB te será muy fácil adaptarlo al lenguaje usando el método CreateObject o GetObject, según te guste más, de todos modos aquí estamos para cualquier duda que tengas, saludos... 'Procedimiento que copia cada una de las hojas del libro activo 'a un nuevo libro y lo guarda con el nombre del libro y hoja origen Public Sub DivideHojas() Dim ws As Worksheet 'Solo crea los archivos si hay un libro activo If Not ActiveWorkbook Is Nothing Then 'Itera en todas las hojas del libro activo For Each ws In ActiveWorkbook.Worksheets ws.Copy 'La copia a un nuevo libro que pasa a ser el activo 'Guarda el libro recien creado con el nombre del libro y hoja origen ActiveWorkbook.SaveAs "D:\" & ws.Parent.Name & " " & ws.Name & ".xls" 'Cierra el libro recien creado ActiveWorkbook.Close Next ws End If End Sub 'Procedimiento que junta las hojas de todos los libros del directorio 'actual, en uno nuevo Public Sub JuntaHojas() Dim strArchivos() As String Dim strRuta As String Dim co1 As Integer Dim tmp As Variant Dim wb As Workbook Dim wbNuevo As Workbook Dim ws As Worksheet Dim strActual As String 'Solo se ejecuta si hay un libro activo If Not ActiveWorkbook Is Nothing Then strRuta = ActiveWorkbook.Path 'Ruta del libro actual strActual = ActiveWorkbook.Name 'Nombre del libro actual If Right(strRuta, 1) <> "\" Then 'Si no tiene la diagonal final, se la ponemos strRuta = strRuta & "\" End If 'Buscamos el primer libro de excel, en la ruta del libro actual 'por supuesto esta búsqueda puede ser en cualquier otra ubicación If Dir(strRuta & "*.xls") <> "" Then ReDim Preserve strArchivos(co1) strArchivos(co1) = Dir(strRuta & "*.xls") co1 = co1 + 1 Else 'Si no encuentra ninguno avisa y sale del procedimiento MsgBox "No existe ningun archivo de Excel en la rua: " & strRuta Exit Sub End If Do 'Busca si hay más archivos de Excel, si los hay son agregados a la matriz ReDim Preserve strArchivos(co1) strArchivos(co1) = Dir co1 = co1 + 1 Loop While strArchivos(co1 - 1) <> "" 'Como empieza en cero la matriz, los dos ultimos no tienen nada ReDim Preserve strArchivos(co1 - 2) co1 = 1 Set wbNuevo = Workbooks.Add 'Agregamos un nuevo libro Do Until wbNuevo.Worksheets.Count = 1 'Borramos todas las hojas, excepto una, si no da error wbNuevo. Worksheets(wbNuevo. Worksheets. Count). Delete Loop For Each tmp In strArchivos 'Abrimos cada uno de los archivos encontrado, excepto el actual If tmp <> strActual Then Set wb = Workbooks.Open(strRuta & tmp) Else Set wb = ActiveWorkbook End If 'Copiamos cada hoja de cada libro en el nuevo libro For Each ws In wb.Worksheets ws.Copy After:=wbNuevo.Worksheets(wbNuevo.Worksheets.Count) Next ws 'Cerramos todos excepto el actual If tmp <> strActual Then wb.Close False End If Next tmp 'Borramos la hoja que nos falto wbNuevo.Worksheets(1).Delete For Each ws In wbNuevo.Worksheets 'Le asignamos un nombre a cada hoja del nuevo libro ws.Name = "Hoja " & co1 co1 = co1 + 1 Next ws 'Guardamos el nuevo libro en la ruta actual, esto puede dar error 'si ya existe el nombre del archivo wbNuevo.SaveAs strRuta & "Todas las hojas.xls" 'Vaciamos la memoria de las variables de objeto usadas Set wbNuevo = Nothing Set wb = Nothing End If End Sub