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

#1 Francisco Parrilla
09/03/2007 - 21:39 | Informe spam
Mas tarde vemos el asunto voy de salida.

Revisa el otro post y comentas.
Saludos


Atte.
?T Francisco T?
http://groups.msn.com/ExcelVbaMacrosOffice

El verdadero buscador crece y aprende, y descubre que siempre es el
principal responsable de lo que sucede.
Jorge Bucay

La oscuridad nos envuelve a todos, pero mientras el sabio tropieza en alguna
pared, el ignorante permanece tranquilo en el centro de la estancia.
Anatole France
Respuesta Responder a este mensaje
#2 María
10/03/2007 - 13:15 | Informe spam
Ya sabes que a veces uno tiene ideas en la cabeza y luego según las
posibilidades uno hace unas cosas u otras, dependiendo de lo que uno vaya
consiguiendo, en fín. debo tener el día filosófico

Bien, moviéndonos en el terreno de lo concreto, lo único que quiero es
controlar un poco el acceso a una tabla de EXCEL a la que tienen que acceder
unas 20 personas, el problema está en que a veces se hacen cambios indebidos
y no hay manera de saber quién los hizo, es simplemente para control de
calidad.

Con lo hecho hasta ahora se acerca bastante, el único fallo que veo es que
cualquiera puede poner cualquier cosa y acceder al libro con cualquier
nombre, así que si alguien cambia su nombre de usuario no se podría
identificar.

No sólo es encontrar la solución informática, sino también encontrar la
manera más ágil y efectiva a la hora de trabajar.

Espero que con este "cacho rollo" que te he metido logres hacerte una idea
de lo que quiero, cuando te digo que "revises la macro para ver si se te
ocurre algo mejor".

Desgraciadamente mi visión para encontrar soluciones es corta porque mis
conocimientos informáticos son cortos.

Muchisísimas gracias de nuevo por compartir tus conocimientos


"Francisco Parrilla" escribió:

Mas tarde vemos el asunto voy de salida.

Revisa el otro post y comentas.
Saludos


Atte.
?T Francisco T?
http://groups.msn.com/ExcelVbaMacrosOffice

El verdadero buscador crece y aprende, y descubre que siempre es el
principal responsable de lo que sucede.
Jorge Bucay

La oscuridad nos envuelve a todos, pero mientras el sabio tropieza en alguna
pared, el ignorante permanece tranquilo en el centro de la estancia.
Anatole France



Respuesta Responder a este mensaje
#3 Héctor Miguel
10/03/2007 - 22:51 | Informe spam
hola, María !

... lo unico que quiero es controlar un poco el acceso a una tabla de EXCEL a la que tienen que acceder unas 20 personas
el problema esta en que a veces se hacen cambios indebidos y no hay manera de saber quien los hizo
es simplemente para control de calidad.
Con lo hecho hasta ahora se acerca bastante
el unico fallo que veo es que cualquiera puede poner cualquier cosa y acceder al libro con cualquier nombre
asi que si alguien cambia su nombre de usuario no se podria identificar.
No solo es encontrar la solucion informatica, sino tambien encontrar la manera mas agil y efectiva a la hora de trabajar...



[en tanto regresa Francisco para exponer otras alternativas de solucion]...
lo que se me ocurre es que al abrir el libro [en el evento '_open'] solicites una 'clave' [que]...
a traves de unas variables publicas estaran 'casadas' entre si ->claves con nombres<- por 'posicion'] y...
posteriormente hagas uso de otra variable [p.e. 'UsuarioActual'] para su identificacion en los reportes.
[obviamente] habria que asegurarse de los siguientes 'detalles' [y probablemente otros] -?-
a) el libro debera ser abierto 'CON permiso de usar macros' Y PROTEGIDO el proyecto [vba]
b) deberas proporcionar -> a cada usuario... -> 'su' clave 'correspondiente'
[bajo conocimiento/advertencia/... de que su clave debera mantenerla 'confidencial'] -?-
y si no queres que se 'vea' la clave cuando la indica el usuario... habria que cambiar al uso de formularios [p.e.]
un formulario con SOLO un control de cuadro de texto en cuyas propiedades establezcas su 'PassWordChar' en... * -???-

te expongo unas instrucciones [de ejemplo] al final...
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.

en el modulo de codigo del libro ==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
UsuarioActual = Usuarios(Sig)
Validado = True
Exit For
End If: Next: End If
If Not Validado Then Me.Close False
End Sub
en un modulo de codigo 'normal' ==Option Private Module
Public Claves, Usuarios, UsuarioActual As String
Sub InicializaVariables()
Claves = Array("Master Key", "001", "aBc", "Subordinado")
Usuarios = Array("María", "Usuario 1", "Usuario 2", "Usuario 3")
End Sub
Sub OtrosProcesos()
MsgBox "Hola... " & UsuarioActual
End Sub
Respuesta Responder a este mensaje
#4 María
11/03/2007 - 13:59 | Informe spam
Hola "Héctor Miguel" gracias a tí también.
Bueno he probado con tus instrucciones pero al ejecutar la macro me sale que
se ha produccido el error "13" en tiempo de ejecución.
No coinciden los tipos.
Si le doy a depurar sale señalado en amarillo For sig = " " to " "
Bien te escribo las instrucciones tal cómo las he puesto.

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 = "" To ""
If Acceso = "Master Key, 001, aBc, Subordinado" 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 un módulo puse

Sub InicializaVariables()
Claves = Array("Master Key", "001", "aBc", "Subordinado")
Usuarios = Array("María", "Laura", "Pilar", "German")
End Sub
Sub OtrosProcesos()
MsgBox "Hola... " & UsuarioActual
End Sub


Sub abrir(usuario)

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

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
No sé lo que tengo que poner exactamente para que funcione.
Gracias de nuevo por tu amabilidad
Respuesta Responder a este mensaje
#5 Ivan
11/03/2007 - 14:38 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida