¿Cómo puedo crear un proceso que se ejecute en una hebra separada en MS Access VBA? Me gustaría crear un proceso que simplemente se siente y espere un mensaje.VBA + Hilos en MS Access
Respuesta
Buena pregunta, pero creo que no se puede hacer.
La manera más rápida que puedo pensar es crear un formulario y poner un control existente o hágalo usted mismo en él.
No hay forma de hacerlo directamente en VBA. Here is a MSDN forum discussion hablando de esto en detalle. Office nunca expuso ninguna de las extensiones VBA para multihilo.
Sin embargo, puede hacer esto llamando a la API de Windows o creando su propio objeto COM en VBA (escrito en otro lugar) que realiza las llamadas multiproceso para usted. Solo asegúrate de ordenar todo de nuevo al hilo de llamada, de alguna manera (probablemente sondeando contra tu objeto COM, o algo similar).
Además, es posible que desee comprobar el enlace de bendewey en COM roscado, ya que es muy relevante para esto.
Si MS Access VBA le permite usar formularios, coloque un temporizador en un formulario y establezca el retraso en un valor realmente bajo, como 10 ms. A continuación, coloque el código en la función de evento del temporizador y se ejecutará en un hilo separado.
¿Qué tal usar algo como ShellOpen() para iniciar un script de shell, por ejemplo Visual Basic Script x veces, que hará el trabajo, comunicándose con el script a través de un archivo (y un mecanismo de agrupamiento para detectar cuándo llegan los resultados)? Creo que es más fácil de hacer que escribir un componente COM. Además, VB Script es muy similar a VBA. Los lados malos son bastantes, aunque escribir y leer un archivo consume más tiempo que compartir memoria, la agrupación puede hacer que el script VBA parezca no responder, etc.
También puede usar el procedimiento DoEvents que permite que el sistema maneje el archivo eventos. Simplemente llame a este sub de vez en cuando y el hilo principal no se congelará.
No es una buena solución, es malo, realmente malo – Onkelborg
¿Y por qué es una mala solución? He usado este enfoque en mi script y funcionó bien. Acabo de llamar a DoEvents en un intervalo de 1000 ms o un segundo. – Ionut
Bueno, funcionó, pero eso es todo. Una interfaz que responde a los mensajes una vez por segundo no responde. Y es una mala práctica tener un código de ejecución de programa solo para sondeo. Empujar es mejor dejar que el programa duerma cuando no ocurre nada. Otros programas se benefician de esta causa, y están ocurriendo menos cambios de contexto, y el consumo de energía disminuye. Si realmente, realmente tiene que hacer un sondeo, no utilice el enfoque DoEvents, use un temporizador al menos, no estropeará su cola de mensajes y hará que su aplicación no responda – Onkelborg
Es posible que desee echa un vistazo a esta solución: http://www.excelhero.com/blog/2010/05/multi-threaded-vba.html
Es Excel, pero debe ser prácticamente la misma. Funciona mediante la construcción de "agentes" de VBScript y hacer que se ejecuten las tareas .. Comprobar el ejemplo, es bastante impresionante
-Viggo
- 1. MS Access sin VBA?
- 2. Expresiones regulares en MS Access VBA?
- 3. MS-Access, VBA y manejo de errores
- 4. MS Access prepara declaraciones
- 5. MS Access: ejecuta una consulta guardada por nombre en VBA
- 6. VBA: Cómo ejecutar otra aplicación desde MS Access
- 7. ¿Por qué mi VBA para MS Access es Buggy?
- 8. Autonumérico valor de la última fila insertada - MS Access/VBA
- 9. ComboBox.value en Access VBA
- 10. MS Access trigger?
- 11. ¿Tenemos transacciones en MS-Access?
- 12. MS Access Propiedades
- 13. Nhibernate y MS Access
- 14. Uso de Like * Funciona en MS-Access pero no en VBA
- 15. Cómo establecer el foco en cualquier objeto en MS Access usando VBA
- 16. Proporcionar ayuda en forma en MS Access
- 17. hoja de cálculo de Excel de consulta en MS-Access VBA (utilizando conjunto de registros ADODB)
- 18. MS Access: cómo compactar la base de datos actual en VBA
- 19. ¿Hay alguna manera de tomar una captura de pantalla en MS-Access con vba?
- 20. Revertir actualización SQL varias consultas en MS Access
- 21. ¿Cómo usar la base de datos SQLite desde MS Access?
- 22. MS Access 2007 JOIN en múltiples campos
- 23. Recuperar datos URL JSON en MS Access
- 24. Crear procedimiento almacenado en MS Access?
- 25. Pasar parámetros entre formularios en MS Access
- 26. Seleccionar registros omitiendo filas en MS Access
- 27. Crear vista en MS Access 2007
- 28. Creación de cadenas SQL en Access/VBA
- 29. VBA para la palabra MS
- 30. ¿Por qué clonar un conjunto de registros MS-Access?
1: correcto. Puede escribir un componente multiproceso (o usar uno existente) y llamarlo desde VBA, pero VBA no es multiproceso. – Joe