No abrir dos o más veces un archivo mde

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
1
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
Creo que todo lo que necesitas lo tienes en esta excelente página web;
http://www.mvp-access.com/juanmafan/api/previnstance.htm
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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas