Saltar al contenido

se ha producido el error '-2147417848 (80010108) en tiempo de ejecucion : Error de Automatizacion


edu_hoyos

Recommended Posts

Hola.

Resumo un poco el archivo :

Es una tabla donde en la Columna A se encuentra el codigo de barras. Si el codigo de barras que introduzco esta en dicha columna salta un segundo formulario para introducir el valor.

El Enter_click se encuentra en un formulario donde permite poner un texto ( un codigo de barras ) y al hacer click ejecuta el codigo a continuacion.

Cada X productos salta el error : "se ha producido el error '-2147417848 (80010108) en tiempo de ejecucion : Error de Automatizacion". Si pulsamos en depurar la fila que marca es la del Set.

Si paro el programa y vuelvo a intentarlo salta un error diferente aunque lo marca en el mismo sitio : "Se ha producido el error "1004" en tiempo de ejecucion : Error definido por la aplicacion o el objeto.

 

Lo curioso es que salta el error cada X veces ( no siempre el mismo numero de veces ) y si guardo el excel. Lo cierro y volvemos a abrirlo y seguimos nos permite continuar por el mismo codigo de barras otras tantas veces.

Private Sub Enter_Click()

Dim CodBarras As String
Dim Novedad As String
Dim Revision As Long
Dim celda As Object


Application.ScreenUpdating = False
Application.DisplayAlerts = False
    
CodBarras = txt_codigo_barras

If CodBarras = "" Then
MsgBox "No puedes introducir nada.", , "Error"
Exit Sub
End If

Set celda = Sheets("Contar").Range("A:A").Cells.Find(What:=CodBarras, LookAt:=xlWhole)

If celda Is Nothing Then
MsgBox "Codigo de Barras no encontrado"
Exit Sub

ElseIf celda = CodBarras Then
celda.Select
Unload Me
Formulario_Stock.Show
End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub
Enlace a comentario
Compartir con otras webs

Hola,

Hice un pequeño cambio en el código si te sigue dando error es por otra parte donde te están los tiros... Aparentemente no debe haber error. Aunque no hay nada como ver la Lógica con ambos formularios y los controles...

Private Sub Enter_Click()
Dim CodBarras As String
Dim Novedad As String
Dim Revision As Long
Dim celda As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        
    CodBarras = txt_codigo_barras
    
    If CodBarras = "" Then
        MsgBox "No puedes introducir nada.", , "Error"
        Exit Sub
    End If
    
    Set celda = Sheets("Contar").Range("A:A").Cells.Find(What:=CodBarras, LookAt:=xlWhole)
    
    If Not celda Is Nothing Then
        celda.Select
        Unload Me
        Formulario_Stock.Show
    Else
        MsgBox "Codigo de Barras no encontrado"
        Exit Sub
    End If
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

 

 

Saludos.

Enlace a comentario
Compartir con otras webs

Hace 13 horas, Leopoldo Blancas dijo:

Hola,

Hice un pequeño cambio en el código si te sigue dando error es por otra parte donde te están los tiros... Aparentemente no debe haber error. Aunque no hay nada como ver la Lógica con ambos formularios y los controles...


Private Sub Enter_Click()
Dim CodBarras As String
Dim Novedad As String
Dim Revision As Long
Dim celda As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        
    CodBarras = txt_codigo_barras
    
    If CodBarras = "" Then
        MsgBox "No puedes introducir nada.", , "Error"
        Exit Sub
    End If
    
    Set celda = Sheets("Contar").Range("A:A").Cells.Find(What:=CodBarras, LookAt:=xlWhole)
    
    If Not celda Is Nothing Then
        celda.Select
        Unload Me
        Formulario_Stock.Show
    Else
        MsgBox "Codigo de Barras no encontrado"
        Exit Sub
    End If
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

 

 

Saludos.

Gracias Leopoldo. No ha funcionado, ahora en unos minutos cuelgo el archivo.

Enlace a comentario
Compartir con otras webs

Hace 13 horas, Antoni dijo:

Mejor sube el archivo porqué no está nada claro lo que expones.

Ok. He aislado la parte del programa donde da el error y verificado que sigue dandolo.

 

Ejecutando el formulario " formulario_contar" te pide un codigo de barras. Adjunto un txt con los codigos de barras y el stock que dara Correcto. Se puede introducir tambien mal la cantidad pero sera mas largo.

En la prueba de esta mañana me ha fallado cuando llevaba contados 34 pero tengo la sensacion que es aleatorio. ( adjunto pantallazo tambien del error ). Si le das a depurar y vuelves a darle al play para que te muestre el error, te muestra uno diferente

"Se ha producido el error "1004" en tiempo de ejecucion : Error definido por la aplicacion o el objeto. "

Error.JPG

Contar2.xlsm productos.txt

Enlace a comentario
Compartir con otras webs

Me da la impresión que se llena alguna pila de eventos de tanto Unload Me y .Show.

Prueba añadiendo la sentencia DoEvents después de cada Unload Me, a ver si se soluciona.

Lo suyo sería hacerlo todo en un único formulario a base de motrar/ocultar frames.

Mañana si tengo un hueco te subo un ejemplo de lo que quiero decir, mientras, prueba lo que te he comentado.

Enlace a comentario
Compartir con otras webs

Hola, creo que la falla es por el abuso de Unload Me y .Show como dice Antoni, entonces te recomiendo que en vez de cerrar y volver a abrir los formularios, solo escóndelos con MiFormulario.Hide y lo vuelves a mostrar con .Show.

Ya cuando no los utilices entonces usa Unload Me.

Saludos.

Enlace a comentario
Compartir con otras webs

Hace 35 minutos , Antoni dijo:

Me da la impresión que se llena alguna pila de eventos de tanto Unload Me y .Show.

Prueba añadiendo la sentencia DoEvents después de cada Unload Me, a ver si se soluciona.

Lo suyo sería hacerlo todo en un único formulario a base de motrar/ocultar frames.

Mañana si tengo un hueco te subo un ejemplo de lo que quiero decir, mientras, prueba lo que te he comentado.

He probado con DoEvents y sigue fallando. Si me mandas algo perfecto, de todos modos buscare tambien sobre mostrar/ocultar frames. Gracias Antoni.

Enlace a comentario
Compartir con otras webs

Hace 11 minutos , Leopoldo Blancas dijo:

Hola, creo que la falla es por el abuso de Unload Me y .Show como dice Antoni, entonces te recomiendo que en vez de cerrar y volver a abrir los formularios, solo escóndelos con MiFormulario.Hide y lo vuelves a mostrar con .Show.

Ya cuando no los utilices entonces usa Unload Me.

Saludos.

Me pongo a revisar donde necesito cada y pruebo. Gracias Leopoldo!

Enlace a comentario
Compartir con otras webs

Hola, 

Ya me di cuenta que tienes un "Revoltijo" de "formulario_contar.Show" y UnLoad.Me....

1.- Lamas a formulario_contar.Show...

2.- Cierras a formulario_contar y abres Stock

3.- En Activate de Stock otra vez contar.show

4.- Después en el botón otra vez contar.Show.....como 3 veces???

 

Mira la lógica para programar es que no abras y/o cierres y/o llames a los formularios como si fueran Variables, Los Formularios solo se Abren una vez y si quieres abrir otro formulario y que no se vea el de atrás con HIDE lo ocultas y con SHOW lo muestras...

Solo tienes que llamarlos cuando tengas que presentar el formulario en pantalla...

Saludos.

 

 

Enlace a comentario
Compartir con otras webs

Hace 1 hora, Antoni dijo:

Ya está revisado, salvo error u omisión, el formulario adjunto es la fusión de todos los demás. ?

Contar2.xlsm 64 kB · 0 descargas

Mil Gracias Antoni. De momento ya es bastante mas funcional y rapido. Y llevo toda la mañana desde tu ejemplo revisando como funcionan los marcos y es un gusto. Ya he corregido otro archivo que tenia similar. En cuanto confirme que funciona lo doy por resuelto.

Enlace a comentario
Compartir con otras webs

Hace 8 horas, edu_hoyos dijo:

ME ha pasado ya dos veces que al moverlos se mete uno dentro de otro

Siempre ha pasado eso, son muy "quisquillosos" los Frame, no hay nada como hacer un diseño a Lapiz y ya después lo Dibujas con VBA, para no estar moviendo Frames y controles... se vuelve incontrolables...

Saludos.

Enlace a comentario
Compartir con otras webs

La idea de juntar todos los formularios en uno era buena, la forma de llevarla cabo, no, mis disculpas por ello.

La utilización de frames por si sola es engorrosa, la solución correcta es sustituirlos o combinarlos con un control multipage.

Prueba todo el circuito por si he cometido algún error a la hora de mostrar los distintos "formularios".

Contar2 (2).xlsm

Enlace a comentario
Compartir con otras webs

Cita

La idea de juntar todos los formularios en uno era buena, la forma de llevarla cabo, no, mis disculpas por ello.

La utilización de frames por si sola es engorrosa, la solución correcta es sustituirlos o combinarlos con un control multipage.

Prueba todo el circuito por si he cometido algún error a la hora de mostrar los distintos "formularios".

 

Adjunto de nuevo el archivo con una ligera corrección.

Contar2 (2).xlsm

Enlace a comentario
Compartir con otras webs

Hola edu_hoyos,

Lo que tratas de hacer con varios formularios para mi es engorroso, a lo mejor al principio que programaba lo hacia así pero, con la experiencia que fui adquiriendo con un solo formulario Basta y Sobra, ya que, como lo tienes, de un formulario a otro ya no sabes en donde estas parado... es mejor tener todos los datos involucrados en un solo formulario... todo a la vista...!!!

Saludos.

Enlace a comentario
Compartir con otras webs

Hace 17 horas, Leopoldo Blancas dijo:

Hola edu_hoyos,

Lo que tratas de hacer con varios formularios para mi es engorroso, a lo mejor al principio que programaba lo hacia así pero, con la experiencia que fui adquiriendo con un solo formulario Basta y Sobra, ya que, como lo tienes, de un formulario a otro ya no sabes en donde estas parado... es mejor tener todos los datos involucrados en un solo formulario... todo a la vista...!!!

Saludos.

¿Antes de contestar te molestas en leer las respuestas anteriores? porqué a esa conclusión ya se llegó el 24 de noviembre y ya se han dado varias soluciones en ese sentido. 

Enlace a comentario
Compartir con otras webs

Hace 7 horas, Antoni dijo:

¿Antes de contestar te molestas en leer las respuestas anteriores? porqué a esa conclusión ya se llegó el 24 de noviembre y ya se han dado varias soluciones en ese sentido. 

Ya no me regañes y menos en Público...???

Pues si lo leí en su momento... pero como ya pasaron días ya no me acorde...contesto a lo último que veo... por eso opine así... 

Saludos...

 

Enlace a comentario
Compartir con otras webs

Hace 26 minutos , Leopoldo Blancas dijo:

Ya no me regañes y menos en Público...???

Pues si lo leí en su momento... pero como ya pasaron días ya no me acorde...contesto a lo último que veo... por eso opine así... 

Saludos...

 

!Vamos hombre! no llores más, que sabes que en el fondo te quiero. ???

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 97 ¿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

    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
  • 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.