Formulario no cierra con "X" pero...

21/01/2008 - 08:16 por GRIEGO59 | Informe spam
Hola!
Tengo un formulario "Ventas" que no se cierra con "X", sino con un botón
"cerrar".
Con estos codigos que no se exactamente como funcionan:
Option Explicit
Private Sub cmdCerrar_Click()
Unload Me 'para cerrar el formulario
ActiveWorkbook.Save 'para grabar antes de cerrar el libro
ActiveWorkbook.Close 'para cerrar el libro al cerrar el formulario
End Sub

Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "Use el botón CERRAR del formulario", vbInformation, " Botón No
Disponible "
cancel = 1
CloseMode = 1
End If
End Sub

y en un módulo:
Sub Auto_open()
Load Clientes
Ventas.Show
End Sub

Me pareció bien que el formulario se activa automáticamente al abrir el
libro y al cerrar el formulario, se cierra tambien el libro de excel, de esta
forma el usuario tiene menos oportunidad de distraerse con la información de
las hojas.

Lo único malo es que al abrir el libro si no se habilitan las macros el
usuario tiene acceso a la información del libro, y si se habilitaran las
macros automáticamente al abrir el libro, entonces como podría luego yo tener
acceso a la información del libro.

Todas las hojas están protegidas y se protegen y desprotegen según las macros.

Si oculto las hojas, luego pueden mostrarse libremente por el usuario.

Darío

Preguntas similare

Leer las respuestas

#6 Ivan
28/01/2008 - 22:23 | Informe spam
hola Dario,

Pero siempre se cierra mi libro. No sé si tiene que ver el signo (-) delante
del serial.



aunque creo que ya anda de nuevo por aqui Hector y una vez mas solo
para que vayas viendolo echale un ojo a las posibilidades que ves
abajo, obra de ... quien va a ser, je, je,..

de todas formas, sin querer hablar mucho pues no lo tengo muy claro,
me da la impresion de que el uso de 'End' no es demasiado
recomendable. Posiblemente en ese punto deberias asegurarte de que se
cumplen las condiciones que hector te comenttaba a la hora de cerrar
el libo y cerrarlo con close, aun mas si luego te vas a '(des)cargar'
la aplicacion 'Excel' (ojo con los posibles destrozos a un posible
usuario 'torpe' pero no mal intencionado, creo que podrias hacerle una
picia si tiene otros libros abiertos sin guardar)

bueno, este es otro extracto de HM para obtener 'los' nros de serie:

'''****************************extracto respuesta de Hector Miguel
*******

hola, José !


... el codigo de Marco Barbosa... me arroja el numero: "1691898342"
... el codigo de Fernando Arroyo... me da un numero distinto... "3JV1K32T"
Cual es el correcto ? Porque obtengo datos diferentes" [...]




1) la informacion que necesitas la puedes encontrar en la MSDN / SDK
[que por cierto...
es mas amplia y basta que...] :D
visita como 'punto de arranque'... -> <A HREF="HTTP: 2mros"
target='"_blank">http://tinyurl.com/2mros [ademas de que
existen bastantes sitios con llamadas a las API's] ;)
[ahi podras consultar/obtener/probar/... con otro tipo de
propiedads para cada 'tipo'
de informacion]
[probablemente] tambien encontraras la -posible- 'causa' de los
errores, ya que los
WMI 'requieren' Win_NT/2000/XP :-(
2) el serial que devuelve la funcion que utliza WMI [Windows
Management Instrumentation]
-al navegar por la info anterior veras que...-
ES el numero con el cual ->el fabricante<- ha
'etiquetado' [fisicamente] la unidad
de almacenamiento [HD]
es decir... es el unico y 'verdadero' numero de serie: D
3) el serial que devuelve ->cualquier otro metodo/procedimiento/
llamada/API/...'<-
NO es 'permanente' -?-
es decir... cambia por cada vez que la unidad de almacenamiento 'pasa'
por un proceso
de 'preparacion' ->se le da formato<-: D
4) aunque se que sera mas que 'suficiente' informacion [NO la que te
'proveo' en este
mensaje, sino la que existe en la MSDN/SDK] :))
haz unas pruebas con los siguientes codigos de ejemplo ;)

si cualquier duda... comentas?
saludos,
hector.



'''== en un modulo de codigo 'normal' ==

Sub Unidad_Fisica()
' como 've' las unidades una pc con windows_NT/2000/XP como SO '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_DiskDrive")
MsgBox "Serie decimal: " & Disco.Signature & vbCr & _
"Serie Hexadecimal: " & Hex(Disco.Signature) & vbCr & _
"Fabricante: " & Disco.Manufacturer & vbCr & _
"Tipo de medio: " & StrConv(Disco.MediaType, vbProperCase) &
vbCr & _
"Modelo: " & Disco.Model & vbCr & _
"Nombre: " & Disco.Name & vbCr & _
"Identificador: " & Disco.Signature
Next
End With
End Sub



Sub Unidad_Logica()
' por cada unidad logica '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_LogicalDisk")
MsgBox "Unidad disco: " & Disco.Name & vbCr & _
"Serie logica: " & Disco.VolumeSerialNumber
Next
End With
End Sub




Sub Medio_Fisico()
' la 'etiqueta' que le pone el fabricante =>NO cambia<= al re/
formatear unidades '
Dim Disco As Object
With GetObject("WinMgmts:")
For Each Disco In .InstancesOf("Win32_PhysicalMedia")
MsgBox "Serie Fabrica: " &
Application.Trim(Disco.SerialNumber)
Next
End With
End Sub





Sub NumeroDeSerie()
' mismo numero de serie que Win32_LogicalDisk '
With CreateObject("Scripting.FileSystemObject")
MsgBox .GetDrive(.GetDriveName("C:")).SerialNumber & vbCr & _
Hex(.Drives.Item("C:").SerialNumber)
End With
End Sub

''*************************************

en cuanto a las otras dudas croe que sera mejor que se encargue el
propio Hectro. (para no liarte)

un saludo
Ivan
Respuesta Responder a este mensaje
#7 Héctor Miguel
29/01/2008 - 04:28 | Informe spam
hola, Darío !

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
DesHabilitarComandos
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
ReHabilitarComandos
End Sub

... copie el codigo y lo pegue en la hoja de codigo que se abre al hacer click en ThisWorkbook.
Pero al abrir el libro me da este: "Error de compilacion, no seha definido sub o function"
y sobre salta esta parte del codigo:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
DesHabilitarComandos

Supongo que estoy haciendo algo mal...



solo te hace falta definir (copiar/pegar) los procedimientos a que hacen referencia los eventos
-> DesHabilitarComandos
-> ReHabilitarComandos
mismos que se espera encontrar (de preferencia) en un modulo de codigo estandar/general/normal/... :D

saludos,
hector.
Respuesta Responder a este mensaje
#8 Héctor Miguel
29/01/2008 - 05:21 | Informe spam
hola, Darío !

'En ThisWorkBook Cierra el libro si el serial no coincide
Private Sub Workbook_Open()
Dim fs, d
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName("c:\")))
If d.serialnumber <> -455497706 Then:
End
Application.Quit
End Sub

Pero siempre se cierra mi libro. No se si tiene que ver el signo (-) delante del serial.
Ya intente sin escribir el (-) y usando el (-) del panel numerico y del alfabetico del teclado.
Que estoy haciendo mal?



(aparentemente) de donde (o como) copiaste el codigo, le hace falta completar instrucciones (If...End If) -?-
si ya estas seguro que el numero del serial "valido" es -455497707 (incluyendo el "menos" al inicio)...
prueba modificando la instruccion en el evento '_open' de tu libro +/- a lo siguiente:

Private Sub Workbook_Open()
With CreateObject("scripting.filesystemobject")
If .GetDrive(.GetDriveName("c:")).SerialNumber _
<> -455497707 Then ThisWorkbook.Close False
End With
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#9 GRIEGO59
07/02/2008 - 12:08 | Informe spam
Gracias a ambos por sus respuestas, me han sido me mucha ayuda.
Disculpen lo tarde.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida