Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: CrÄsH en 8 Mayo 2009, 15:37 PM

Título: [SOLUCIONADO]busco tuto:vincular excel
Publicado por: CrÄsH en 8 Mayo 2009, 15:37 PM
Buenas, en un formulario de acces me gustaria poder ver los datos de una hoja de excel.

Me podeis decir algun tuto.


Gracias
Título: Re: busco tuto:vincular excel+acces
Publicado por: byway en 9 Mayo 2009, 05:58 AM
xlsx es la extensión del excel pero del office 2007 .. pues no es reconocido por visual basic 6.0 usa un excel anterior con extensión xls como el excel 200, el xp...

y si necsitas ejemplos buscalos en PSC (planet source code) alli hay muchos ejemplos casi ..casi de todo.

saludos.
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 9 Mayo 2009, 22:42 PM
Para poder mostrar los datos del excel en un listbox en un formulari, tengo k pasar los datos del excel en una tabla o puedo leer directamente?

graciasss
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 9 Mayo 2009, 23:14 PM
Al final me conecto asi:

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=C:\eq.xls;" & _
"Extended Properties=Excel 8.0;"
    .Open
End With

Lo que me falta es saber como puedo leer los datos del excel, es crear un recordset para leer los datos del excel.

Algun ayudita??

graciasss
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 07:48 AM
Cómo usar ADO con datos de Excel desde Visual Basic o desde VBA (http://www.google.com.mx/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fsupport.microsoft.com%2Fkb%2F257819%2Fes&ei=8mQGStzUCKTMM7_WnKMD&usg=AFQjCNFPlwa0QU0U2DiK-P2x7sTFm-uJCw&sig2=urOS5_eqKjlqqZx98BStUQ)

mmm en todo caso te dire como

sabemos que en SQL usamos

Código (sql) [Seleccionar]
Select campos From Tabla
es decir que digamos en Acces, MySql SQL y otros seria asi

Código (sql) [Seleccionar]

Select * From datos


bueno en Excel seria asi

Código (sql) [Seleccionar]

Select campos From [Tabla$]


es decir:

Código (sql) [Seleccionar]

Select * From [datos$] ' Con Corchetes


Solo en la consulta se añaden los corchetes y el signo de pesos, para rangos y demas es me parece igual pero mejor leete el link que te puse esta mas detallado

Código (vb) [Seleccionar]

Public CN As New ADODB.Connection
Public rs As New ADODB.Recordset

Public Sub ConectarBDD(Consulta As String, ConnectionStr as string, Optional Con As Boolean = False)
    On Error GoTo Errores:
        If Con = True Then
            CN.Provider = "Microsoft.Jet.OLEDB.4.0"
            CN.ConnectionString = ConnectionStr
            CN.Open
        End If
        rs.Open Consulta, CN, adOpenKeyset, adLockOptimistic
        rs.MoveFirst' se mueve al primer Registro
Exit Sub
Errores:
        'Sentencias deErrores
        err.clear
End Sub


El problema es devolver los datos segun veo... pero si s epuede estoy seguro de ello.

Saludos Dulces Lunas
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 10:33 AM
mmm ya esta mira

ejemplo Source Ado en Excel/Access: Descargar (http://musanto.webcindario.com/AdoExcelAccess.rar)

con el libro de Excel abre un proyecto nuevo: y en un modulo agrega este codigo (proceso inicial Sub Main quita el Formulario)

Código (vb) [Seleccionar]

Public Const SQL_Config = "select * from [configuracion$] " ' Para Access Quita Corchetes y el Signo de Pesos
Public Const SQL_Datos = "select * from [datos$] " ' Para Access Quita Corchetes y el Signo de Pesos
Public Cant_ACC As Integer
Public CN As New ADODB.Connection
Public rs As New ADODB.Recordset
Private DirectorioBDD As String

Enum BDD
    Excel = 0
    Access = 1
End Enum

Sub Main()
    DirectorioBDD = App.Path & "\data.xls" ' Cambiar el nombre _
                                            y tipo de archivo _
                                            es decir su extención _
                                            por la de Access si se _
                                            requiere su lectura
    Call AdoExcelAccess(Excel)
End Sub

Public Sub AdoExcelAccess(BDD As BDD)
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    If BDD = Access Then
        CN.ConnectionString = DirectorioBDD
    ElseIf BDD = Excel Then
        CN.ConnectionString = "Data Source=" & DirectorioBDD & ";Extended Properties=Excel 8.0;"
    Else
        Exit Sub
    End If
    CN.Open
    rs.Open SQL_Config, CN, adOpenKeyset, adLockOptimistic
    rs.MoveFirst
    Cant_ACC = Val(rs!cant_list)
    MsgBox Cant_ACC
    rs.Close
    rs.Open SQL_Datos, CN, adOpenKeyset, adLockOptimistic
    rs.MoveFirst
    For i = 1 To Cant_ACC - 1
        datos = CStr(rs!id) & vbNewLine & _
        CStr(rs!vj) & vbNewLine & _
        CStr(rs!genero) & vbNewLine & _
        CStr(rs!plataforma) & vbNewLine & _
        CStr(rs!existencias) & vbNewLine & _
        CStr(rs!precio)
        rs.MoveNext
        MsgBox datos
    Next i
End Sub


Como ves te puse uno de Excel y uno de Access
En este Ejemplo use Ado como si nada no importando si es Access o Excel de igual forma es para SQLServer y MySQL


P.D.: Encontre la Forma por accidente cuando esta jugando con el Codigo y jugando con los campos de Access tanto como de Excel...¡! je je je...¡!

Saludos Dulces Lunas
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 10 Mayo 2009, 11:09 AM
La pagina de microsoft ya la tenia, con ella en teoria conegui hacer la conexio pero no sabia como recojer datos del excel.

Los dos primeros comentarios k me dices:

" Para Access Quita Corchetes y el Signo de Pesos"

Seguro k es asi?

Si lo uso en access dnd pone [configuracion$] y  [datos$], si la hoja del excel se llama hoja1, tendria k poner [Hoja1$], en los dos casos, no?

graciass
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 11:14 AM
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Mayo 2009, 10:33 AM
mmm ya esta mira

ejemplo Source Ado en Excel/Access: Descargar (http://musanto.webcindario.com/AdoExcelAccess.rar)
...
...
...
Saludos Dulces Lunas


Baja El Source funciona a la perfección
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 10 Mayo 2009, 11:20 AM
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Mayo 2009, 11:14 AM
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Mayo 2009, 10:33 AM
mmm ya esta mira

ejemplo Source Ado en Excel/Access: Descargar (http://musanto.webcindario.com/AdoExcelAccess.rar)
...
...
...
Saludos Dulces Lunas



Baja El Source funciona a la perfección

No hay  nada de codigo aki, y los archivos .vbp y .bas no me los relaciona con ningun programa.


Graciass
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 11:30 AM
Cita de: CrÄsH en 10 Mayo 2009, 11:20 AM
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Mayo 2009, 11:14 AM
Cita de: ░▒▓BlackZeroҖ▓▒░ en 10 Mayo 2009, 10:33 AM
mmm ya esta mira

ejemplo Source Ado en Excel/Access: Descargar (http://musanto.webcindario.com/AdoExcelAccess.rar)
...
...
...
Saludos Dulces Lunas



Baja El Source funciona a la perfección

No hay  nada de codigo aki, y los archivos .vbp y .bas no me los relaciona con ningun programa.

El Source que te acabo de dar es Explicito para VB6, con unos cambios funcionaria bien en el VBA
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 10 Mayo 2009, 11:36 AM
Gracias por ese ejemplo, ahora que me as mostrado como abrir el recordset lo veo mucho mejor.

Sabes como llenar un cuadro combinado con todas las capzaleras, y al seleccionar un item de ese cuadro combinado me aparezcan todos los campos de esa columna en un listbox??En Access VBA.

Necesito saber como  tendria k recorrer todas las capzaleras e irlas añadiendo en el cuadro combinado(lista desplegable). Sabes como se hace?

Y luego al seleccionar un item de esa lista, tendria k abrir el recordset pasadole una select como esta:
Select 'Columna_seleccionada' From [Hoja1$]

Alguna ayudita?

Graciass
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 11:53 AM
mmm si es para VBA

te dare un ejemplo:

abre el libro de Excel o el archivo de Access

ve a Herramientas->MAcro-Editor de Visual Basic

posteriormente ve a archivo->Importar Archivo (importa el archivo Modulo .bas)
despues a Herramientas->Referencias y y activa a "Microsoft ActiveZ Data 2.0" acepta el dialogo

despues en el modulo ya importado cambia las siguientes lineas

Código (vb) [Seleccionar]

DirectorioBDD = App.Path & "\data.xls"

y ponle la ruta COMPLETA del archivo de Excel
por ultimo un arreglo para este VBA

Código (vb) [Seleccionar]

   For i = 1 To Cant_ACC - 1
       datos = CStr(rs!id) & vbNewLine & _
       CStr(rs!vj) & vbNewLine & _
       CStr(rs!genero) & vbNewLine & _
       CStr(rs!plataforma) & vbNewLine & _
       CStr(rs!existencias) & vbNewLine & _
       CStr(rs!precio)
       rs.MoveNext
       MsgBox datos
   Next i

despues de este codigo agrega estas lineas:
Código (vb) [Seleccionar]

   CN.Close
   set rs=nothing' Solo si ya no usaras el RecordSet en otras funciones pon esta linea de lo contrario no la pongas


OJO si no agregas estas lineas se quedaria abierto y marca un error

listo corre la Funcion Main y que pasa?

Aca te dejo una imagen: es el mismo resultado como para VB6 como para VBA

(http://musanto.webcindario.com/AdoRecordSetExcel.JPG)

Saludos; dulces Lunas
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 10 Mayo 2009, 12:05 PM
Yo diria k el "For i = 1 To Cant_ACC - 1" va sin el -1.

He  comprobado k al hacer rs.movefirst coge directamente el primer dato de la columna enves de cojer el titulo. Como es esto?

Como lo haces para k el codigo sepa k la primera fila del excel es la capcelera??

gracias
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 12:19 PM
Cita de: CrÄsH en 10 Mayo 2009, 11:09 AM
La pagina de microsoft ya la tenia, con ella en teoria conegui hacer la conexio pero no sabia como recojer datos del excel.

Los dos primeros comentarios k me dices:

" Para Access Quita Corchetes y el Signo de Pesos"

Seguro k es asi?

Si lo uso en access dnd pone [configuracion$] y  [datos$], si la hoja del excel se llama hoja1, tendria k poner [Hoja1$], en los dos casos, no?

graciass

no claro que no de hecho los corchetes stanto como el signo como lo puse en el source son SOLO PARA EXCEL

Te recomiendo que juegues con el codigo y con el "Que pasaria Si cambio esto por esto otro...?", y "si esto otro es pque pasaria si le pongo esto...?", etc

Ahora para llenar los listbox usa catalogos (Varias Hojas o Tablas o en su defecto Bases de Datos, en excel Libros)

para el llenado no es dificil

solo usa un bucle
Código (vb) [Seleccionar]

rs.MoveFirst'hubicate en el primer registro con
rs!NombreDeColumnaX  'obten los datos
rs.MoveNext'Muevete al Siguiente registro con

Revisa el Ejemplo que te di...

Pero ojo
para contar el numero de registros hay dos formas una de ellas seria con un campo donde lleves un control de los registro pero ojo con esto si este es incorretco el bucle realizara mas operaciones de las nesesarias o menos de los registros reales en mejor usar este:

Código (vb) [Seleccionar]

rs.RecordCount 'Sirve para contar los registros exactos de cualquier Base de Datos

posterior mente

solo realisa el bucle

Código (vb) [Seleccionar]

    dim c as integer,i as integer
    c=rs.RecordCount
    rs.MoveFirst
    for i = 1 to c
         lista.additem rs!NombreColumna
         rs.movenext
    next i
    'cn.close 'Cierra CN si es nesesario si es que usaras otra BASE DE DATOS lo contrario solo realisa una consulta con RS.open


has en una hoja en blanco un diagrama con las tablas, posteriormente realcionalas

despues usa el "IF then" o el "Select Case" y por un X campo digamos el ID, Nombre o el que tu elijas tome los datos requeridos

seria el proceso asi segun veo

conexión Ado
Consulta
Desconeccion
Procesos
conexión ADo
Consulta
Desconección
...
...
...

segun se decida

P.D.: Si abres otro archivo de Excel o Acces o cambia a otro tipo de Base de datos cierra Cn e iguala a rs=noting (las lineas que te di anteriormente)

PERO si seguiras usando la misma BAse de Datos solo realisa otra consulta con rs.open y despues mueve al primer registro con rs.moveFirts

si cambias de Tabla usa (esto lo digo de forma general especialmente para SQLServer y MySQL)

Código (sql) [Seleccionar]

use NombreDeTabla


PAra excel sigue usando

Código (sql) [Seleccionar]

select Columna from  [NombreDeTabla$] where bla bla bla...¡"


En todo caso lee un tuto o manual SQL (Codigo no la BDD ojo con eso.)¡!

Ya me ire a dormir ya me desvele bastamente.¡!

Saludos; Dulces Lunas.
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 12:34 PM
Cita de: CrÄsH en 10 Mayo 2009, 12:05 PM
Yo diria k el "For i = 1 To Cant_ACC - 1" va sin el -1.

He  comprobado k al hacer rs.movefirst coge directamente el primer dato de la columna enves de cojer el titulo. Como es esto?

Como lo haces para k el codigo sepa k la primera fila del excel es la capcelera??

gracias

     Lo que pasa es que Excel toma la primera fila como cabeceras cuando usamos ADO en excel mismo cada celda tiene un nombre degun su intercepcion... cuando se guarda una hoja de excel en formato de texto plano no pone nombres de celdas si no mas bien Excel identifica da datos por las separacion en tabulaciones y por esto identifica dato y lo relaciona a cada celda en si ADO en Excel lo que hace es que la primera fila la toma como baceras e ignora los nombres de las celdas por ende en una BAse de datos ninguna Celda tiene Nombre por esto.

     Ademas cuando uno diseña una Tabla de una BAse de datos solo existen tres cosas generalmente

Babereca de la columna
Celdas
Formato/Tipo de Datos
...¡!

ahora con lo de

Código (Vb) [Seleccionar]

    For i = 1 To Cant_ACC - 1
        datos = CStr(rs!id) & vbNewLine & _
        CStr(rs!vj) & vbNewLine & _
        CStr(rs!genero) & vbNewLine & _
        CStr(rs!plataforma) & vbNewLine & _
        CStr(rs!existencias) & vbNewLine & _
        CStr(rs!precio)
        rs.MoveNext
        MsgBox datos
    Next i


como veras si pones lo siguiente:

    For i = 10 To Cant_ACC - 10

seria equivalente a

    For i = 1 To Cant_ACC - 1

al igual que a

    For i = 0 To Cant_ACC

Notas algo? bueno en si en estas 3 realizaria el mismo numero de bucles, pude haber pueso el 1ro eo el 3ro pero elegi por poner el 2do algo tonto  ya que el 3eero era el ideal.

a si par llenar una lista despegable de los nombres de las cabeceras es con

rs.Fields.Count <--- Cuenta las columnas o cabeceras pero ojo esto cuenta una Matriz por ende empiesa desde el 0 y contando el Cero

Código (vb) [Seleccionar]

For i = 0 To rs.Fields.Count - 1 'Le resto 1 por que esta contando un arreglo
        MsgBox rs.Fields(i).Name
Next i


es como decir esto

Código (vb) [Seleccionar]

dim Arreglo(1) as string ' la cantidad es de 2 es decir el 0 y el 1
arreglo(0)="aaa"
arreglo(1)="bbb"
for i = 0 to ubound(arreglo)-1 ' es como   For i = 0 To rs.Fields.Count - 1
     msgbox arreglo(i)
next i


ya despues si haces caso omiso de IF Then un bucle y demas para rrellenar los campos que desees bueno Xao ya ahora si:

Saludos; Dulces Lunas.
Título: Re: busco tuto:vincular excel+acces
Publicado por: BlackZeroX en 10 Mayo 2009, 12:39 PM
Cita de: CrÄsH en 10 Mayo 2009, 12:05 PM
Yo diria k el "For i = 1 To Cant_ACC - 1" va sin el -1.

Quita el -1 pero en si esta bien lo que hice aca te digo el por que xP

Revisa la Base de Datos de Excel tanto de Access tiene

Mmm no lo vez

El id es 100 y esta en la fila 100 de Excel jeje me comi un regitro por ende solo hay 99 registros realmente te das cuenta por que en la celda A100 esta el 100 y recuerda que se elimina una fila que es la del 1 por que se cuenta como cabecera,

El registro faltante es el ID 67  jeje es por eso que para ti no va el -1 pero realmente si va si se usa i=1


64 Destroy All Humans! Aventura Accion Armas Disparos Aliens PS2 4 $564,00 4
65 Destroy All Humans! 2 Aventura Accion Armas Disparos Aliens PS2 54 $540,00 2
66 Deus Ex: The Conspiracy Aventura Accion Estrategia PS2 15 $545,00 5
68 Devil May Cry Sangre Accion aventura PS2 100 $456,00 70
69 Devil May Cry 2 Sangre Accion aventura PS2 45 $456,00 5
70 Devil May Cry 3: Dante's Awakening Sangre Accion aventura PS2 80 $456,00 78
71 Resistance: Fall of Man Sangre Accion PS3 41 $345,00 12


ya lo notaste?


SAludos y Dulces Lunas
Título: Re: busco tuto:vincular excel+acces
Publicado por: CrÄsH en 10 Mayo 2009, 15:37 PM
Muchas gracias BlackZeroҖ!!!!

Dejo el tema solucionado.