Al consultar se ejecuta la macro

Hola;
Tengo un libro con dos hojas, en una de ellas el numero de documento y la fecha que se actualizan cada vez que se abre el documento. En la otra hay un formulario que se rellena con datos. Al salir se guarda todo el libro en un directorio especifico con el número de una celda y el nombre del libro. De este modo cuando quiero consultar solo tengo que abrir el documento por su numero. El problema es que al abrir el documento guardado se ejecutan de nuevo las macros y crea un documento nuevo con una nueva fecha. ¿Cómo puedo hacer para que esto no ocurra y me permita solo consultar el documento?
Private Sub Workbook_Open()
Call SSub numfac0()
ActiveSheet.Unprotect "clave-1"
x=Hoja2.Range("D9")
Range("D9").Value=((x+a)
ActiveSheet.Protect "(clave-1")
ActiveWorkbook.Save
Application.DisplayAlerts=False
End Sub
Call guardar
Sub guardar()
ActiveWorkbook.SaveAs
ActiveSheet.Protecte "clave-1"
End Sub
Private Sub Workbook_BeforeClose (Cancel As Boolean)
Call guardarComo
Sub guuardarComo()
ruta="C:\Documents and settings\JoTer\Escritorio\Avis\Avis"
ruta=ruta&ActiveSheet.Cells(9,4). Value
ActiveWorkbook.SaveAs Filename:=ruta
End Sub

2 Respuestas

Respuesta
1
Se me ocurre que lo abras sin activar las macros, o de lo contrario y por mayor seguridad, que coloques la consulta en la rutina de apertura.
Algo así:
Private Sub Workbook_Open....................
sino = InputBox("¿Deseas consultar solamente?", vbquestion+vbyesno)
if sino vbyes then exit sub     'si respondes que si no se ejecutará el resto
'y aquí todo el resto que ya tenés.
End Sub
Si la variable sino se guarda en un módulo como pública (al inicio del módulo colocá:
Public sino
entonces podés consultar x ella también al cierre (BeforeClose) y optar por no guardarlo
Private Sub Workbook_BeforeClose..........
if sino = vbyes then exit sub
'y aquí el resto de tus líneas
End Sub
Si esto resolvió tu problema, no olvides finalizar la consulta.
Antes de nada, darte las gracias por tu ayuda.
He realizado lo que propones.
Al iniciar, me pregunta si quiero consultar pero no actúa según la opción deseada, de hecho, se ejecutan igualmente las macros, ¿qué he hecho mal?
Private Sub Workbook_Open()
sino = InputBox(" Deseas consultar solamente?", vbquestion+vbYesNo)
if sino = vbYes then exit sub
Call Sub numfac()
End Sub 
Y todo el resto...
Efectivamente no actúa si la respuesta es Si, al contrario, deja de ejecutarse el resto de las líneas, que en tu caso es la subrutina Sub numfac
Esto en el evento Open.
En el evento Private Sub Before_Close (..............)
if sino = vbyes then exit sub   'lo que hará es que no se ejecute lo que sigue
call guardar como
End sub
Y no olvides de insertar un módulo (o utilizar alguno de los que ya tengas, y allí escribir como primer línea lo siguiente:
Public sino
Nota: no se si se deberá a un error de copiado pero las rutinas originales no están del todo bien . Por ej: dentro del Private Sub Before_Close no puede ir otro Sub guardar como... si no te queda claro enviame tu libro al correo que encontrarás en mi sitio.
Sdos
Si aún no lo resolviste enviame tu hoja así finalizamos el tema.
Sdos
Elsa
Mil disculpas.... te indiqué InputBox cuando debe ser MsgBox
Aquí van las 2 rutinas ajustadas. A la 2da le agregué la instrucción que cierre sin guardar, pero es opcional, lo dejo a tu criterio.
Ya te estoy enviando tu archivo con el ajuste
Gracias Elsa,
Es justo lo que quería, creo que voy a usar también la seguanda rutina.
Claro que, como dicen, cuando más tienes más quieres,... y me pregunto si no seria muy complicado que al escoger" No", me pregunte una clave para asegurar que nadie realice un estropicio en el documento.
Otra vez gracias.
Reemplazá la del Open por esta otra. Ahora sí utilizamos un InputBox ;)
Lo que hace es darle 3 oportunidades al usuario, si no ingresa 1 clave correcta se cerrará el libro.
Public Sub Workbook_Open()
sino = MsgBox("¿Deseas consultar solamente?", vbQuestion + vbYesNo)
If sino = vbYes Then Exit Sub
i = 1
Do While i <= 3
cla = InputBox("Ingresa clave de acceso", "Autorización")
If cla = Sheets(1).Range("L1") Then    'ajustar ubicación de la clave
Exit Do
End If
i = i + 1
Loop
If i > 3 Then
MsgBox "No estás autorizado para esta tarea"
ActiveWorkbook.Close False
Exit Sub
End If
Call numfac0
Respuesta
1
Aquí me encontré algo para que lo analices y ver si lo puedes adaptar a tus necesidades.
En el siguiente ejemplo se comprueba la propiedad Enabled para determinar si los permisos están restringidos en el documento activo.
Dim irmPermission As Office.Permission
Set irmPermission = ActiveWorkbook.Permission
Select Case irmPermission.Enabled
Case True
MsgBox "Permissions are restricted on this document." & vbCrLf & _
"There are " & irmPermission.Count & " users with rights.", _
vbInformation + vbOKOnly, "IRM Information"
Case False
MsgBox "Permissions are NOT restricted on this document.", _
vbInformation + vbOKOnly, "IRM Information"
End Select
Set irmPermission = Nothing
[email protected]
Hola, Muchas gracias por tu tiempo.
¿No se podría incluir una presunta para consultar? Con una condicinal, ¿o algo parecido? Lo malo es que no se si es posible ni como debería hecerse.
¿Crees qué es posible?
Analiza el código y lo adaptas.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas