Hola telémaco, consulta y en excel como puedo hacerlo.

Hola telémaco, estoy haciendo un formulario en excel pero deseo que en un textbox jale los datos del usuario que se logeo en windows, como puedo hacerlo?

Gracias de antemano.

1 Respuesta

Respuesta
1

Si tu windows es de 32 bits debes poner esto en un módulo, es una línea toda seguida:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Y luego en subrutina que muestre el textbox poner esto

Dim lpBuff As String * 25
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
TextBox1.Text = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

-------------

Si es de 64 bits será así. Esta línea es solo una:

Declare PtrSafeFunction GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Longptr

y en la subrutina que muestre el textbox poner esto:

Dim lpBuff As String * 25
Dim ret As Longptr, UserName As String
ret = GetUserName(lpBuff, 25)
TextBox1.Text = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)

Y eso es todo, espero que te sirva y lo hayas entendido. Si no es así pregúntame. Y si ya está bien no olvides puntuar para poder hacer futuras consultas.

Valeroasm, mil gracias lo he probado y funciona, ahora yo tengo un formulario en el que registro más datos pero quiero que al abrir mi formulario el textbox de usuario jale automáticamente el usuario y que no puedan modificarlo.

Mil gracias por tu ayuda

Me alegro que te funcione. Tuve que investigar un poco para que me funcionara en 64 bits.

El método es muy sencillo. Tienes que escribir la subrutina para el evento de activación del formulario en la cual haces que se introduzca el nombre de usuario en el textbox y luego desactivas el botón.

Primero tiene que haber una forma de mostrar el formulario, por ejemplo pulsando un botón que tengas en la hoja, o el iniciar la macro, etc. En la hoja del botón estaría esta subrutina.

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Luego debe haber un módulo con la declaración de la función de advapi32.dll

Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As LongPtr

He puesto la declaración de 64 bits, si tienes windows de 32 usa la otra declaración

Y luego la subrutina de activación del formulario que debe estar en el código del formulario

Private Sub UserForm_Activate()
Dim lpBuff As String * 25
Dim ret As LongPtr, UserName As String
ret = GetUserName(lpBuff, 25)
TextBox1.Text = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
TextBox1.Enabled = False
End Sub

Si tu Windows es de 32 usas las líneas propias de la versión de 32 bits.

Y eso es todo. Si no te sale mándame tu correo y te mando el ejemplo que he hecho.

Si tienes otra consulta puedes mandármela como pregunta nueva, porque aunque no estoy disponible en Excel lo estoy en Matemáticas.

Mil gracias Valeroasm funcionó a perfección solo que le hice un cambio.

Dim ret As LongPtr

por

Dim ret As Long

Ya que me salía un mensaje de error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas