Hojas de cálculo en Excel - página principal

Obtener el nombre del PC

Hace poco, el amigo Victor Fajardo, me planteaba una duda respecto a como se podía determinar el nombre de la máquina, es decir, el nombre del PC, que utiliza un usuario de una red (por ejemplo de la red de la oficina), al abrir un fichero de excel que es de uso compartido de todos los usuarios que forman parte de la red. Esta pregunta había surgido, al hilo del artículo donde explicaba como dar permisos a diferentes usuarios de un mismo fichero excel. La verdad es que no tenía ni idea de cómo determinar el nombre de la máquina (el nombre del usuario era bien sencillo), así que le dije la verdad: "Victor, no tengo la más remota idea de cómo determinar el nombre del equipo". Él, después de investigar en la red, al final dio con una solución, y me la hizo llegar por email.

Siento no poder deciros quien es el autor de esta rutina que os presento, porque sinceramente desconozco quien es el autor, pero bueno, de todas formas, como es posible que os sea de utilidad, pues aquí os la dejo. La primera opción, es presentarla como una función:


Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function NombreComputadora() As String
Dim rString As String * 255, sLen As Long, tString As String
tString = ""
On Error Resume Next
sLen = GetComputerName(rString, 255)
sLen = InStr(1, rString, Chr(0))
If sLen > 0 Then
tString = Left(rString, sLen - 1)
Else
tString = rString
End If
On Error GoTo 0
NombreComputadora = UCase(Trim(tString))
End Function

Podemos llamar a la función desde excel, escribiendo esto en cualquier celda:

=NombreComputadora()

Y nos aparecerá el nombre del PC que ha ejecutado esa función personalizada. También podemos llamar a la función desde un macro, por ejemplo, de la siguiente forma:

Sub NombredelPC()
'Mostramos un mensaje
MsgBox ("El nombre del PC es: " & NombreComputadora)
End Sub

Al ejecutar ese macro, nos aparecerá un bonito MsgBox que nos informará del nombre de la máquina que está ejecutando ese macro.

Si lo preferimos, podemos usar esta rutina como un macro convencional, en lugar de usarlo como una función, modificando ligeramente el código, y añadiendo al final del mismo, la línea correspondiente al MsgBox:

Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Sub NombreComputadora()
Dim rString As String * 255, sLen As Long, tString As String
tString = ""
On Error Resume Next
sLen = GetComputerName(rString, 255)
sLen = InStr(1, rString, Chr(0))
If sLen > 0 Then
tString = Left(rString, sLen - 1)
Else
tString = rString
End If
On Error GoTo 0
nombrePC = UCase(Trim(tString))
MsgBox ("El nombre del PC es: " & nombrePC)
End Sub

Con esta utilidad, ya tenemos las dos cosas básicas para determinar el usuario que está trabajando con el fichero compartido:

a) El nombre del PC que está trabajando con el fichero de excel, y que se determina con el código que hemos visto en este artículo.

b) El nombre del usuario de la red, es decir, el nombre con el que el usuario hace login en el dominio de la red. Esto está explicado en el artículo que mencionaba en el enlace incluido al principio de estE artículo, y que te recomiendo leer. Si no te apetece leerlo, prueba esta sencilla rutina:

Sub NombreDelUsuario()
'Mostramos un mensaje
MsgBox ("El nombre del usuario de la red es: " & Application.UserName)
End Sub

Una observación final: Si estás ejecutando estos dos macros (nombre del PC y nombre del usuario), en modo monopuesto (sin estar "logueado" en una red), es muy probable que obtengas el mismo nombre de máquina y de usuario.



8 comentarios:

Anónimo dijo...

Antes de nada darte las gracias por tu blog, ya que nos resulta de mucha ayuda a todos los que nos iniciamos en este mundo. Muy útil, de veras.
Ahora paso a comentarte un problema que tengo. En un directorio tengo N archivos excel, todos con el mismo formato y tengo que pasar los datos de esas hojas a un listado. El problema es que son más de 5000 archivos y no consigo recorrer el directorio abriendo los archivos para a partir de aqui ir copiando los datos que necesito. Me inspire en el contador de hojas de un archivo que has publicado en este blog pero veo que no consigo meter las variables en la ruta de apertura de los libros, que van secuenciados numericamente (1.xls; 2.xls; etc). Te agradeceria muchisimo cualquier ayuda. Muchas gracias de antemano.
EMILIO.

Javier Marco dijo...

Échale un vistazo a esto, a ver si te inspira algo :-)

Listar los ficheros de un directorio

Anónimo dijo...

Muchas gracias Javier por la inspiración. Conseguí resolverlo aunque algo he debido de hacer mal ya que algunas veces me repetia la información de algunos archivos (¿?), es decir si tenia que tener 400 filas obtenia 637, por ejemplo. Sin ninguna lógica, ¿verdad? Probé a ponerle condicionales, bucles for, do - while, etc, pero no conseguí encontrar el error... En fin, muchas gracias y seguiré buscando el fallo. Saludos.
Emilio.

hfajardo dijo...

Hola Javier:
Excelente las soluciones, este artículo complementa al de "Usuarios, hojas y permisos", ahora ya podemos compartir un archivo excel con restricciones, algo muy común en las oficinas, gracias por el apoyo que nos brindas.

Saludos.

Anónimo dijo...

Ya encontré el error. No cerraba correctamente y bucle y hacia que algunas veces se repitiera en exceso. Muchas gracias nuevamente. Eres una máquina del Visual con Excel.

José Luis Palma Valera dijo...

Muy Buena Aplicación.... de verdad excelente... ahora mi pregunta ya que no soy muy bueno en esto como hago para que un archivo excel me reconozca ese nombre de pc... ya vi la opción publicada Usuarios, Hojas y permiso (http://hojas-de-calculo-en-excel.blogspot.com/2009/01/usuarios-hojas-y-permisos.html)pero me gustaria aplicar tambien la que aplicas aqui con el nombre de "PC" cualquier ayudita por favor escribe a mi correo es jose.palmav@gmail.com

Anónimo dijo...

LA FUNCION ESTA PERFECTA. SOLO QUE TENGO UNA CONSULTA. YO NECESITO QUE EL NOMBRE DE LA PC LO ESCRIBA EN UNA CELDA CUALQUIERA EN LUGAR DE MOSTRARLO EN UN CUADRO DE DIÁLOGO. ¿ES ESO POSIBLE?

DE ANTEMANO GRACIAS

-SALVA_MARTE

Javier Marco dijo...

En lugar de poner el macro NombreDelUsuario tal y como aparece en el artículo, sustitúyelo por este otro:

Sub NombreDelUsuario()
'Mostramos un mensaje
Range("A1") = "El nombre del usuario de la red es: " & Application.UserName
End Sub

Eso hará que te salga impreso en la celda A1 el nombre del usuario de la red.

Saludos.