Agradecimientos y una pregunta más

09/03/2007 - 18:48 por María | Informe spam
Bueno "Francisco Parrilla". Muchísimas gracias por tu ayuda. Coseguido que
quede registrado todos los cambios y con nombre de usuario.

Te voy a poner cómo quedó la macro:

En General
Sub abrir(usuario)

user = Range("I3")
fecha = Range("I2")

Open "D:.\dvd.txt" For Append As #1

Write #1, "Usuario:", user, "|", "Fecha:", fecha, "|", "Celdas modificadas",
"|", ActiveWindow.RangeSelection.Address
Close #1

End Sub


En Workbook
If respuesta = vbYes Then

user = InputBox("Usuario:")
Range("I3") = user

Else

ThisWorkbook.Close SaveChanges:=True

End If

If user = "" Then

MsgBox ("¿ME QUERÍAS ENGAÑARRRRRRRR?. ¡ADIOOOOSSS!")

ThisWorkbook.Close SaveChanges:=True

End If


End Sub


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Set WshNetwork = CreateObject("WScript.Network")
Call abrir(WshNetwork.UserName)
Set WshNetwork = Nothing

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Range("I3").ClearContents

End Sub

Esto ha quedado bastante bien pero aquí cualquiera pude poner un nombre de
usuario, ya me dirás si se puede mejorar.

Aunque mi idea inicial era que cuando abro la tabla de Excel me pida una
contraseña (pero que los distintos usuarios cada uno tuviera la suya) y que
si no meto esas contraseñas determinadas no pueda abrir la tabla de excel.
No sé si eso es factible o no

En cualquier caso gracias de nuevo, por dedicarme tu tiempo y encaminarme
las cosas tan divinamente porque esta vez me ha costado un poquito darme
cuenta de cómo iban. GRACIAS POR TODO

Preguntas similare

Leer las respuestas

#11 Ivan
11/03/2007 - 19:41 | Informe spam
hola de nuevo, Maria

echandole un ojo, y a la espera de los autores de las soluciones, creo
que solo tendrias que recuperar la variable 'UsuarioActual' dentro del
bucle de Open, tal y como te la ponia Hector ( y que en los codigos
que expones parece haber desaparecido), y cambiar en Sub Abrir esto:->

user = "Claves"



por esto->

user = UsuarioActual

sin las comillas.

de hecho, me da la impresion de que esta es una de las posibles
aplicaiones a las que se refiere HM con el procedimiento
"OtrosProcesos"

espero te ayude

un saludo
Ivan
Respuesta Responder a este mensaje
#12 Ivan
11/03/2007 - 19:54 | Informe spam
hola Hector Miguel,

hola, María ! [y gracias, Ivan] :



gracias a ti, he añadido esta posibilidad a las que estoy barajando en
mi proyecto.

y disculpa la intormision, incluida esta ultima (no habia visto este
mensaje) pero me parecian omisiones bastante palpables de unos codigos
que no tendrian porque fallar, y en cierta manera, era intentar
descargarte de un poco de 'labor'

lo dicho, gracias a ti y un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#13 María
11/03/2007 - 22:44 | Informe spam
Gracias a los dos por vuestra colaboración

Por si alguien le interesa la macro quedó como sigue y funciona
estupendamente.

Option Private Module
Public Claves, Usuarios, UsuarioActual As String

Sub InicializaVariables()
Claves = Array("Master Key", "001", "aBc", "Subordinado")
Usuarios = Array("María", "Martín", "Carlos", "Ana")
End Sub
Sub OtrosProcesos()
MsgBox "Hola... " & UsuarioActual
End Sub


Sub abrir(usuario)

UsuarioActual = Usuarios(Sig)

fecha = Range("I2")

Open "C:.\Generalidades organización\Registro.txt" For Append As #1

Write #1, "Usuario:", UsuarioActual, "|", "Fecha:", fecha, "|", "Celdas
modificadas", "|", ActiveWindow.RangeSelection.Address
Close #1
End Sub.

Tienes razón con lo que me expones
que pasa si quien loggea windows es Martín... pero quien esta modificando el
libro es Carlos ???

En un principio, se supone que cuando haces los cambios el libro, la
persona tiene que cerrar el libro, pero cómo ya comenté tengo que ir
tanteando lo que "a mí me parece" cuál es la mejor solución y luego ir
viendo donde están los puntos flacos

También tengo que sopesar que para que todo esto funcione, cuando se abra el
libro tenemos que pulsar Habilitar macro, pero si alguien elige desabilitar
macro automáticamente todo este trabajo que estamos haciendo no sirve para
nada. ¿Se puede hacer algo para que este cuadro de diálogo inicial no salga y
salga directamente : InputBox("Indicame por favor tu clave de acceso
CONFIDENCIAL !!!"

Si alguién se deja abierto el libro y viene otra persona detrás y hace algún
cambio en efecto va a quedar registrado la persona equivocada. ¿Se puede
hacer algo para que a los 10 minutos de no usarlo se cierre autómaticamente.

Hay unas celdas que sólo quiero cambiar de color y si las cambio necesito
que quedara registrado en él WordPade quién hizo esos cambios y veo qué no
los deja reflejados, en fín verás que eestoy llena de dudas y lagunas
informáticas

Pero voy poco a poco y por ahora con lo que conseguido me conformo.
El problema de esto ha sido que hace poco abrí una puerta inmensa que es el
Visual Basic, pero cómo no sé dependo mucho de este foro fantástico y tampoco
quiero abusar.

Veis que al final siempre son agradecimientos que van acompañados de más,
más y más preguntas

Así que os doy a todos las gracias por haberme dedicado este tiempo y haber
tenido tantísima paciencia

Un Saludo muy grande para todos ("Francisco Parrilla - Hector Iván -
Ivan")

"Ivan" escribió:

hola de nuevo, Maria

echandole un ojo, y a la espera de los autores de las soluciones, creo
que solo tendrias que recuperar la variable 'UsuarioActual' dentro del
bucle de Open, tal y como te la ponia Hector ( y que en los codigos
que expones parece haber desaparecido), y cambiar en Sub Abrir esto:->

> user = "Claves"

por esto->

user = UsuarioActual

sin las comillas.

de hecho, me da la impresion de que esta es una de las posibles
aplicaiones a las que se refiere HM con el procedimiento
"OtrosProcesos"

espero te ayude

un saludo para todos
Frrancisco Parrilla -


Respuesta Responder a este mensaje
#14 Héctor Miguel
13/03/2007 - 05:31 | Informe spam
hola, María !

__ 1 __
.. tengo que sopesar que para que todo esto funcione, cuando se abra el libro tenemos que pulsar Habilitar macro
pero si alguien elige desabilitar macro automaticamente todo este trabajo que estamos haciendo no sirve para nada.
Se puede hacer algo para que este cuadro de dialogo inicial no salga y salga directamente:
InputBox("Indicame por favor tu clave de acceso CONFIDENCIAL !!!"


__ 2 __
Si alguien se deja abierto el libro y... otra persona... hace algun cambio... va a quedar registrado la persona equivocada.
Se puede hacer algo para que a los 10 minutos de no usarlo se cierre automaticamente.


__ 3 __
Hay unas celdas que solo quiero cambiar de color y... necesito que quedara registrado... quien hizo esos cambios
y veo que no los deja reflejados, en fin veras que estoy llena de dudas y lagunas informaticas...



1) el habilitar [o no] el uso de macro de cualquier archivo al abrirse... es OPCIONAL para cada usuario/pc
lo que incluye la posibilidad de que el nivel de proteccion contra macros con -posibles- virus este en 'alto'
considera ademas la posibiidad de que 'corporativamente' no se de parmiso a libros con macros -?-
-> existen varias alternativas para 'procurar' que las macros sean habilitadas al abrir un libro...
[y 'otras tantas' para evitar que se activen los procesos que te vas inventando, sin mencionar la 'fuerza bruta'] :-((
-> prueba con [hojas de] macros del 'viejo' excel version 4... si las macros NO se habilitan... el libro [simplemente] no se abre ;)
claro, no es de las formas mas 'eficientes'... pero su -quizas- 'ventaja' principal, es que tampoco son muy conocidas/recordadas/... :))

2) al final te expongo un codigo de ejemplo para 'monitorear' por inactividad en tu libro y cerrarlo [si el usuario no 'responde'] :D

3) los cambios de formato [colores, bordes, tramas, etc.] no son [hasta la fecha] 'detectados' por ningun evento de la aplicacion
habria que desarrollar codigos que esten tambien 'monitoreando' estas [y quizas otras] acciones por parte del usuario :-((

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

es la forma mas 'delgada' [las menos lineas de codigo] que he podido 'imaginar' [hasta ahora]
lo que 'hace' es...
-> al abrir... 'le avisa' al usuario que este 'al pendiente' de un cierto tiempo de 'inactividad'
[usa un tipo de mensaje como el MsgBox pero... 'automatico' ->NO 'requiere' respuesta del usuario<-]
-> 'considera como actividad', cualquier cambio de celda/s en cualquier hoja
[usando el evento del libro 'Workbook_SheetSelectionChange']
[de pasadita... es un evento que tambien se re/dispara cuando se cambian valores a las celdas]
-> si no ha habido actividad, muestra un mensaje...
[tambien 'automatico' pero 'dandole la opcion' al usuario de 'regresar' a la actividad]

1) copia el codigo en los modulos 'indicados' ->de un libro nuevo<- [solo por si las dudas] :))
2) [usando cualquier nombre 'temporal'] ->graba<- el libro... ->cierralo<- y... abrelo de nuevo
3) una vez que consideres/modifiques a los tiempos 'apropiados' [y demas 'monerias']
-> lo 'instalas/aplicas/adaptas' a los libros donde lo necesitas.

en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_Open()
Permanecer = True: Mensaje_Inicial: ChecarActividad
End Sub
Private Sub Workbook_SheetSelectionChange( _
ByVal Sh As Object, ByVal Target As Range)
Permanecer = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Permanecer = False: Cerrando = True: ChecarActividad
End Sub
en un modulo de codigo 'normal' ==Option Private Module
Public Permanecer As Boolean, Cerrando As Boolean, Tiempo As Double
Public Const EstaMacro As String = "ChecarActividad"
Public Const Lapso As String = "0:00:15" ' <= para 10 minutos cambialo a: "0:10:00"
Public Const Espera As Long = 5 ' el tiempo en segundos que se espera el mensaje por una respuesta del usuario
Sub Mensaje_Inicial()
CreateObject("WScript.Shell").Popup _
"Este libro se monitorea por inactividad cada lapso de " & Lapso & vbCr & _
"Este aviso desaparecerá en " & Espera & " segundos...", Espera, "Mensaje temporal"
End Sub
Sub ChecarActividad()
If Cerrando Then GoTo Salir
If Not Permanecer Then Cerrar_O_No
Tiempo = Now + TimeValue(Lapso)
Salir:
On Error Resume Next
Application.OnTime _
EarliestTime:=Tiempo, _
Procedure:=EstaMacro, _
Schedule:=Permanecer
If Cerrando Then Exit Sub
If Not Permanecer _
Then ThisWorkbook.Close True _
Else Permanecer = False
End Sub
Sub Cerrar_O_No()
Select Case CreateObject("WScript.Shell").Popup( _
"Debo cerrar el archivo por inactividad." & vbCr & _
"Tienes " & Espera & " segundos para responder...", Espera, _
"Monitor de actividad...", 33)
Case -1, 1: Permanecer = False
Case 2: Permanecer = True
End Select
End Sub
Respuesta Responder a este mensaje
#15 María
13/03/2007 - 16:12 | Informe spam
Holo "Hector Miguel"
Sigues tan atento como siempre, gracias por todo.
Buenotres cositas
1ª En la macro que me acabas de poner al aceptar el segundo mensaje me sale
depurar macro y en amarillo Tiempo= Now + TimeValue(Lapso)

2ª Me gustaría que cuando meta la contraseña, si es posible no salga la nota
de aviso, sólo quiero que a los 10´se desconecte y ya está.

3º Te acuerdas la macro que tenía para que se escribiera los cambio en
documento Tx,
Sub InicializaVariables()
Claves = Array("Master Key", "001", "aBc", "Subordinado")
Usuarios = Array("María", "Martín", "Carlos", "Ana")
End Sub
Sub OtrosProcesos()
MsgBox "Hola... " & UsuarioActual
End Sub
Sub abrir(usuario)

UsuarioActual = Usuarios(Sig)

fecha = Range("I2")

Open "D: ..\Registro.txt" For Append As #1

Write #1, "Usuario:", UsuarioActual, "|", "Fecha:", fecha, "|", "Celdas
modificadas", "|", ActiveWindow.RangeSelection.Address
Close #1
End Sub

Bien me he dado cuenta que el registro que hace es siempre con el nombre de
María independientemente de la contraseña que le meta. Siento esto porqué sé
que es ir para atrás de nuevo.

No sé cómo darte las gracias de nuevo por todo el trabajo que te estoy dando

Un saludo enorme
"Héctor Miguel" escribió:

hola, María !

__ 1 __
> .. tengo que sopesar que para que todo esto funcione, cuando se abra el libro tenemos que pulsar Habilitar macro
> pero si alguien elige desabilitar macro automaticamente todo este trabajo que estamos haciendo no sirve para nada.
> Se puede hacer algo para que este cuadro de dialogo inicial no salga y salga directamente:
> InputBox("Indicame por favor tu clave de acceso CONFIDENCIAL !!!"
__ 2 __
> Si alguien se deja abierto el libro y... otra persona... hace algun cambio... va a quedar registrado la persona equivocada.
> Se puede hacer algo para que a los 10 minutos de no usarlo se cierre automaticamente.
__ 3 __
> Hay unas celdas que solo quiero cambiar de color y... necesito que quedara registrado... quien hizo esos cambios
> y veo que no los deja reflejados, en fin veras que estoy llena de dudas y lagunas informaticas...

1) el habilitar [o no] el uso de macro de cualquier archivo al abrirse... es OPCIONAL para cada usuario/pc
lo que incluye la posibilidad de que el nivel de proteccion contra macros con -posibles- virus este en 'alto'
considera ademas la posibiidad de que 'corporativamente' no se de parmiso a libros con macros -?-
-> existen varias alternativas para 'procurar' que las macros sean habilitadas al abrir un libro...
[y 'otras tantas' para evitar que se activen los procesos que te vas inventando, sin mencionar la 'fuerza bruta'] :-((
-> prueba con [hojas de] macros del 'viejo' excel version 4... si las macros NO se habilitan... el libro [simplemente] no se abre ;)
claro, no es de las formas mas 'eficientes'... pero su -quizas- 'ventaja' principal, es que tampoco son muy conocidas/recordadas/... :))

2) al final te expongo un codigo de ejemplo para 'monitorear' por inactividad en tu libro y cerrarlo [si el usuario no 'responde'] :D

3) los cambios de formato [colores, bordes, tramas, etc.] no son [hasta la fecha] 'detectados' por ningun evento de la aplicacion
habria que desarrollar codigos que esten tambien 'monitoreando' estas [y quizas otras] acciones por parte del usuario :-((

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

es la forma mas 'delgada' [las menos lineas de codigo] que he podido 'imaginar' [hasta ahora]
lo que 'hace' es...
-> al abrir... 'le avisa' al usuario que este 'al pendiente' de un cierto tiempo de 'inactividad'
[usa un tipo de mensaje como el MsgBox pero... 'automatico' ->NO 'requiere' respuesta del usuario<-]
-> 'considera como actividad', cualquier cambio de celda/s en cualquier hoja
[usando el evento del libro 'Workbook_SheetSelectionChange']
[de pasadita... es un evento que tambien se re/dispara cuando se cambian valores a las celdas]
-> si no ha habido actividad, muestra un mensaje...
[tambien 'automatico' pero 'dandole la opcion' al usuario de 'regresar' a la actividad]

1) copia el codigo en los modulos 'indicados' ->de un libro nuevo<- [solo por si las dudas] :))
2) [usando cualquier nombre 'temporal'] ->graba<- el libro... ->cierralo<- y... abrelo de nuevo
3) una vez que consideres/modifiques a los tiempos 'apropiados' [y demas 'monerias']
-> lo 'instalas/aplicas/adaptas' a los libros donde lo necesitas.

en el modulo de codigo del libro [ThisWorkbook] ==> Private Sub Workbook_Open()
Permanecer = True: Mensaje_Inicial: ChecarActividad
End Sub
Private Sub Workbook_SheetSelectionChange( _
ByVal Sh As Object, ByVal Target As Range)
Permanecer = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Permanecer = False: Cerrando = True: ChecarActividad
End Sub
en un modulo de codigo 'normal' ==> Option Private Module
Public Permanecer As Boolean, Cerrando As Boolean, Tiempo As Double
Public Const EstaMacro As String = "ChecarActividad"
Public Const Lapso As String = "0:00:15" ' <= para 10 minutos cambialo a: "0:10:00"
Public Const Espera As Long = 5 ' el tiempo en segundos que se espera el mensaje por una respuesta del usuario
Sub Mensaje_Inicial()
CreateObject("WScript.Shell").Popup _
"Este libro se monitorea por inactividad cada lapso de " & Lapso & vbCr & _
"Este aviso desaparecerá en " & Espera & " segundos...", Espera, "Mensaje temporal"
End Sub
Sub ChecarActividad()
If Cerrando Then GoTo Salir
If Not Permanecer Then Cerrar_O_No
Tiempo = Now + TimeValue(Lapso)
Salir:
On Error Resume Next
Application.OnTime _
EarliestTime:=Tiempo, _
Procedure:=EstaMacro, _
Schedule:=Permanecer
If Cerrando Then Exit Sub
If Not Permanecer _
Then ThisWorkbook.Close True _
Else Permanecer = False
End Sub
Sub Cerrar_O_No()
Select Case CreateObject("WScript.Shell").Popup( _
"Debo cerrar el archivo por inactividad." & vbCr & _
"Tienes " & Espera & " segundos para responder...", Espera, _
"Monitor de actividad...", 33)
Case -1, 1: Permanecer = False
Case 2: Permanecer = True
End Select
End Sub



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida