| |||
| Espero que te sirva Soy nuevo aquí y no se si se pueden adjuntar archivos, pero te incluyo un programa que está funcionando. Fernando BaseMDB.rsEstructura.Open BaseMDB.rsUsuarios.Open BaseMDB.rsDatos_Horas.Open BaseMDB.rsTareas.Open Set xlApp = New Excel.Application While Not BaseMDB.rsEstructura.EOF Dir1.Path = c:\" & BaseMDB.rsEstructura!Directorio File1.Path = Dir1.Path File1.Pattern = "*.xls" File1.Refresh If File1.ListCount > 0 Then For z = 0 To File1.ListCount - 1 Set xlWB = xlApp.Workbooks.Open(File1.Path & "\" & File1.List(z)) Set rngWS = xlWB.Worksheets(1).Range("A1:K500") intRows = rngWS.Rows.Count - 1 cNombre = CStr(rngWS.Range("C3").Value) If Not BaseMDB.rsUsuarios.EOF Then BaseMDB.rsUsuarios.MoveFirst End If lSw = True lEncuentra = False While lSw If BaseMDB.rsUsuarios.EOF Then lSw = False Else If BaseMDB.rsUsuarios!Usuario = Mid(File1.List(z), 1, Len(File1.List(z)) - 4) Then lEncuentra = True lSw = False Else BaseMDB.rsUsuarios.MoveNext End If End If Wend If Not lEncuentra Then BaseMDB.rsUsuarios.AddNew BaseMDB.rsUsuarios!Usuario = Mid(File1.List(z), 1, Len(File1.List(z)) - 4) BaseMDB.rsUsuarios!Nombre = cNombre BaseMDB.rsUsuarios.Update End If BaseMDB.rsUsuarios.Requery If Not BaseMDB.rsUsuarios.EOF Then BaseMDB.rsUsuarios.MoveFirst End If lSw = True lEncuentra = False While lSw If BaseMDB.rsUsuarios.EOF Then lSw = False Else If BaseMDB.rsUsuarios!Usuario = Mid(File1.List(z), 1, Len(File1.List(z)) - 4) Then lEncuentra = True lSw = False Else BaseMDB.rsUsuarios.MoveNext End If End If Wend nLugar = BaseMDB.rsUsuarios!ID_Identificador intRows = rngWS.Rows.Count - 1 For x = 11 To intRows cComponente = CStr(rngWS.Range("B" & x).Value) csubcomponente = CStr(rngWS.Range("C" & x).Value) cSemana = CStr(rngWS.Range("D" & x).Value) If cComponente & csubcomponente & cSemana = "" Then x = intRows + 1 Else If rngWS.Range("E" & x).Value <> " " Then dFecha = CDate(rngWS.Range("E" & x).Value) End If cTarea = CStr(rngWS.Range("F" & x).Value) cValid = CStr(rngWS.Range("G" & x).Value) cWorkProduct = CStr(rngWS.Range("H" & x).Value) cComentarios = CStr(rngWS.Range("I" & x).Value) cCompleta = CStr(rngWS.Range("J" & x).Value) cTiempo = CStr(rngWS.Range("K" & x).Value) For wx = 1 To Len(cTiempo) If Mid(cTiempo, wx, 1) = "." Then cTiempo = Mid(rngWS.Range("K" & x).Value, 1, wx - 1) & "," & Mid(rngWS.Range("K" & x).Value, wx + 1, Len(rngWS.Range("K" & x).Value)) End If Next If cTiempo <> "" Then nTiempo = CDbl(cTiempo) Else nTiempo = 0 End If lSw = True lEncuentra = False If Not BaseMDB.rsTareas.EOF Then BaseMDB.rsTareas.MoveFirst End If While lSw If BaseMDB.rsTareas.EOF Then lSw = False Else If BaseMDB.rsTareas!Tarea = cTarea Then lEncuentra = True lSw = False Else BaseMDB.rsTareas.MoveNext End If End If Wend If Not lEncuentra Then BaseMDB.rsTareas.AddNew BaseMDB.rsTareas!Tarea = cTarea BaseMDB.rsTareas.Update End If nTarea = BaseMDB.rsTareas!ID_Tarea BaseMDB.rsDatos_Horas.AddNew BaseMDB.rsDatos_Horas!Componente = cComponente BaseMDB.rsDatos_Horas!Subcomponente = csubcomponente BaseMDB.rsDatos_Horas!Fecha = dFecha BaseMDB.rsDatos_Horas!Tarea = nTarea BaseMDB.rsDatos_Horas!Valid = cValid BaseMDB.rsDatos_Horas!WorkProduct = cWorkProduct BaseMDB.rsDatos_Horas!Comentarios = cComentarios BaseMDB.rsDatos_Horas!Completa = IIf(Len(cCompleta) > 1, Mid(cCompleta, 1, 1), cCompleta) BaseMDB.rsDatos_Horas!Tiempo = nTiempo BaseMDB.rsDatos_Horas!ID_Identificador = nLugar BaseMDB.rsDatos_Horas!Directorio = BaseMDB.rsEstructura!ID_Estructura BaseMDB.rsDatos_Horas.Update End If Next xlWB.Close Set rngWS = Nothing Set xlWB = Nothing Next End If BaseMDB.rsEstructura.MoveNext Wend xlApp.Quit Set xlApp = Nothing BaseMDB.rsTareas.Close BaseMDB.rsDatos_Horas.Close BaseMDB.rsEstructura.Close BaseMDB.rsUsuarios.Close MsgBox "Carga de datos terminada" |
| |||
| Importar Datos A Access |
| ||||
| hola fernando, de dónde eres de argentina? yo sí, estoy armando lo mismo que hair, importar datos de excel, te agradecería si me envias a mí tambien el arc adjuento. [email protected] |
| |||
| Ya fue El archivo se los envié, disculpen la tardanza. Espero que les sirva, si tienen dudas, consúltenme. No soy argentino, soy chileno, pero eso poco importa en un mundo globalizado donde todos nos podemos ayudar . SaludosFernando |
| |||
| Hair: Esto me llegó: The original message was received at Tue, 20 Jul 2004 10:04:25 -0400 from XXXXXX [YY.YY.YY.YY] ----- The following addresses had permanent fatal errors ----- <[email protected]> (reason: 550 Error: 550: Spam is not allowed in this site#body#103# #103#) ----- Transcript of session follows ----- ... while talking to mx1.latinmail.com.: >>> DATA <<< 550 Error: 550: Spam is not allowed in this site#body#103# #103# 554 5.0.0 <[email protected]>... Service unavailable |
| |||
| |
| |||
| Cita: Este es el link: http://www.geocities.com/fcarvallo/VBExcel.zip
Iniciado por sqa212 Perdon por la intromision, pero tambien estoy interesado en esto, en el link pone pagina no disponible ![]() Pero no entiendo como implementarlo ![]() Salu2. Última edición por E-Designet; 28/06/2005 a las 14:44 Razón: corrección |
| |||
| Cita: No se si te servirá lo que he hecho. Resulta que no he encontrado nada satisfactorio ni en Microsoft ni en los foros, así que he automatizado el proceso de importar un Libro de Excel a Tablas Acces. Como ya he explicado en otro foro, existen condiciones: - En todas las hojas del libro la primera fila es de cabeceras, es decir, nombres de campo. - Todas las hojas del libro deben empezar por la columna A y la fila 1 - El programa lee las columnas de la primera fila (fila 1) hasta que encuentra una columna vacía - El programa lee las filas de cada hoja hasta que encuentra una fila vacía (una fila en la que sus N primeras columnas estén vacías) Existe una condición adicional si lo que quieres es importar todas las hojas del libro a una misma tabla: - Todas las hojas del libro deben tener el mismo número de columnas, tener la misma fila de cabecera y ser del mismo tipo de datos
Código:
Espero que te sirva Option Base 0
Private Type tTablaExcel
nom(10) As String
nrow(10) As Integer
ncol(10) As Integer
End Type
Private Sub cmd_importar_Click()
Dim dbs As Database, sql As String, tExcel As tTablaExcel, tabla
Me.campo = OpenCommDlg() 'Esta función muestra un cuadro de diálogo para leer un archivo del disco. No es mia, búscala por ahí.
If Not IsNull(Me.campo) Then
tExcel = CreaTablasDeLibroExcel(Me.campo)
Set dbs = CurrentDb
For Each tabla In tExcel.nom
If (tabla = "") Then Exit For
sql = "INSERT INTO tabla_destino (campo1, campo2, ...)"
sql = sql & " SELECT campo1, campo2, ..."
sql = sql & " FROM " & tabla & " AS t ;"
dbs.Execute sql
dbs.TableDefs.Delete tabla
Next
End If
End Sub
Private Function CreaTablasDeLibroExcel(archivo As String) As tTablaExcel
On Error GoTo ErrSub
Dim objExcel As Object, hoja As Object, dato As String, columna As Integer, fila As Integer, h As Integer, tipo
Dim dbs As Database, tdf As TableDef, fld As Field, rs As Recordset
Set dbs = CurrentDb
' -- Crea una Nueva instancia de Excel
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open FileName:=archivo
h = 0
For Each hoja In objExcel.Worksheets
CreaTablasDeLibroExcel.nom(h) = "x_" & hoja.Name
dbs.TableDefs.Delete CreaTablasDeLibroExcel.nom(h)
Set tdf = dbs.CreateTableDef(CreaTablasDeLibroExcel.nom(h))
For columna = 0 To 1000
dato = Trim(hoja.Cells(1, columna + 1))
If (Nz(dato) <> "") Then
tipo = TipoDeDato(hoja.Cells(2, columna + 1)) 'Busca en la fila 2 el tipo de dato del campo
Set fld = tdf.CreateField(dato, tipo)
tdf.Fields.Append fld
Else
CreaTablasDeLibroExcel.ncol(h) = columna
dbs.TableDefs.Append tdf
Exit For
End If
Next columna
'Cuenta las filas
Set rs = dbs.OpenRecordset(CreaTablasDeLibroExcel.nom(h), dbOpenDynaset)
For fila = 0 To 1000
dato = ""
'Mira si la fila está vacía
For columna = 1 To CreaTablasDeLibroExcel.ncol(h)
dato = Trim(hoja.Cells(fila + 2, columna))
If (Nz(dato) <> "") Then Exit For
Next columna
'Rellena la fila
If (Nz(dato) <> "") Then
rs.AddNew
For columna = 0 To CreaTablasDeLibroExcel.ncol(h) - 1
Set fld = rs.Fields(columna)
fld = hoja.Cells(fila + 2, columna + 1)
Next
rs.Update
Else
CreaTablasDeLibroExcel.nrow(h) = fila
Exit For
End If
Next fila
If (Nz(CreaTablasDeLibroExcel.ncol(h), 0) = 0) Then Exit For
h = h + 1
Next
ErrSub:
If (Err = 3265) Then 'No se encontró el elemento en esta colección
Resume Next
ElseIf (Err <> 0) Then
MsgBox Err.Number & ". " & Err.Description, vbCritical
End If
Set fld = Nothing
Set tdf = Nothing
Set rs = Nothing
objExcel.Quit
End Function
Private Function TipoDeDato(dato) As Integer
Select Case VarType(dato)
Case vbDate: TipoDeDato = dbDate
Case vbCurrency: TipoDeDato = dbCurrency
Case vbInteger, vbByte: TipoDeDato = dbInteger
Case vbLong, vbSingle, vbDouble, vbDecimal: TipoDeDato = dbLong
Case Else: TipoDeDato = dbText
End Select
End Function
|
Este tema le ha gustado a 1 personas (incluyéndote)