No le recomendaría a nadie desarrollar en VBA, que está descontinuado hace muchos años, pero supongamos que ya tienes las rutinas en autolisp y solo sabes programar en vba.
Luego, la respuesta más lógica es simplemente que se ocultó el diálogo y la solución ya la dio Speedcad, mostrarlo de nuevo con un show. Así que si eso no funciona supondremos que hay un bug o comportamiento inesperado que corregir en la lógica del programa
En ese caso, la respuesta en realidad puede ser muy amplia. Habría que ver los códigos para comprender que es lo que está pasando. Además con sinceridad nunca he interactuado entre los dos lenguajes, así que te hablo desde el conocimiento teórico, sin experiencia, aunque si tienes un código de ejemplo podemos hacer las pruebas del caso
Básicamente las rutinas en autolisp se comportan como módulos VBA, cuando las invocas van a realizar un proceso, a retornar un valor de respuesta y devolverle el control a quien las invoca. En este caso a la rutina VBA.
Siempre es un juego de pasarse el control. Para que suceda un problema así se me ocurre que tiene que pasar una de dos cosas: un error (por ejemplo que el usuario presione escape durante su interacción con la rutina - lo cual se corrige con una función de manejo de errores que retorne al programa invocador) o que la rutina lisp que recibió el control desde el VBA se lo ceda a la vez a un tercer elemento (como el command de AutoCad), porque en este último caso perdemos el control, que sale del evaluador lisp y cada comando tiene sus particularidades.
En mi caso tengo por norma, salvo casos extremos, no usar las funciones "command" y "vl-cmdf" de autolisp, que son las únicas que ceden el control al sistema de comandos. Cuando tengo que dibujar o editar lo hago directamente en la base de datos.
De nuevo supongamos que es inevitable que uses un command en una rutina. Además del manejo de errores para atajar cualquier "escape" o la prohibición al usuario de aplicarlo, podríamos agregar a las rutinas una llamada de vuelta al módulo de vba que la invocó. Sería algo parecido a cuando sales de un cuadro de diálogo en DCL para que el usuario interactúe en la pantalla y luego debes volver: respaldar variables, salir de una rutina llamando a la otra, y al final de esta otra llamar a la anterior y restaurar en ella las variables respaldadas.
No sé si te es de ayuda. Si tienes algún caso que no aplica nada de esto te ofrezco que revisemos tu código para detectar el problema e idear la solución
Saludos y feliz 2020