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

#6 María
11/03/2007 - 14:52 | Informe spam
Hola "Ivan", lo sé inicialmente probé con For Sig = LBound(Claves) To
UBound(Claves) , estuve haciendo varios cambios y se quedó con lo que mandé
previamente.
Pusiera lo que pusiera siempre me sale un error, en fín, que no he podido
dar con la instrucción adcuada

Gracias de todas maneras por contestar.


"Ivan" escribió:

hola, Maria

mientras vuelve Hector Miguel, revisa tu codigo y el suyo: ->

donde HM pone ->

For Sig = LBound(Claves) To UBound(Claves)

tu pones

For Sig = " " To " "

¿no sera eso?

un saludo
Ivan


Respuesta Responder a este mensaje
#7 Ivan
11/03/2007 - 16:15 | Informe spam
hola de nuevo Maria,

no me quiero meter demasiado, pues seguro que HM te lo resuelve mas
rapidamente (aprte de que el codigo en si mismo no lo he estudiasdo), pero a
simple vista, otra cosa que parece faltar en tu codigo es la declaracion
publica de las variable->

en un modulo de codigo 'normal' ==Option Private Module
Public Claves, Usuarios, UsuarioActual As String

lo mismo es simplemente una omision en tu transcripcion, pero por si acaso

un saludo de nuevo y disculpad la intromision
Ivan
Respuesta Responder a este mensaje
#8 María
11/03/2007 - 17:53 | Informe spam
Bien "Ivan" tenías razón, ha funcionado a la perfección. A la hora de
trascribirlo yo me lo dejé atrás. Te pongo cómo quedó porque cómo veo que
sabes quizás me puedas decir la ordén que me falta para que la contraseña o
el usuario que se ponga en el (InputBox("Indicame por favor tu clave de
acceso CONFIDENCIAL !!!")) se quede registrado en el archivo de texto:
En Thisworkbook:

rivate Sub Workbook_Open()
Dim Acceso As String, Sig As Integer, Validado As Boolean: InicializaVariables
Acceso = Trim(InputBox("Indicame por favor tu clave de acceso CONFIDENCIAL
!!!"))
If Acceso <> "" Then
For Sig = LBound(Claves) To UBound(Claves)
If Acceso = Claves(Sig) Then
Validado = True

Exit For
End If: Next: End If
If Not Validado Then Me.Close False
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



En Módulo
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)
fecha = Range("I2")
user = "Claves"
Open "C:.\Generalidades organización\Registro.txt" For Append As #1

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

Bueno pues en el archivo de texto lo que queda reflejado es lo siguiente
"Usuario:","Claves","|","Fecha:",#2007-03-11 17:43:36#,"|","Celdas
modificadas","|","$B$22".

Donde pone "Claves" me gustaría que pusiera la clave o el usuario (mejor
porque sería más fácil de identificar al usuario).

Si sabes bien sino yo lo seguiré intentando.

De todas maneras muchisisisimas gracias por la intrmisión
Un Saludo

"Ivan" escribió:

hola de nuevo Maria,

no me quiero meter demasiado, pues seguro que HM te lo resuelve mas
rapidamente (aprte de que el codigo en si mismo no lo he estudiasdo), pero a
simple vista, otra cosa que parece faltar en tu codigo es la declaracion
publica de las variable->

en un modulo de codigo 'normal' ==> Option Private Module
Public Claves, Usuarios, UsuarioActual As String

lo mismo es simplemente una omision en tu transcripcion, pero por si acaso

un saludo de nuevo y disculpad la intromision
Ivan



Respuesta Responder a este mensaje
#9 Ivan
11/03/2007 - 18:28 | Informe spam
hola Maria

cómo veo que
sabes quizás me puedas decir la orden que me falta para que la contraseña
o
el usuario que se ponga en el (InputBox("Indicame por favor tu clave de
acceso CONFIDENCIAL !!!")) se quede registrado en el archivo de texto



me temo que mis conocimientos son mas bien escasos, y en lo que se refiere a
transcribir a archivos de texto, todavía mas, pero estoy seguro que bien
Hector Miguel, bien Francisco, bien otro usuario del foro, te echaran una
mano a resolverlo, pues no parece implicar mayor problema

no obstante, alguien me dijo una vez que el guardar las contraseñas tal
cual, puede no ser una de las mejores ideas, sobre todo si alguien mas tiene
acceso a ese archivo de texto.

bueno, espero te completen la ayuda

un saludo
Ivan
Respuesta Responder a este mensaje
#10 Héctor Miguel
11/03/2007 - 19:31 | Informe spam
hola, María ! [y gracias, Ivan] :D

... la orden que me falta para que la contrase#a o el usuario que se ponga
en el (InputBox("Indicame por favor tu clave de acceso CONFIDENCIAL !!!"))
se quede registrado en el archivo de texto:



1) en el modulo de codigo 'estandar', se declaran 3 variables publicas:
2 de tipo 'variant' [Claves y Usuarios] que se 'rellenan' con la macro 'InicializaVariables'
1 de tipo 'string' [UsuarioActual] que es el 'Usuario/s' segun la clave dada en el inputbox en el evento '_open' del libro

2) cada clave [en el ejemplo]: Array("Master Key", "001", "aBc", "Subordinado") corresponde a:
un nombre en su misma posicion: Array("María", "Martín", "Carlos", "Ana")
se supone/espera/asume/... que cada usuario debe conocer 'su clave' y mantenerla 'con-fi-den-cial' :))

3) si en el inputbox [evento '_open'] se introduce como clave: aBc, el buce For Sig = LBound(Claves) To UBound(Claves)
-> SALE despues de asignar el nombre correspondiente [Carlos] a la variable 'UsuarioActual'
PERO... esta parte del ejemplo segun la propuesta inicial... -> UsuarioActual = Usuarios(Sig)
[como que] lo has dejado 'fuera' de toda consideracion en las macros que estas usando -???-

4) la 'llamada' que haces a la macro que abre y actualiza el archivo de texto... -> Call abrir(WshNetwork.UserName)
esta tomando el 'nombre del usuario' de los 'Scripting' del Shell de Windows [el usuario que se 'loggeo' la sesion de windows]
que pasa si quien loggea windows es Martín... pero quien esta modificando el libro es Carlos ???
-> necesitaras 'decidir' si 'controlas' al usuario por la sesion de windows... o por la clave dada al abrir el libro -?-

5) las 'asignaciones' que das a tus variables 'de pase' al archivo de texto... -> SON TEXTUALES... NO 'tomadas de las variables'
cuando asignas al 'user' dices: -> user = "Claves"
y deberias decirle al codigo: -> user = UsuarioActual
-> recuerda que UsuarioActual es el nombre que se corresponde con la clave 'dada' al abrir el libro
[claro... una vez que agregues la instruccion 'perdida' en el evento '_open' de tu libro] :))

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

__ los codigos expuestos __
En Thisworkbook:
Private Sub Workbook_Open()
Dim Acceso As String, Sig As Integer, Validado As Boolean: InicializaVariables
Acceso = Trim(InputBox("Indicame por favor tu clave de acceso CONFIDENCIAL !!!"))
If Acceso <> "" Then
For Sig = LBound(Claves) To UBound(Claves)
If Acceso = Claves(Sig) Then
Validado = True
Exit For
End If: Next: End If
If Not Validado Then Me.Close False
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
En Modulo
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)
fecha = Range("I2")
user = "Claves"
Open "C:.\Generalidades organizacion\Registro.txt" For Append As #1
Write #1, "Usuario:", user, "|", "Fecha:", fecha, "|", "Celdas modificadas", "|", ActiveWindow.RangeSelection.Address
Close #1
End Sub
Bueno pues en el archivo de texto lo que queda reflejado es lo siguiente
"Usuario:","Claves","|","Fecha:",#2007-03-11 17:43:36#,"|","Celdas modificadas","|","$B$22".
Donde pone "Claves" me gustaria que pusiera la clave o el usuario (mejor porque seria mas facil de identificar al usuario).
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida