Fox y Excel

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.

2 Respuestas

Respuesta
1
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
Respuesta
1
ya te la he respondido no?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas