Jump to content

Macro que registra usuarios que ocupan archivo


RORO1981

Recommended Posts

Amigos:

aqui les dejo una macro que cada vez que se abre registra el usuario la fecha y la hora de la persona que ocupa el archivo y lo guarda automaticamente es especial para archivos compartidos.

espero les sirva.. :mad::D:cool::D

saludos

Esta muy bueno, lo unico es que al estar bloqueada la hoja no puedo ver el nombre y la hora completos porque no esta autoajustada al mio que es largo, pero lo importante es lo que hace, si se agrega a este archivo un autoguardar para que en caso de que tengamos ese archivo en red y alguien entrara y abra el archivo se guarde automaticamente el dato y asi evita que cuando se cierre no pregunta si va a guardar (evitariamos que note que estamos grabando que alguien lo abrió) y en cierto modo no este visible la hoja.

Pero nada son ideas y si puedes aplicarla y subirla nuevamente resultaria muy importante.

Saludos,

Link to comment
Share on other sites

Ok le hice los cambios que me sugeriste DRAMIDOM y en cuanto a la opcion de autogardar el archivo si lo hace fijate bien despues de registrar el usuario con la fecha y hora respectiva..

ahh para ver el registro de los usuarios hay que poner visible la hoja 1 ya que se oculta automaticamente..

saludos y espero comentarios

Registra usuarios.zip

Link to comment
Share on other sites

Ok le hice los cambios que me sugeriste DRAMIDOM y en cuanto a la opcion de autogardar el archivo si lo hace fijate bien despues de registrar el usuario con la fecha y hora respectiva..

ahh para ver el registro de los usuarios hay que poner visible la hoja 1 ya que se oculta automaticamente..

saludos y espero comentarios

Acabo de ver pero no dio tiempo a ver el registro pues se oculta la hoja y/o elimina y pues no puedo volverla a mostrar. Ademas si preciono salir del excel me pregunta q si quiero guardar los cambios, la idea como mencione es q guarde y no pregunte (evitariamos que quien lo abrio sepa que estamos capturando quien abre el archivo y nota que pregunta sentira que hubo algun cambio

Link to comment
Share on other sites

Acabo de ver pero no dio tiempo a ver el registro pues se oculta la hoja y/o elimina y pues no puedo volverla a mostrar. Ademas si preciono salir del excel me pregunta q si quiero guardar los cambios, la idea como mencione es q guarde y no pregunte (evitariamos que quien lo abrio sepa que estamos capturando quien abre el archivo y nota que pregunta sentira que hubo algun cambio

listo ahora si hace un auto guardado automatico si entras y no haces ningun cambio y luego sales no te pregunta por los cambios

para ver la hoja debes ir al editor de visual basic posicionarte sobre la hoja oculta (en este caso la hoja1) y abajo en las propiedades de la hoja cambias la propiedad visible a xlsheetvisible (creo que es la primera).

la hoja no se eliminó solo está oculta ojo.

te adjunto archivo con modificacion

saludos

Registra usuarios.zip

Link to comment
Share on other sites

listo ahora si hace un auto guardado automatico si entras y no haces ningun cambio y luego sales no te pregunta por los cambios

para ver la hoja debes ir al editor de visual basic posicionarte sobre la hoja oculta (en este caso la hoja1) y abajo en las propiedades de la hoja cambias la propiedad visible a xlsheetvisible (creo que es la primera).

la hoja no se eliminó solo está oculta ojo.

te adjunto archivo con modificacion

saludos

Ok excelente ahora si va todo bien puede servir para mucho este archivo, solo habria que colocar en alguna hoja visible un boton o un codigo para llamar en una macro sin tener que entrar a la propiedades para que muestre la hoja oculta y con esa parte el archivo estaria estupendo puede servir para ver quienes son esos que abren nuestros archivos almacenados en la red jeje...

Link to comment
Share on other sites

Ok excelente ahora si va todo bien puede servir para mucho este archivo, solo habria que colocar en alguna hoja visible un boton o un codigo para llamar en una macro sin tener que entrar a la propiedades para que muestre la hoja oculta y con esa parte el archivo estaria estupendo puede servir para ver quienes son esos que abren nuestros archivos almacenados en la red jeje...

ok puse un boton en la hoja 2 que muestra el registro de los usuarios que han ocupado el archivo y otro en la hoja1 donde estan los registros para volver a ocultarlos...

espero los comentarios

saludos

Registra usuarios.zip

Link to comment
Share on other sites

ok puse un boton en la hoja 2 que muestra el registro de los usuarios que han ocupado el archivo y otro en la hoja1 donde estan los registros para volver a ocultarlos...

espero los comentarios

saludos

Ok RORO1981 Mucho mejor ahora mereces un 100 esto se podria mejorar mucho mas pero ya el cien lo mereces.

Se acabo aquellos que entran a nuestros archivos desde la red y piensan que no lo sabremos jeje. Claro esto dependera de ciertas cosas como por ejemplo que en cada maquina el administrador instalo el offices y no lo haya configurado a nombre de la empresa jeje, sino por los usuarios que la usan porque sino solo veremos horas y el mismo nombre de las maquinas sin saber cual fue la persona que entro, por eso mencione se puede mejor mucho mas aun, como por ejemplo numero de ip de red la maquina, etc.. etc..

Saludos,

Link to comment
Share on other sites

Ok RORO1981 Mucho mejor ahora mereces un 100 esto se podria mejorar mucho mas pero ya el cien lo mereces.

Se acabo aquellos que entran a nuestros archivos desde la red y piensan que no lo sabremos jeje. Claro esto dependera de ciertas cosas como por ejemplo que en cada maquina el administrador instalo el offices y no lo haya configurado a nombre de la empresa jeje, sino por los usuarios que la usan porque sino solo veremos horas y el mismo nombre de las maquinas sin saber cual fue la persona que entro, por eso mencione se puede mejor mucho mas aun, como por ejemplo numero de ip de red la maquina, etc.. etc..

Saludos,

Listo le incorporé al registro la dirección ip del pc que ocupa el archivo espero sea de utilidad

saludos....

Registra usuarios v2.zip

Link to comment
Share on other sites

Hola Roro, aqui te dejo dos funciones que hace lo mismo pero gastando menos codigo, creo que usas demasiadas funciones API que realmente no son necesarias

Sacar USERNAME:

    ' Makes sure all variables are dimensioned in each subroutine.
Option Explicit

' Access the GetUserNameA function in advapi32.dll and
' call the function GetUserName.
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

' Main routine to Dimension variables, retrieve user name
' and display answer.
Sub Get_User_Name()

' Dimension variables
Dim lpBuff As String * 25
Dim ret As Long, UserName As String

' Get the user name minus any trailing spaces found in the name.
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, [color=black]Chr[/color](0)) - 1)

' Display the User Name
MsgBox UserName
End Sub[/CODE]

Funcion que extrae todas las IP del equipo:

[CODE]Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long

' Returns an array with the local IP addresses (as strings).
' Author: Christian d'Heureuse, www.source-code.biz
Public Function GetIpAddrTable()
Dim Buf(0 To 511) As Byte
Dim BufSize As Long: BufSize = UBound(Buf) + 1
Dim rc As Long
rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
ReDim IpAddrs(0 To NrOfEntries - 1) As String
Dim i As Integer
For i = 0 To NrOfEntries - 1
Dim j As Integer, s As String: s = ""
For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
IpAddrs(i) = s
Next
GetIpAddrTable = IpAddrs
End Function


' Test program for GetIpAddrTable.
Public Sub Test()
Dim IpAddrs
IpAddrs = GetIpAddrTable
Debug.Print "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
Dim i As Integer
For i = LBound(IpAddrs) To UBound(IpAddrs)
MsgBox IpAddrs(i)
Next
End Sub[/CODE]

Por cierto, queria preguntarte, nunca vi una hoja que estuviera completamente invisible, nisiquiera aparece en el menu de mostrar hojas, ¿Hay alguna forma alternativa de volver a mostrar la Hoja1 sin usar macros?

Un saludo

Link to comment
Share on other sites

Hola Roro, aqui te dejo dos funciones que hace lo mismo pero gastando menos codigo, creo que usas demasiadas funciones API que realmente no son necesarias

Sacar USERNAME:

    ' Makes sure all variables are dimensioned in each subroutine.
Option Explicit

' Access the GetUserNameA function in advapi32.dll and
' call the function GetUserName.
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long

' Main routine to Dimension variables, retrieve user name
' and display answer.
Sub Get_User_Name()

' Dimension variables
Dim lpBuff As String * 25
Dim ret As Long, UserName As String

' Get the user name minus any trailing spaces found in the name.
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, [color=black]Chr[/color](0)) - 1)

' Display the User Name
MsgBox UserName
End Sub[/CODE]

Funcion que extrae todas las IP del equipo:

[CODE]Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long

' Returns an array with the local IP addresses (as strings).
' Author: Christian d'Heureuse, www.source-code.biz
Public Function GetIpAddrTable()
Dim Buf(0 To 511) As Byte
Dim BufSize As Long: BufSize = UBound(Buf) + 1
Dim rc As Long
rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
ReDim IpAddrs(0 To NrOfEntries - 1) As String
Dim i As Integer
For i = 0 To NrOfEntries - 1
Dim j As Integer, s As String: s = ""
For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
IpAddrs(i) = s
Next
GetIpAddrTable = IpAddrs
End Function


' Test program for GetIpAddrTable.
Public Sub Test()
Dim IpAddrs
IpAddrs = GetIpAddrTable
Debug.Print "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
Dim i As Integer
For i = LBound(IpAddrs) To UBound(IpAddrs)
MsgBox IpAddrs(i)
Next
End Sub[/CODE]

Por cierto, queria preguntarte, nunca vi una hoja que estuviera completamente invisible, nisiquiera aparece en el menu de mostrar hojas, ¿Hay alguna forma alternativa de volver a mostrar la Hoja1 sin usar macros?

Un saludo

si tienes que ir al editor de visual basic posicionarte sobre la hoja oculta (en este caso la hoja1) y en las propiedades le cambias el status a xlsheetvisible creo que es la primera..

gracias por el codigo....

saludos

Link to comment
Share on other sites

Listo le incorporé al registro la dirección ip del pc que ocupa el archivo espero sea de utilidad

saludos....

Hola RORO1981 debido a que no pude volver a entrar al foro no habia el avance que llevas en el archivo, agradezco que has tomado el consejo que te he dado, se esta poniendo muy interesante el archivo... resulta estupendo esto; podrian incluso recomendarte algunas funciones extras a modo de ampliar la informacion que se podrian obtener aparte de las que has agregado pero bien no se si alguien quiera participar porque todo dependerá de cada caso.

Link to comment
Share on other sites

Hola Dramidom

Escuchando tu propuesta, ¿por que no agregar la MAC Adress?, este numerito compuesto de 6 valores hexadecimales de 255 cada uno es unico e irremplazable en cada equipo. Puede haber cientos de ordenadores con el mismo nombre ANTONIO, pero cada uno de esos PC tiene una MAC que no se repetira en ninguno de ellos tipo:00-1E-68-F0-FE-D9

Aqui dejo el enlace a wikipedia

Aqui dejo el link al codigo para VB6

Saludos

Link to comment
Share on other sites

Hola Dramidom

Escuchando tu propuesta, ¿por que no agregar la MAC Adress?, este numerito compuesto de 6 valores hexadecimales de 255 cada uno es unico e irremplazable en cada equipo. Puede haber cientos de ordenadores con el mismo nombre ANTONIO, pero cada uno de esos PC tiene una MAC que no se repetira en ninguno de ellos tipo:00-1E-68-F0-FE-D9

Aqui dejo el enlace a wikipedia

Aqui dejo el link al codigo para VB6

Saludos

Gracias Verzulan, lo que habia recomendado solo fue una posibilidad de obtener mas información; en el caso de lo que pedi que hacia referencia a la ip lo hacia debido a que trabaje en un lugar donde tenemos muchas computadoras conectadas en la red, todos nos conectamos por un nombre de dominio y para mi es mas facil saber por la IP cual es la persona a quien esta asignada esta ip; claro con lo que comentas es tambien un dato importante pero no soy experto en redes y me complicaria mas viendo esos valores jeje... pero como comente antes si el amigo RORO desea agregarle mas cosas al archivo que inicio pues bienvenido sea todo para bien de los que tendremos la oportunidad de usar este codigo.

Link to comment
Share on other sites

  • 4 years later...

Hola, la verdad es que no soy experto en excel ni mucho menos, pero me pareció una excelente idea el poder registrar los usuarios que acceden a los archivos. En mi caso, entrego bastantes reportes a múltiples usuarios y no sé si realmente los están usando o si en algunos casos es tiempo perdido.

Intenté seguir todos los pasos propuestos, sin embargo me arroja un error de compatibilidad con 64 bits.

Me podrían ayudar a ver como soluciono ese problema?

Muchas gracias!

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy