Se apaga el "BLOQ NUM" por más que esté en la Macro

Tengo una macro que por recomendaciones de esta página agregué al final un código para que no me apague el BLOQ NUM, pero me lo sigue apagando y no puedo resolverlo.

La macro es:

Sub Procesar()
    Range("M16:X31").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("G9").Select
    SendKeys "{F2}", True
    SendKeys "{Enter}", True
    DoEvents
    Range("A1").Select
    SendKeys "{NUMLOCK}", True
    MsgBox "Proceso Terminado"
End Sub

1 Respuesta

Respuesta
1

Además de la conocida inestabilidad de "SendKeys", hay un "Bug" con su uso que produce el efecto que te está ocurriendo y no tiene solución al día de hoy. Creo que te quedan dos alternativas, o no usar "SendKeys" (o similar) o usar la función "keybd_event" de la API de Windows:

Option Explicit
#If VBA7 Then
    Public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
#Else
    Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
#End If
Const KEYEVENTF_KEYUP = &H2
Const KEYEVENTF_EXTENDEDKEY = &H1
Sub Teclas()
Call keybd_event(vbKeyF2, 0, 0, 0)
Call keybd_event(vbKeyF2, 0, KEYEVENTF_KEYUP, 0)
End Sub

Salu2

Abraham Valencia

No sabía que hasta ahora no tiene solución.

Y disculpá que no entienda mucho pero no se que es la API de Windows,¿tienes algún tutorial?

¿O eso pongo en la macro?

Gracias

En mi portatil, en donde estoy en este momento, no tengo ningún manual sobre las funciones de la
API, pero intenta dar una miradita a las cosas que se encuentran en internet, aunque sí te adelanto que no son tan fáciles de entender, no al menos al inicio.

Prueba así:

Option Explicit
#If VBA7 Then
    Public Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
#Else
    Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
        ByVal bScan As Byte, _
        ByVal dwFlags As Long, _
        ByVal dwExtraInfo As Long)
#End If
Const KEYEVENTF_KEYUP = &H2
Const KEYEVENTF_EXTENDEDKEY = &H1
Sub Teclas()
Range("M16:X31").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("G9").Select
Call keybd_event(vbKeyF2, 0, 0, 0)
Call keybd_event(vbKeyF2, 0, KEYEVENTF_KEYUP, 0)
End Sub

Si no resulta, mira bien lo que he intentado porque esa es la idea, y trata de adaptarlo a tus necesidades.

Salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas