Usando API de Windows para hoja de cálculo en VBA
Cuando desarrollas aplicaciones para Office o Excel en particular, podemos hacer la mayoría de cosas usando un modelo de objeto de Office / Excel. Aunque ocasionalmente, necesitamos funciones que VBA no proporciona. En esos casos, tenemos que usar la función de solicitudes que están disponibles en Windows.
En el módulo de código en el formulario de usuario, pega las declaraciones de la función API en la parte superior del módulo, fuera de o antes de cualquier procedimiento Sub o Function o Property.
Obtén el nombre de usuario Windows
Si necesitas saber quién está conectado en una base de datos, usa GetUserName Este API es muy sencillo, ¿por qué te molestarías en escribir tu propio código? GetUserName recupera el nombre del sistema o usuario actual que está conectado a una red.
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function apicGetUserName() As String
'Llamar a apiGetUserName devuelve el usuario actual.
Dim lngResponse As Long
Dim strUserName As String * 32
lngResponse = GetUserName(strUserName, 32)
apicGetUserName = Left(strUserName, InStr(strUserName, Chr$(0)) - 1)
End Function
BringWindowToTop
Esta función API trae una ventana en específico al frente. Si la ventana es una de nivel superior, la función lo activa.
(ByVal lngHWnd As Long) As Long
Cuando solicites la función, pasa el valor del identificador de la ventana a una variable larga.
FindWindow
Puede ser un poco frustrante porque requiere información especializada, y si no lo haces correctamente, la función no resultará. Específicamente, necesitas la clase o nombre de la ventana, como se muestra en la solicitud simple debajo.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Hacer enfoque a la hoja de cálculo
Private Declare Function BringWindowToTop Lib "user32" _
(ByVal lngHWnd As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (_
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (_
ByVal HWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Const WM_SETFOCUS = &H7
Private Sub SetSheetFocus()
Dim HWND_XLDesk As Long
Dim HWND_XLApp As Long
Dim HWND_XLSheet As Long
HWND_XLApp = Application.HWnd
HWND_XLDesk = FindWindowEx(HWND_XLApp, 0&, "XLDESK", vbNullString)
HWND_XLSheet = FindWindowEx(HWND_XLDesk, 0&, "EXCEL7", ActiveWindow.Caption)
SendMessage HWND_XLSheet, WM_SETFOCUS, 0&, 0&
End Sub
Private Sub SetAppFocus()
Dim HWND_XLDesk As Long
Dim HWND_XLApp As Long
HWND_XLApp = Application.HWnd
SendMessage HWND_XLApp, WM_SETFOCUS, 0&, 0&
End Sub
Function apicFindWindow(strClassName As String, strWindowName As String)
'Obtener identificador de ventana.
Dim lngWnd As Long
lngWnd = FindWindow(strClassName, strWindowName)
End Function
GetComputerName
GetComputerName, es similar a GetUserName excepto que recupera el nombre de sistema.
Private Declare Function GetComputerName Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function apicGetComputerName() As String
'Llamar a apiGetUserName devuelve el usuario actual.
Dim lngResponse As Long
Dim strUserName As String * 32
lngResponse = GetComputerName(strUserName, 32)
apicGetComputerName = Left(strUserName, InStr(strUserName, Chr$(0)) - 1)
End Function
Incrusta MS Office en un programa ASP.NET