Exportar de Excel a Access mediante formulario de vba

En esta ocasión presento un proyecto que puede dar pie a crear otros más elaborados, dependiendo de la necesidad.

El proyecto realiza la captura de datos mediante un formulario diseñado en vba, para así evitar que los usuarios puedan modificar celdas, además emula a una aplicación de escritorio, ya que oculta la aplicación de Excel, dejando a la vista sólo el formulario.

Identificación de usuario

Mediante un formulario con un ComboBox, se elige el usuario deseado, mismo que será guardado en la base de datos.

Imagen del formulario

image

Código del formulario

'Convierte a mayúsculas el texto ingresado
Private Sub cmbAsesores_Change()
    Combo1 = UCase(cmbAsesores)
    cmbAsesores = Combo1
End Sub
'::
'Guarda el nombre de usuario elegido y lanza el formulario
Private Sub CommandButton1_Click()
    If cmbAsesores.Value = "" Then
        MsgBox "Debes elegir tu nombre"
        Exit Sub
    Else
        Sheets("Hoja1").Range("Asesor") = cmbAsesores.Value
        frmCaptura.lblAsesor = ("Asesor: " & Sheets("Hoja1").Range("Asesor").Value)
        Unload Me
    End If
    frmCaptura.Show showmodal = True
End Sub
'::
Private Sub CommandButton2_Click()
    Unload Me
End Sub
'::
'Llena los Combos
Private Sub UserForm_Activate()
    Application.Visible = False
    Me.cmbAsesores.RowSource = "lstAsesores"
    cmbAsesores.SetFocus
End Sub
'
'Lanza un MsgBox cuando cierras el formulario.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "Por favor, elige tu nombre", vbInformation, "BOTON ANULADO"
    End If
End Sub

Ingreso de datos

El ingreso de los datos se realiza mediante un formulario diseñado en vba, el cual al recibir los datos, los mismo serán enviado a una base de datos de Access, alojada en la misma carpeta del archivo.

Imagen del formulario

image

El archivo adjunto contiene todo el código, por lo que lo podrás consultar al descargarlo.

También puedes consultar Conectar Excel a Access, MySql y SQL

:: Descargar el ejemplo

You may also like...

  • adrian83

    Hola Sergio,

    Muchas gracias por el ejemplo pero tengo una duda, tome el ejemplo y lo modifique para poder agregar a una base de datos de clientes para tomar esos dartos y hacer facturas.

    Hice una base de datos de access llamada facturas y una tabla llamada clientes,y no uso la ventana principal de seleccionar asesor solo la de captura. Tengo el siguiente problema : al correr la ventana de captura se ejecuta correctamente al terminar de capturar y dar click en el boton de alta me aparece un msgbox con la palabra erro y no me pasa la informacion ala base de datos. Si me pudieras ayudar de favor seria excelente.

    Adjunto codigo de formulario capturar:
    Rem Codigo tomado de:
    Rem http://www.erlandsendata.no/english/index.php?d=envbadacexportado
    Rem Usado y modificado por Sergio A Campos H

    ‘Option Explicit
    Private Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function DrawMenuBar Lib “user32” (ByVal hWnd As Long) As Long
    Private Declare Function SetWindowLong Lib “user32” Alias “SetWindowLongA” (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib “user32” Alias “GetWindowLongA” (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Const WS_MINIMIZEBOX As Long = &H20000
    Private Const WS_MAXIMIZEBOX As Long = &H10000
    Private Const GWL_STYLE As Long = (-16)

    Private Sub UserForm_Initialize()
    Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long
    If Application.Version < 9 Then
    lngMyHandle = FindWindow("THUNDERXFRAME", Me.Caption)
    Else
    lngMyHandle = FindWindow("THUNDERDFRAME", Me.Caption)
    End If
    lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)
    lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX ' Or WS_MAXIMIZEBOX
    SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle
    End Sub
    '
    Private Sub CommandButton1_Click()
    Unload Me
    Application.Visible = True
    End Sub

    Private Sub CommandButton2_Click()
    On Error GoTo fin
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, n As Long
    Dim nfila As String
    '
    If txtRfc = "" Or txtrsocial = "" Or txtDomicilio = "" Or txtColonia = "" Or txtCiudad = "" Or txtEstado = "" Or txtCp = "" Then
    MsgBox "No se puede continuar. Algunos datos obligatorios no pueden estar en blanco."
    txtRfc.SetFocus
    Exit Sub
    End If
    '
    Set cn = New ADODB.Connection
    cn.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & ThisWorkbook.Path & "facturacion.mdb;"
    Set rs = New ADODB.Recordset
    rs.Open "Clientes", cn, adOpenKeyset, adLockOptimistic, adCmdTable
    '
    With rs
    .AddNew
    .Fields("RFC") = Me.txtRfc.Value
    .Fields("Razon Social") = Me.txtrsocial.Value
    .Fields("Domicilio") = Me.txtDomicilio.Value
    .Fields("Colonia") = Me.txtColonia.Value
    .Fields("Estado") = Me.txtEstado.Value
    .Fields("Ciudad") = Me.txtCiudad.Value
    .Fields("Codigo Postal") = Me.txtCp.Value
    End With
    '
    With rs
    .AddNew
    .Fields("RFC") = Me.txtRfc.Value
    .Fields("Razon Social") = Me.txtrsocial.Value
    .Fields("Domicilio") = Me.txtDomicilio.Value
    .Fields("Colonia") = Me.txtColonia.Value
    .Fields("Estado") = Me.txtEstado.Value
    .Fields("Ciudad") = Me.txtCiudad.Value
    .Fields("Codigo Postal") = Me.txtCp.Value
    End With
    '
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    '
    MsgBox prompt:="Los datos fueron enviados correctamente", Buttons:=vbOKOnly, Title:="DATOS GUARDADOS"
    '
    txtRfc = ""
    txtrsocial = ""
    txtDomicilio = ""
    txtColonia = ""
    txtEstado = ""
    txtCiudad = ""
    txtCp = ""

    '
    Me.txtRfc.SetFocus
    Exit Sub
    fin:
    Application.Visible = True
    MsgBox "Error"
    End Sub
    '
    Private Sub txtRfc_Change()
    Text = UCase(txtRfc)
    txtRfc = Text
    End Sub

    Private Sub txtrsocial_Change()
    Text = UCase(txtrsocial)
    txtrsocial = Text
    End Sub

    Private Sub txtDomicilio_Change()
    Text = UCase(txtDomicilio)
    txtDomicilio = Text
    End Sub

    Private Sub txtColonia_Change()
    Text = UCase(txtColonia)
    txtColonia = Text
    End Sub

    Private Sub txtEstado_Change()
    Text = UCase(txtEstado)
    txtEstado = Text
    End Sub

    Private Sub txtCiudad_Change()
    Text = UCase(txtCiudad)
    txtCiudad = Text
    End Sub

    Private Sub txtCp_Change()
    Text = UCase(txtCp)
    txtCp = Text
    End Sub

    Muchas Gracias Saludos!

    • sergioacamposh

      Antes que nada, te comento que hizo falta complentar el código para que muestro el error más claro:

      En la línes que muestra el error, sólo hay que dejarla así:
      MsgBox “Error: ” & Err.Description

      Una opción puede ser que los datos que ingresar en el formulario son de tipos distintos a los que tienes en los campos de la base de Access, por ejemplo, si en el Text hora ingresas un dato diferente a una hora, te mostrará el error.

      Otra opción es que necesites habilitarle la siguiente referencia dentro del edito de VBA, en el menú Herramientas > Referencias…: Microsoft ActiveX Data Object 2.5 Library.

      Con esto debe funcionar.

      • adrian83

        Hola Sergio muchas gracias por la respuesta, ya hice los siguiente complete la liena y agrege la referencia yo estaba usando la versio 2.1. Pero ahora al ejecutar el formulario y darle click al boton de alta me marca que no se ha definido sub o funtion en referencia a la linea que agrege y me subraya ”& esto en
        MsgBox “Error: ”& Err.Description

        Gracias de nuevo y una disculpa por tanto gorro.

        Saludos!

        Adrian Campos.

        • sergioacamposh

          Y si no incluyes esa línea ya no te genera el error?

          Tienes manera de publicar tu archivo?

  • adrian83

    A proposito estoy usando Excel 2003

    Muchas Gracias

    Saludos!

    Adrian Campos.

  • adrian83

    Hola Sergio,

    No si borro esa linea se queda como pasmado y no hace nada. En este link esta el archivo y la base de datos que estoy usando.

    https://skydrive.live.com/redir.aspx?cid=ce3f88c16f58568d&resid=CE3F88C16F58568D!533&parid=CE3F88C16F58568D!415

    https://skydrive.live.com/redir.aspx?cid=ce3f88c16f58568d&resid=CE3F88C16F58568D!532&parid=CE3F88C16F58568D!415

    Si no es mucha molestia quisiera ver si me puedes ayudar con una modificacion de la macro que muestras aqui:http://exceleinfo.wordpress.com/2010/02/18/macro-eliminar-repetidos/

    Lo que yo quiero hacer es que tengo una base de datos en una hoja de excel con los datos para facturacion de clientes. y tengo unos formularios para dar de alta clientes. Para lo que quiero usar esta macro es para qu al momento de dar de alta los datos del cliente, me diga si ya existe ese registro a traves del registro del RFC que esta en la columna 1 y me muestre un mensaje de que el registro ya existe y se borre el registro que se introdujo.

    Pero lo que pasa es que de la forma que lo hices, al introducir los datos si repito un registro de RFC me envia un mensaje de registro repetido pero en vez de borrar el registro nuevo me borra el que ya estaba y el que acabo de introducir lo deja en la tabla.

    El archivo esta en este link:

    https://skydrive.live.com/redir.aspx?cid=ce3f88c16f58568d&resid=CE3F88C16F58568D!534&parid=CE3F88C16F58568D!415

    Muchas Gracias!

    Saludos!

    Adrian Campos

    • sergioacamposh

      Para el caso de la exportación a Access tienes no cuadran los nombres de las columnas que tienes en Access, principalmente el del Código postal.

      Para el caso de los RFC repetido, incluye el siguiente código dentro del módulo del formulario de Alta de clientes:

      Private Sub txtrfc_Change()
      Repetido = Application.WorksheetFunction.CountIf(Range(“B:B”), Me.txtrfc.Value)
      If Repetido = 1 Then
      MsgBox “El RFC ” & Me.txtrfc.Value & ” ya está en la lista”
      Me.txtrfc.Value = “”
      Else
      End If
      End Sub

      • adrian83

        Hola Sergio,

        Muchisimas gracias por la ayuda ya funcionaron ambos casos.

        Excelente Blog.

        Saludos!!

        Adrian Campos.

      • adrian83

        Sergio,

        Me podrias ayudar con una ultima consulta. Que elementos tendria que usar para hacer el proceso inverso en la base de datos de access, y por ejemplo sacar todos los campos de determinad RFC, para poder poner cada campo en una celda de excel etc.

  • sergioacamposh

    Para realizar esa acción necesitas conocimientos básicos de SQL, ya que se realizaría la consulta mediante ese lenguaje.

    Una opción es realizarlo mediante el menú Datos y elegir Consulta desde Microsoft Query. Otra opción es ver el código de la siguiente página http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/466-vba-importar-access-a-excel.htm y adecuarlo a tus necesidades.

    • adrian83

      Perfecto le voy a dar una revisada.

      Muchas Gracias!

  • Pingback: Excel + Access + Dropbox, compatir base de datos en Internet « EXCELeINFO – Excel vba e información()

  • Muy bueno. He tomado varias cosillas de tus macros. Me gustaron. Saludos.

    • sergioacamposh

      Que bueno que te han sido de utilidad.

  • Pingback: Actualización: Exportar de Excel a Access 2007 y 2010 vba « EXCELeINFO – Excel vba e información()

  • Jorge Sanchez

    Buen dia

    Alguno de ustedes me podrian ayudar con un formulario que estoy realizando y tome el mismo codigo de este blogs y ahora me sale cuando ingreso todos los datos error

    Gracias agradezco su colaboracion

  • Jorge Sanchez

    Private Sub CommandButton1_Click()

    On Error GoTo fin
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, n As Long
    Dim nfila As String

    If txtCuenta = “” Or txtOrden = “” Or txtSerialretirado = “” Or txtSerialinstalado = “” Or txtFecha = “” Or txtNotas = “” Or txtDiagnostico = “” Or cmbSupervisor = “” Or cmbTecnico = “” Or cmbMretirada = “” Or cmbMinstalada = “” Then
    MsgBox “No se puede continuar. Algunos datos obligatorios no pueden estar en blanco.”, vbCritical, “Atención Telefónica”
    cmbDía.SetFocus
    Exit Sub
    End If

    Set cn = New ADODB.Connection
    cn.Open “provider=microsoft.jet.oledb.4.0; ” & “data source=” & ThisWorkbook.Path & “Equipos.mdb;”
    Set rs = New ADODB.Recordset
    rs.Open “Datos”, cn, adOpenKeyset, adLockOptimistic, adCmdTable


    With rs
    .AddNew
    .Fields(“cuenta”) = Me.txtCuenta.Value
    .Fields(“orden”) = Me.txtOrden.Value
    .Fields(“serialretirado”) = Me.txtSerialretirado.Value
    .Fields(“serialinstalado”) = Me.txtSerialinstalado.Value
    .Fields(“fecha”) = Me.txtFecha.Value
    .Fields(“notas”) = Me.txtNotas.Value
    .Fields(“diagnostico”) = Me.txtDiagnostico.Value
    .Fields(“supervisor”) = Me.cmbSupervisor.Value
    .Fields(“tecnico”) = Me.cmbTecnico.Value
    .Fields(“marcaretirada”) = Me.cmbMretirada.Value
    .Fields(“marcainstalada”) = Me.cmbMinstalada.Value

    End With

    With rs
    .AddNew
    .Fields(“cuenta”) = Me.txtCuenta.Value
    .Fields(“orden”) = Me.txtOrden.Value
    .Fields(“serialretirado”) = Me.txtSerialretirado.Value
    .Fields(“serialinstalado”) = Me.txtSerialinstalado.Value
    .Fields(“fecha”) = Me.txtFecha.Value
    .Fields(“notas”) = Me.txtNotas.Value
    .Fields(“diagnostico”) = Me.txtDiagnostico.Value
    .Fields(“supervisor”) = Me.cmbSupervisor.Value
    .Fields(“tecnico”) = Me.cmbTecnico.Value
    .Fields(“marcaretirada”) = Me.cmbMretirada.Value
    .Fields(“marcainstalada”) = Me.cmbMinstalada.Value

    End With

    Set rs = Nothing
    cn.Close
    Set cn = Nothing

    MsgBox prompt:=”Los datos fueron enviados correctamente”, Buttons:=vbOKOnly, Title:=”DATOS EXPORTADOS”

    txtCuenta = “”
    txtOrden = “”
    txtSerialretirado = “”
    txtSerialinstalado = “”
    txtFecha = “”
    txtNotas = “”
    txtDiagnostico = “”
    cmbSupervisor = “”
    cmbTecnico = “”
    cmbMretirado = “”
    cmbMinstalada = “”

    Me.cmbDia.SetFocus
    Exit Sub
    fin:
    Application.Visible = True
    MsgBox “Error”
    End Sub

  • harper

    link del ejemplo muerto,subelo de nuevo please!!

  • harper

    Gracias master te pasaste ,una ultima pregunta donde podria crear un tema sobre una aplicacion que quiero hacer con execel y acces ,para que me orienten?
    saludos.. y gracias por el ejemplo…–

  • Buenas noches

    Como siempre, estoy contento de ver los ejemplos que expone y en verdad me ayudan a aprender mas, sin embargo, me preguntaba como se haria para enviar la informacion de un listbox con 5 o 8 columnas y que en la primera columna de la base de datos access, se coloque segun la cantidad de itemns en la lista el numero de control con el cual se registra la operacion..?

    en verdad seria de gran ayuda lo que puede suministrar.

    Mis respetos.

    • Sergio Alejandro Campos

      Buenas tardes David:

      Hay publicado un artículo en el que puedes pasar datos de Excel a Access, pero en lugar de ser un formulario, es una tabla de Excel, lo cual ayuda a pasar más de un registros a una base de datos de Access.

      No sé qué metodo utilizas para llenar el ListBox, pero si los datos estuvieran en tabla de Excel, el ejemplo lo podrías adecuar.

      El link es http://blogs.itpro.es/exceleinfo/2011/02/08/conectar-excel-a-access-mysql-y-sql/

      Cualquier comentario con gusto lo vemos.

  • Mil gracias por respnder.
    En si el proyecto es de un control de inventario con el cual hago los ingresos y egresos y devoluciones, todo por medio de formulario programados para tal fin. En los mismo se pueden sumar o descontar hasta 43 itemns en una sola operación,con la facilidad de usar el listbox en el que voy agregando los itemns desde un combobox(Que muestra los itemns de la base de datos) y los siguientes label y textbox en donde están la informacion restante de los códigos. Luego con un botón programado para agregar, inserto en el listbox. Como comprenderá el listbox se maneja por columnas y por tanto al querer sumar o restar de la base de datos los itemns que estén en el listbox, lo hago con un bucle que recorre el listbox y otro que recorre la base de datos y segun las coincidencias ejecuta la acción, luego de alli toda la operacion viaja a otra hoja la cual llamo Record para guardar dicho registro. Todo funciona a la perfección, sin embargo por la cantidad de informacion que pueda generarse, usar access para los registros seria la opción mas ideal. Es por ello que apelo a sus buena fe en querer orientarme con este tema. He usado su codigo que tiene del link proporcionado, pero lamentablemente no logré adaptarlo, por el tema del bucle que debo diseñar para que haga lo recorridos correspondiente y demas.

    Espero pueda ayudarme si no es mucha molestia. Mi correo personal es dgarcia429@hotmail.com.

    Mis respetos.

    • Señor Sergio

      Olvidé mencionar el código que muestra los itemns de la base de datos en cada formulario, Todo a Ejemplo:
      Codigo para cargar el combobox de la base de datos
      Dim Cod as long
      Cod=2
      Do While Hoja1.Cells(Cod,1)””
      Combobox1.Additem Hoja1.Cells(Cod,1)
      Cod=Cod+1
      Loop
      El que muestra la informacion restante del codigo:
      Dim ResCod As Long
      ResCod=2
      Do While Hoja1.Cells(ResCod,1)””
      If Trim(Combobox1.Text)=Trim(Hoja1.Cells(ResCod,1) Then
      Label1.Caption=Hoja1.Cells(ResCod,2)
      Label2.Caption=Hoja1.Cells(ResCod,3)
      Label3.Caption=Hoja1.Cells(ResCod,4)
      ResCod=Rescod+1
      Loop
      Y asi sucesivamente y luego coloco las cantidades en un textbox y por ultimo lo inserto con un código que es el siguiente:
      Dim A as Long
      A=Listbox1.ListCount
      Listbox1.AddItem Combobox1
      ListBox1.List(A,1)=Label1.Caption
      ListBox1.List(A,2)=Label2.Caption
      ListBox1.List(A,3)=Label3.Caption
      ListBox1.List(A,1)=Cdbl(textbox1.Value)

      Como ultimo ejemplo, el codigo para descontar de la base de datos los codigos que coincidan del listbox con la base de datos:
      Dim Lin as Long, Fila as Integer
      Lin=2
      Do While Hoja1.Cells(lin,1)””
      For Fila =0 To Listbox1.Listcount-1
      If Listbox1.Column(0,Fila)=Hoja1.Cells(lin,1) Then
      Hoja1.Cells(Lin,6)=Cdbl(Hoja1.Cells(lin,6)-Listbox1.Column(5,Fila)
      End If
      Next
      Lin=Lin+1
      Loop
      Espero Esto pueda ayudar a orientar aun mas mi consulta.
      Mis respetos.

  • Señor Sergio

    Olvidé mencionar el código que muestra los itemns de la base de datos en cada formulario, Todo a Ejemplo:
    Codigo para cargar el combobox de la base de datos
    Dim Cod as long
    Cod=2
    Do While Hoja1.Cells(Cod,1)””
    Combobox1.Additem Hoja1.Cells(Cod,1)
    Cod=Cod+1
    Loop
    El que muestra la informacion restante del codigo:
    Dim ResCod As Long
    ResCod=2
    Do While Hoja1.Cells(ResCod,1)””
    If Trim(Combobox1.Text)=Trim(Hoja1.Cells(ResCod,1) Then
    Label1.Caption=Hoja1.Cells(ResCod,2)
    Label2.Caption=Hoja1.Cells(ResCod,3)
    Label3.Caption=Hoja1.Cells(ResCod,4)
    ResCod=Rescod+1
    Loop
    Y asi sucesivamente y luego coloco las cantidades en un textbox y por ultimo lo inserto con un código que es el siguiente:
    Dim A as Long
    A=Listbox1.ListCount
    Listbox1.AddItem Combobox1
    ListBox1.List(A,1)=Label1.Caption
    ListBox1.List(A,2)=Label2.Caption
    ListBox1.List(A,3)=Label3.Caption
    ListBox1.List(A,1)=Cdbl(textbox1.Value)

    Como ultimo ejemplo, el codigo para descontar de la base de datos los codigos que coincidan del listbox con la base de datos:
    Dim Lin as Long, Fila as Integer
    Lin=2
    Do While Hoja1.Cells(lin,1)””
    For Fila =0 To Listbox1.Listcount-1
    If Listbox1.Column(0,Fila)=Hoja1.Cells(lin,1) Then
    Hoja1.Cells(Lin,6)=Cdbl(Hoja1.Cells(lin,6)-Listbox1.Column(5,Fila)
    End If
    Next
    Lin=Lin+1
    Loop
    Espero Esto pueda ayudar a orientar aun mas mi consulta.
    Mis respetos.

  • Buenas noches

    Señor Sergio

    Queria preguntarle; que le parece este código que modifiqué:

    Sub ADOFromExcelToAccess()
    ‘Menu herramientas/ Referencias
    ‘Marca el Microsoft Activex Data Object 2.6 Library
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Integer
    Set cn = New ADODB.Connection
    cn.Open “Provider=Microsoft.ACE.OLEDB.12.0; ” & _
    “Data Source= ” & ThisWorkbook.Path & “Access.accdb;” ‘ ruta del Archivo Acces en formato 2007
    Set rs = New ADODB.Recordset
    rs.Open “consulta”, cn, adOpenKeyset, adLockOptimistic, adCmdTable ‘ nombre de la tabla entre comillas

    For r = 0 To UserForm1.ListBox1.ListCount – 1
    With rs
    .AddNew
    .Fields(“Numero”) = UserForm1.ListBox1.List(0, r)
    .Fields(“Nombre”) = UserForm1.ListBox1.List(1, r)
    .Fields(“Apellido Paterno”) = UserForm1.ListBox1.List(2, r)
    .Fields(“Apellido Materno”) = UserForm1.ListBox1.List(3, r)
    .Update
    End With

    Next
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    End Sub

    Espero poder contar con su evaluación.

    Mis respetos.

    • Sergio Alejandro Campos

      Más que evaluación, agradezco que tomes los ejemplos del Blog para adecuarlos a tus necesidades, ya que es el propósito que sigo, dar una introducción a las cosas y los mismos visitantes tomen todo lo que puedan del Blog.

      Si te funciona, perfecto, veo que hiciste un ciclo For para dar de alta desde un ListBox, lo cual es interesante.

  • Que bueno que le guste.

    Ahora me encuentro con otra duda y perdon por las tantas interrogantes… Como podria mostrar el valor maximo en una columna de una tabla access desde el formulario excel?

    Es decir; me gustaria que al abrirse el formulario, siguiendo la conexion ADO, me muestre el valor maximo de la columna en la tabla para usarlo como el correlativo o secuencia numerica para los resgistros. Una manera de enumerarlos cada vez que ingrese un nuevo registro, este se incremente con el nuevo registro.

    Usted conoce el como hacerlo?

    • Sergio Alejandro Campos

      Te recomiendo que tu tabla de Access tenga un campo autonumérico para que cada vez que captures un registro éste sea autoincrementable.

  • Hola Sergio, buena tarde, intento bajar el archivo de ejemplo que tienes y me marca que no existe la pagina, publicaste otra que a dropbox e indica que no tiene el archivo, si no es molestia me lo puedes enviar a mi correo personal o puedes volver a subir el link por fa???

    Gracias de antemano.

  • Buenas noches

    Mil gracias por responder.
    Es muy cierto lo del incremento sin embargo, considerando la cantidad de itemns de una misma operación, por medio del bucle, seria la cantidad de numeros que se registrarian.
    Ejemplo: Si en el formulario vba excel con el numero correlativo 000001 tengo cinco itemns en el listbox, serian cinco veces el numero 000001 que se registraria en la tabla access en la primera columna. Por tanto ese seria el orden a registrar y asi sucesivamente. Es por ello que esperaba obtener un codigo con el cual, mostraria el valor maximo de la columna de la tabla access para que asi cada vez que haga una operacion, el numero correlativo vaya incrementandose.
    En verdad seria una gran solucion, no obstante, estoy muy complacido en la ayuda que usted gentilmente ha proporcionado.

    Mis respetos.

  • Samael Galvan

    Sergio Alejandro Campos

    Hola, He leído todo el blog y realizado las adaptaciones para utilizarlo en mi proyecto, me ha servido mucho, sin embargo no soy un experto y estoy batallando para actualizar los registros.

    Para ser practico en explicarte mi problema tomare el ejemplo de las citas:

    Supongamos que desde excel queremos actualizar una cita que fue capturada anteriormente y necesitamos modificara en un campo especifico por cualquier motivo.

    Actualmente he logrado acceder a las server…BDMiBase.accdb alojado en una unidad de red y agregar registros, ahora necesito actualizar el estatus de cada registro, hasta que cada uno de estos sean cerrados o cancelados, dicha actualización se debe realizar medio de diferentes programas VBA@Excel dependiendo de tipo de usuario y el avance del proceso.

    Espero me puedan ayudar para saber como resolverlo en cada archivo que debe actualizar la bd.accdb

  • Luis Enrique Hilario Esteban

    Sergio: consulta en el formulario tengo que ingresar la hora tal como indicas el ejemplo, ahora los campos que son números no lo valida el formulario sin embargo te puede salir mensaje de error x que en Access esta definido como numérico? para access

    • sergioacamposh

      Es muy recomendable que los datos que ingresas tengan el mismo tipo de datos en tus campos de Access.