Saltar al contenido

Registro lento de una un formulario a una Hoja de excel.


Recommended Posts

buen dia

el problema que tengo es el siguiente:

ocupó este código para registrar  información en una base de datos de excel, el problema que tengo es que  a la hora de hacer funcionar  el código por medio de un botón, tarda mucho en registrar porque la base de datos ya tiene 5,345 registros. quiero suponer que el problema está a la hora que busca la ultima fila vacía, hasta que la encuentra registra.

Dim ifila As Long
Dim ws As Worksheet
Set ws = Sheets("BDPAGOS")
ifila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

ws.Cells(ifila, 1).Value = Me.NOFACTURA.Value
ws.Cells(ifila, 2).Value = VBA.CDate(Me.FECHAPAGO.Value)
ws.Cells(ifila, 3).Value = Me.BANCO.Value
ws.Cells(ifila, 4).Value = Me.CHEQUE.Value
ws.Cells(ifila, 5).Value = VBA.CDbl(Me.IMPORTEP.Value)
ws.Cells(ifila, 6).Value = Me.ESTATUS.Value

 

espero haber sido claro exponiendo mi problema y agradezco infinitamente a las personas que nos ayudan a resolverlos.

Gracias anticipadas.

 

Enlace a comentario
Compartir con otras webs

Hace 53 minutos , JSDJSD dijo:

Hola happy-christian, sube tu archivo aunque sea con datos ficticios

Hola JSDJSD  gracias por responder

arme un archivo nuevo con el código, pero ahí no me dio el problema, estoy subiendo todo el codigo que utilizo en el formulario.  el problema lo tengo en el código de guardar Lo identifique.

espero puedan ayudarme a que se pueda guardar mas rápido.

Private Sub NOFACTURA_Change()
Worksheets("DATOS").Range("A3") = NOFACTURA.Value


FECHAFAC.Value = Worksheets("DATOS").Range("B3")
FECHASOLI.Value = Worksheets("DATOS").Range("C3")
FECHAVEN.Value = Worksheets("DATOS").Range("H3")
AVISO.Value = Worksheets("DATOS").Range("I3")
CONDICION.Value = Worksheets("DATOS").Range("G3")
IMPORTE.Value = Worksheets("DATOS").Range("F3").Text
PROVEEDOR.Value = Worksheets("DATOS").Range("D3")
MATERIAL.Value = Worksheets("DATOS").Range("E3")
MONEDA.Value = Worksheets("DATOS").Range("J3")
FECHAENVIO.Value = Worksheets("DATOS").Range("C6")

ESTATUSAC.Value = Worksheets("DATOS").Range("H6")


End Sub

'EL PROBLEMA TIENE QUE ESTAR POR AQUI DONDE SE GUARDA LA INFORMACION--------------------------------------------------------------'



Private Sub GUARDAR_Click()
Application.ScreenUpdating = False


Sheets("CONTROL").Select
If Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).Find(NOFACTURA, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
  MsgBox "El numero de la factura ingresada no esta en la base de datos de control de pagos verifique", 64, ""
Exit Sub
End If

Sheets("BDPAGOS").Select
If Not Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).Find(NOFACTURA, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then
  MsgBox "El numero de la factura ingresada ya existe en esta lista, por favor verifique", 64, ""
Exit Sub
End If

Dim ifila As Long
Dim ws As Worksheet
Set ws = Sheets("BDPAGOS")
ifila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

If Trim(Me.NOFACTURA.Value) = "" Then
Me.NOFACTURA.SetFocus
MsgBox "INGRESE EL NUMERO DE LA FACTURA"
Exit Sub
End If


If Trim(Me.FECHAPAGO.Value) = "" Then
Me.FECHAPAGO.SetFocus
MsgBox "INGRESA LA FECHA DE PAGO"
Exit Sub
End If

If Trim(Me.BANCO.Value) = "" Then
Me.BANCO.SetFocus
MsgBox "INGRESE EL BANCO DONDE SE PAGO LA FACTURA"
Exit Sub
End If


If Trim(Me.CHEQUE.Value) = "" Then
Me.CHEQUE.SetFocus
MsgBox "INGRESE LOS DIAS DE CONDICION DE PAGO"
Exit Sub
End If

If Trim(Me.IMPORTEP.Value) = "" Then
Me.IMPORTEP.SetFocus
MsgBox "SELECCIONE UN PROVEEDOR DE LA LISTA SI ESTE NO SE ENCUENTRA REGISTRELO CON EL BOTON REGISTRAR PROVEEDOR"
Exit Sub
End If

If Trim(Me.ESTATUS.Value) = "" Then
Me.ESTATUS.SetFocus
MsgBox "SELECCIONE EL ESTATUS DE LA FACTURA"
Exit Sub
End If


RPTA = MsgBox("¿DESEA REGISTRAR LA INFORMACION ?", vbYesNo + vbQuestion)
    If RPTA = vbNo Then Exit Sub
    

ws.Cells(ifila, 1).Value = Me.NOFACTURA.Value
ws.Cells(ifila, 2).Value = VBA.CDate(Me.FECHAPAGO.Value)
ws.Cells(ifila, 3).Value = Me.BANCO.Value
ws.Cells(ifila, 4).Value = Me.CHEQUE.Value
ws.Cells(ifila, 5).Value = VBA.CDbl(Me.IMPORTEP.Value)
ws.Cells(ifila, 6).Value = Me.ESTATUS.Value


Sheets("BDPAGOS").Select


Range("G4").Select
Selection.Copy
Range("G" & Cells.Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("G4").Select

Sheets("MENU").Select


NOFACTURA.Value = ""
FECHAPAGO.Value = ""
FECHASOLI.Value = ""
BANCO.Value = ""
CHEQUE.Value = ""
IMPORTEP.Value = ""
ESTATUS.Value = ""

NOFACTURA.SetFocus

End Sub



'EL PROBLEMA TIENE QUE ESTAR HASTA AQUI ------------------------------------------------------------------------------------------'

Private Sub Salir_Click()
Application.ScreenUpdating = False
   
NOFACTURA.Value = ""
FECHAPAGO.Value = ""
FECHASOLI.Value = ""
BANCO.Value = ""
CHEQUE.Value = ""
IMPORTEP.Value = ""
ESTATUS.Value = ""
    
    Unload Me
    
    Sheets("CONTROL").Select
    Range("A3:Q3").Select
    Selection.AutoFilter
    
    
    Sheets("MENU").Select
    
Worksheets("CONTROL").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="CONTROL01"
    Worksheets("BDFECHAENTRADA").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="CONTROL01"
     Worksheets("BDPAGOS").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="CONTROL01"
    Worksheets("DATOS").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="CONTROL01"
    Worksheets("FORMATO").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="CONTROL01"

End Sub

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

Worksheets("CONTROL").Unprotect Password:="CONTROL01"
    Worksheets("BDFECHAENTRADA").Unprotect Password:="CONTROL01"
    Worksheets("BDPAGOS").Unprotect Password:="CONTROL01"
    Worksheets("DATOS").Unprotect Password:="CONTROL01"
Worksheets("FORMATO").Unprotect Password:="CONTROL01"

Sheets("CONTROL").Select
Range("A3").Select

Do While ActiveCell <> Empty

    ActiveCell.Offset(1, 0).Select

    NOFACTURA.AddItem ActiveCell
Loop

Sheets("CONTROL").Select
    Range("A3:Q3").Select
    Selection.AutoFilter

Sheets("MENU").Select
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, ModoCerrar As Integer)
       If ModoCerrar <> 1 Then Cancel = 1
End Sub

Private Sub vercalendario_Click()


End Sub

Private Sub VCalendario_Click()
'Control de visualización del calendario
FechaActiva = ""
Set ControlActivo = FECHAPAGO
If IsDate(FECHAPAGO) = True Then FechaActiva = FECHAPAGO



Calendario.Show
End Sub



Private Sub UserForm_Terminate()

Unload Calendario

End Sub

 

saludos!

 

Enlace a comentario
Compartir con otras webs

Hace 1 hora, JSDJSD dijo:

Sube el archivo que te da problemas

Hola JSDJSD

por el tamaño no me permite subir mi archivo pero puedes descargarlo de este link por favor.

https://1drv.ms/x/s!AhTpeRiQWgCGhitfIcOaSq93oWvy

este programa fue diseñado para controlar los pagos de los proveedores, y el problema lo estoy teniendo a la hora de registrar un pago.

Region%20Capture%201_zps9yavq81b.jpg

para registrar un pago tomamos una de las ultimas facturas porque las primeras ya tienen un pago registrado y te avisara del mismo y no te permitira registrar.

 

Region%20Capture%202_zpsrvyljc6y.jpg

 

ya que se llenen los textbox que estan en blanco le damos en registrar, ahí es donde tengo el problema porque tarda mucho en registrarme un pago

 

Region%20Capture%203_zpsj99daquh.jpg

 

toda la información se guarda en la siguiente hoja:

Region%20Capture%204_zpst6ra5cgy.jpg

Region%20Capture%205_zps1jpdj64n.jpg

 

espero y no tengas problemas para descargar mi archivo, te agradezco mucho tu ayuda

saludos!!

Enlace a comentario
Compartir con otras webs

Hace 1 hora, JSDJSD dijo:

Sube el archivo que te da problemas

 

Hola JSDJSD  estoy subiendo el archivo en otros links 

por si no se puede abrir el primero

https://mega.nz/#!ApkFjYhL!VwSmV-6rqu3yEPZ1nfrssLznOsm50-MZxKW1WoUd1L8

https://1drv.ms/u/s!AhTpeRiQWgCGhjEIE77WokJufAPZ

 

saludos y gracias!

Enlace a comentario
Compartir con otras webs

Hace 9 horas, JSDJSD dijo:

hola JSDJSD

revise tu archivo y veo que se cambio el formato de la tabla de la base de datos de los pagos, el problema al parecer se soluciono pero lo que veo que al hacer el cambio de esa tabla varias formulas que se concentraban en la Hoja de control se desajustaron y daban error, cambie las formulas y realice unas pruebas de registro de pago y me volvió a dar el problema de tardarse tanto en el registro.

estoy anexando tu archivo con la corrección de las formulas para que puedas ver lo que te comento.

https://1drv.ms/u/s!AhTpeRiQWgCGhjKlTuZgWevFESow

te agradezco mucho tu ayuda 

 

saludos!!

Enlace a comentario
Compartir con otras webs

Hace 1 hora, JSDJSD dijo:

Subelo otra vez me da error

 

Lo subi en estos dos link, espero no tengas problemas para descargarlos muchas gracias.

https://mega.nz/#!NtkgEAaJ!kzIRx1TghI1655kHTtE3SU2iqrDBdzivQkADbl3MUqg

https://1drv.ms/u/s!AhTpeRiQWgCGhjOJ_g_zubqW4Q_-

 

SALUDOS!!

 

Enlace a comentario
Compartir con otras webs

Hace 3 minutos , happy-christian dijo:

Te funciono bien el archivo que te mandé ?

O Como podría modificar mi macro para que a la hora de que busque la última celda vacía busque desde las ultimas Celdas llenas y no tenga que estar buscando desde la filial uno. 

 

Es es decir en vez de empezar por la filial uno que empiece a buscar desde fila 5340 y de ahí hacia abajo para buscar la fila vacía. Como podría modificar esta indicación en mi macro?

Dim ifila As Long
Dim ws As Worksheet
Set ws = Sheets("BDPAGOS")
ifila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

ws.Cells(ifila, 1).Value = Me.NOFACTURA.Value
ws.Cells(ifila, 2).Value = VBA.CDate(Me.FECHAPAGO.Value)
ws.Cells(ifila, 3).Value = Me.BANCO.Value
ws.Cells(ifila, 4).Value = Me.CHEQUE.Value
ws.Cells(ifila, 5).Value = VBA.CDbl(Me.IMPORTEP.Value)
ws.Cells(ifila, 6).Value = Me.ESTATUS.Value
Enlace a comentario
Compartir con otras webs

ifila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

 

 

Tu código busca desde el final de la hoja hacia arriba, hata encontrar la la primera fila con datos y con Offset(1,0), al encontrar la última fila en uso, salta 1 fila más la cual sería la última fila libre, cosa que está bién.

Con respecto a si me funciona el archivo que has subido sí.

 

 

Enlace a comentario
Compartir con otras webs

Hace 2 horas, JSDJSD dijo:

Mira en el enlace como funciona perfectamente tu formulario con el último archivo que has subido.

 

https://www.dropbox.com/s/smkomwhd3yu3re6/2019-03-29_21-29-49.gif?dl=0

Una disculpa soy un **maravilloso** subi el mismo archivo que me enviaste, y tenia que subvierte el archivo donde solo corregi las formulas que se movieron por el cambio de la  tabla que hiciste.

este es el archivo correcto.

https://mega.nz/#!s8dwCADT!QJmYqabesTGctAwn7Mfi3WDW_-7Pscr5Q7vRoVdbKhs

https://1drv.ms/u/s!AhTpeRiQWgCGhjTfOiDbNX0eZHJL

espero no desesperarte, te agradezco mucho tu ayuda.

saludos!!

 

Enlace a comentario
Compartir con otras webs

Hace 9 horas, JSDJSD dijo:

Que formulas son las que se desajusta ?

en la hoja de control 

HOJAS_zpsvy2muxlz.jpg

 

de la columna L HASTA P se tiene formulado para traer los datos que registramos del pago, esas son las formulas que se desajustaron cuando se cambio la tabla de pagos, al corregirlas nos vuelve a dar el error.

FORMULAS_zpsctsn2wv5.jpg

 

saludos y muchas gracias por tu ayuda.

 

CHRISTIAN ZAMORA.

 

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Buenas noches quisiera hacer esta formula auto incremental    =SI(INDIRECTO("'Casos de Prueba'!I1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")); 0)      para que cada vez que copiase y pegase la celda con la formula  se incrementara la letra en este caso la I pasara a J ,como el numero perteneciente a Resultados Ciclo pasando en este caso del 1 al 2.   Tengo también esta formula =CONCATENAR("CP";TEXTO(MAX((SI((ESNUMERO(HALLAR("CP";A$1:A1)))*(A$1:A1<>"");VALOR(EXTRAE(A$1:A1;3;3));0))+1);"000")&" - "&B2) quisiera que no tuviera los 3 ceros si no que fuera por ejemplo CP1 y se fuera incrementando. Gracias un saludo.
    • Con el diseño así como lo tiene en su libro, una fórmula de BUSCARV con COINCIDIR debería ser de utilidad =C5*BUSCARV($C$1,Tabla1[#Todo],COINCIDIR($D5,Tabla1[#Encabezados],0)) Es con lo que participaría en su consulta. Lo que resta es definir que hacer si no encuentra la OT porque así como esta le devolvería error en ese caso, o si tiene condiciones que haya podido omitir también le afectarían el resultado.
    • He cambiado mi macro a este: Sub repetir() Set a = Sheets(ActiveSheet.Name) uf = a.Range("C" & Rows.Count).End(xlUp).Row 'ultima fila con datos ActiveCell.Select ActiveCell.Offset(1, 0).Select   'Application.OnTime Now + TimeValue("00:00:10"), "repetir", , True End If End Sub   Lo que no se es como detenerlo al llegar a la ultima fila con datos de la columna C. Muchas gracias
    • Buenas tardes a todos. Tengo un problema que preciso de vuestra ayuda.  Tengo que controlar los gastos de la oficina que trabajo y he de repartir unos gastos a % según una OT y unos tipos de gastos. Envío un archivo adjunto. Lo que necesito es que lo que aparece en la columna en amarillo lo haga automáticamente, teniendo en cuenta los datos de la tabla a la derecha. Por ejemplo, el primer gasto tiene una cuota de 1477 euros y teniendo en cuenta que es un gasto de tipo Común y que la OT es la 12810234, le corresponde un gasto de 605,57 euros ya que según la tabla de la derecha su % a imputar es de un 41%. ¿alguien me puede ayudar con la formula? He de añadir muchas más líneas y más hojas con el resto de OT y en el futuro cambiar más datos, así que necesito automatizarlo con una formula Excel. Gracias. Control de gastos.xlsx
    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.