Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por tnndark
#46170
Boa noite!

Tenho uma planilha gigantesca e pra poupar trabalho (cerca de 10k de cliques), queria configurar uma macro pra simular o clique do mouse.

Fazendo uma procura rápida no google, achei isso:


Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10

Private Sub DoubleClick()
'Double click as a quick series of two clicks

SetCursorPos 300, 180 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Application.SendKeys "{ENTER}"
Sleep 100 'Wait 0.1 seconds

Loop

End Sub



-> Problemas: Erro de compilação: 'Sub' ou 'Function' não definida (pro "SetCursorPos")

Alguém poderia me ajudar?


OBS: meus conhecimentos de programação são quase negativos, então peço desculpas desde já caso tenha cometido alguma atrocidade ali em cima.
Avatar do usuário
Por neohazuki
Avatar
#46180
Ola, @tnndark.
Aparentemente a informação que você pesquisou encontra-se faltando ou incompleta para Office Excel, o código abaixo esta funcionando, a seguir tem algumas observações para você analisar junto comigo:
Código: Selecionar todos
Private Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10


Sub DoubleClick()

Do

'Double click as a quick series of two clicks

SetCursorPos 300, 180 'x and y position
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Application.SendKeys "{ENTER}"
Sleep (100) 'Wait 0.1 seconds

Loop

End Sub
:arrow: No Declare para sistemas 64 bits eh necessário colocar PtrSafe, caso seu Excel não seja 64 bits apenas ignore esse adicional, REMOVENDO DA VBA, conforme estava no exemplo inicial.

:?: Se você da Sleep precisa abrir a lib que contenha essa função. Por isso declarei ela.
:?: Se você termina um loop, e' claro que precisa iniciar um se inicia com a informação DO (se tiver um tempo determinado para fazer isso ou uma quantidade de tempo ai e outra historia e isso precisa ser declarado.)

:!: Como o loop e infinito ao executa-lo lembre-se que isso pode ser chato parar fora do depurador!

No mais,
Abraços!
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord