En un archivo MDE no puedes modificar código, así que no puedes evitar esta situación. Si puedes modificar el MDB o indicar al poseedor del MDB que vuelva a generar el MDE con las modificaciones pertinentes, puedo darte algunas orientaciones más.
1 respuesta
Respuesta de soria4xse
1
1
soria4xse, Experto en Microsoft Access y SQL Server
Acabo de probarlo en una base de datos, solo he tenido que crear el lanzamiento tal como se muestra en sus instrucciones insertarndo un nuevo procedimiento dentro del modulo general, tal que así: Function fun_queNoDupliquesLeñe() If PrevInstance = True Then MsgBox "Ya existe una instancia de la base actual" DoCmd.Quit End If End Function Y luego crear el macro autoexec, con: Acción: ejecutar código Nombre de función: fun_queNoDupliquesLeñe ()
Hola: Tengo la siguiente situación: Estoy trabajando con un archivo de Access en formato mde. Cuando lo abro el icono me aparece en la barra de tareas y si vuelvo a abrirlo se me duplica y se me pone otro icono en la barra de tareas, es decir tengo el mismo archivo dos veces para trabajar con ellos. Yo necesito saber como hacer para que solamente me permita tener abierto una vez el archivo mde. Espero me puedas ayudar. Saludos Hector de Nicaragua
BUENO. Gracias por la aclaración. Si se puede hacer con un mdb esta bien. Espero me puedas ayudar. Saludes
Soy un poco nuevo en esto. Como se hace una macro autoexec. Yo en lo personal probé el código y no me sirve. Seguimos en contacto. Saludos
El código de la página es la pieza fundamental pero no funciona por si solo. La solución completa es: El código + la función extra que te he comentado (y el código de la página explica) + la macro autoexec (que no la explica la página) Ese conjunto completo a mi me funciona y a ti te funcionará, pero siempre que lo instales todo junto en la/s base/s de datos que no quieras repetir. Puedes probarlo también en una base de datos nueva en blanco. Hoy te muestro como hacerlo todo junto, desde el principio hasta el final, como si no hubiésemos hecho nada, paso a paso, tratando de facilitar al máximo de modo que a partir de aquí tienes explicaciones para hacerlo todo junto y con solo este mensaje : A) Hacer un nuevo módulo: A.1-Clic en ficha 'módulos' A.2-Clic en botón nuevo. Aparece una ventana de código A.3-Eliminar todo el código que aparezca ya escrito A.4-Copiar todo el código que sigue a continuación hasta el punto A.5 exclusive y pegarlo en la ventana vacía Option Compare Database Option Explicit ' Autor: Juan M. Afán de Ribera - Junio 2004 Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function GetWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" _ (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" _ (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Const GW_HWNDNEXT = 2& Private Const GW_CHILD = 5& Function PrevInstance() As Boolean Dim sODb1 As String, sODb2 As String, sClass As String Dim hwnd As Long sODb1 = ODbCaption(hWndAccessApp) hwnd = GetWindow(GetDesktopWindow, GW_CHILD) sClass = Space(255) Do If hwnd Then If hwnd <> hWndAccessApp Then Call GetClassName(hwnd, sClass, 255) If Trim(sClass) = "OMain" & vbNullChar Then sODb2 = ODbCaption(hwnd) If sODb2 = sODb1 Then PrevInstance = True Exit Function End If End If End If sClass = Space(255) hwnd = GetWindow(hwnd, GW_HWNDNEXT) Else Exit Do End If Loop End Function Function ODbCaption(hwnd As Long) As String Dim sODb As String Dim hMDi As Long, hODb As Long hMDi = FindWindowEx(hwnd, 0&, "MDIClient", vbNullString) hODb = FindWindowEx(hMDi, 0&, "ODb", vbNullString) sODb = String(255, " ") Call GetWindowText(hODb, sODb, 255) ODbCaption = Trim(sODb) End Function Function fun_queNoDupliquesLeñe() If PrevInstance = True Then MsgBox "Ya existe una instancia de la base actual" DoCmd.Quit End If End Function A.5-clic en botón guardar A.6-Aceptar el numbre de modulo que nos escriba access pulsando (intro) o haciendo clic en aceptar. B) Hacer un nuevo macro AutoExec. B.1-clic en Pestaña macros, B.2-clic en Botón nuevo macro. B.3-En acción escribir: ejecutar código (pulsar intro) B.4-En Nombre de función escribir: fun_queNoDupliquesLeñe () B.5-clic en Botón Guardar. B.6-En nombre de macro, borrar lo que aparezca y escribir autoexec (y pulsar intro o hacer clic en aceptar) Eso es todo.