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

#16 Héctor Miguel
13/03/2007 - 20:22 | Informe spam
hola, María !

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 gustaria que cuando meta la contrase#a, si es posible no salga la nota de aviso
solo quiero que a los 10' se desconecte y ya esta.



=> si el caso o la 'necesidad' es asi de 'sencilla'...
[simplemente cerrar el libro 10 minutos despues de abierto SIN importar si el usuario necesita mas tiempo] -???-

1) copia lo siguiente en el modulo de codigo de tu libro [ThisWorkbook]
Private Sub Workbook_Open()
Application.OnTime Now + TimeSerial(0, 10, 0), "CierraLibro"
End Sub

2) copia lo siguiente en un modulo de codigo 'estandar/general/normal'
Option Private Module
Sub CierraLibro()
ThisWorkbook.Close True
End Sub

3.. Te acuerdas la macro que tenia 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 porque se que es ir para atras de nuevo.



=> 'aqui'... el detalle es que en la propuesta 'original'... se establece el valor de la variable 'UsuarioActual'...
-> durante la apertura del libro [en el evento '_open'] inmediatamente despues de introducida la contrase#a...
-> NO... 'cada vez' que llames al procedimiento del archivo de texto <= OJO
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

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#17 María
13/03/2007 - 23:28 | Informe spam
Bueno "Hector Miguel"
Con respecto al punto 3º, después de revisar, revisar y revisar donde estaba
el fallo, por fín lo encontré.
Lo del módulo del código del libro lo tenía todo ok.

Pero en en módulo normal, fijate lo que era

En la parte de:
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



Fijate yo tenía UsuarioActual = Usuarios(Sig) y era Usuarios(Sig) =
UsuarioActual
Así que esa parte, por fín, ha quedado solucionada.

Al resto ya le hecho un ojito mañana.

Un millón de gracias de nuevo y ya te contaré.
El mejor de mis saludos
"Héctor Miguel" escribió:

hola, María !

> 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 gustaria que cuando meta la contrase#a, si es posible no salga la nota de aviso
> solo quiero que a los 10' se desconecte y ya esta.

=> si el caso o la 'necesidad' es asi de 'sencilla'...
[simplemente cerrar el libro 10 minutos despues de abierto SIN importar si el usuario necesita mas tiempo] -???-

1) copia lo siguiente en el modulo de codigo de tu libro [ThisWorkbook]
Private Sub Workbook_Open()
Application.OnTime Now + TimeSerial(0, 10, 0), "CierraLibro"
End Sub

2) copia lo siguiente en un modulo de codigo 'estandar/general/normal'
Option Private Module
Sub CierraLibro()
ThisWorkbook.Close True
End Sub

> 3.. Te acuerdas la macro que tenia 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 porque se que es ir para atras de nuevo.

=> 'aqui'... el detalle es que en la propuesta 'original'... se establece el valor de la variable 'UsuarioActual'...
-> durante la apertura del libro [en el evento '_open'] inmediatamente despues de introducida la contrase#a...
-> NO... 'cada vez' que llames al procedimiento del archivo de texto <= OJO
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

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



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

Con respecto al punto 3, despues de revisar, revisar y revisar donde estaba el fallo, por fin lo encontre.
Lo del modulo del codigo del libro lo tenia todo ok. Pero en en modulo normal, fijate lo que era
En la parte de:
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


Fijate yo tenia UsuarioActual = Usuarios(Sig) y era Usuarios(Sig) = UsuarioActual
Asi que esa parte, por fin, ha quedado solucionada...



despues que revises/analices/compruebes/... [nuevamente o algunas veces mas]...
veras que no es lo mismo... 'machacar' la instruccion: -> Usuarios(Sig) = UsuarioActual
-> en cada ocasion que 'llamas' al procedimiento -> Sub abrir(usuario)
-> que dejarla una sola vez en el evento '_open' al abrirse el libro :))

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida