AJUDA ERROR - CODIGO 95% PRONTO -

08/07/2023

0

Pessoal, não sei se é o lugar certo pois sou novo aqui... Na minha empresa não podemos utilizar qualquer linguagem de programação se não o Excel/VBA.
Fiz algumas pesquisas e pelo que parece, para o objetivo que estou buscando, o VBA é péssimo.
Preciso que a macro simule o mouse e o teclado, mas por algum motivo, o clique esquerdo não esta funcionando...
O mouse movimenta, as teclas ALT+TAB e CTRL+P funcionam. Mas o clique para então digitar o que consta na célula designada, não funciona.

Alguém pode me ajudar?

Segue o código:


Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
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

Sub Executar()
Dim i As Integer
Dim celula As Range
Dim texto As String

'' Define a planilha onde as informações estão localizadas
Dim planilha As Worksheet
Set planilha = ThisWorkbook.Sheets("Sheet1")

'' Define o número de vezes que o processo será repetido (com base na quantidade de informações na coluna A)
Dim numRepeticoes As Integer
numRepeticoes = planilha.Cells(Rows.Count, 1).End(xlUp).Row - 1

'' Loop para repetir o processo
For i = 1 To numRepeticoes
'' Obtém o texto da célula atual (coluna A)
Set celula = planilha.Cells(i + 1, 1)
texto = celula.Value

'' Pressionar ALT + TAB
AppActivate Application.Caption
Application.SendKeys ("%")
Application.Wait Now + TimeValue("00:00:01")

'' Mover o mouse até X:474 Y:306
Application.Wait Now + TimeValue("00:00:01")
MouseMove 474, 306

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Inserir texto na célula A2
Application.Wait Now + TimeValue("00:00:03")
planilha.Range("A2").Value = texto

'' Mover o mouse até X:473 Y:333
Application.Wait Now + TimeValue("00:00:03")
MouseMove 473, 333

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Inserir texto na célula A2
Application.Wait Now + TimeValue("00:00:03")
planilha.Range("A2").Value = texto

'' Mover o mouse até X:315 Y:634
Application.Wait Now + TimeValue("00:00:04")
MouseMove 315, 634

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Mover o mouse até X:862 Y:325
Application.Wait Now + TimeValue("00:00:04")
MouseMove 862, 325

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Aguardar 4 segundos
Application.Wait Now + TimeValue("00:00:04")

'' Pressionar as teclas CTRL + P
Application.SendKeys "^p"

'' Aguardar 4 segundos
Application.Wait Now + TimeValue("00:00:04")

'' Pressionar a tecla ENTER
Application.SendKeys "~"

'' Aguardar 6 segundos
Application.Wait Now + TimeValue("00:00:06")

'' Mover o mouse até X:844 Y:311
MouseMove 844, 311

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Aguardar 2 segundos
Application.Wait Now + TimeValue("00:00:02")

'' Inserir texto na célula A2
planilha.Range("A2").Value = texto

'' Mover o mouse até X476 Y:297
Application.Wait Now + TimeValue("00:00:02")
MouseMove 476, 297

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Mover o mouse até X:1062 Y:687
Application.Wait Now + TimeValue("00:00:02")
MouseMove 1062, 687

'' Clicar botão esquerdo
MouseClick vbLeftButton

'' Aguardar 2 segundos
Application.Wait Now + TimeValue("00:00:02")

'' Mover o mouse até X:553 Y:13
MouseMove 553, 13

'' Inserir texto "OK" na célula B2
planilha.Range("B2").Value = "OK"
Next i
End Sub

'' Função para simular um clique do mouse
Private Sub MouseClick(ByVal Button As Integer)
Dim MousePoint As POINTAPI
GetCursorPos MousePoint
mouse_event Button, MousePoint.x, MousePoint.y, 0, 0
End Sub

'' Função para mover o mouse para uma determinada posição
Private Sub MouseMove(ByVal x As Long, ByVal y As Long)
SetCursorPos x, y
End Sub
Wesley Costa

Wesley Costa

Responder

Posts

09/07/2023

Frank Hosaka

Tentei executar o código por aqui, mas o VBA devolveu a seguinte mensagem

Erro de compilação
O código desse projeto deve ser atualizado para uso em sistema de 64 bits. Analise e atualize as intruções Declare e, em seguida, marque-as com o atributo PtrSafe.

Eu não tenho como ajudar você, eu uso o Office 365 com o Windows 11, mas eu lembro do tempo que mexia com o VBA dentro do Microsoft Access. Eu também tentei personalizar o movimento do mouse, mas acabei não gostando. Eu perdia muito tempo para corrigir a trajetória do mouse.

O Excel é um aplicativo fantástico, eu consegui conectar a planilha no banco de dados do MySQL, e com uma macro eu consigo comparar o valor que eu espero com o valor que o banco de dados conseguiu calcular, e ele mostra com um # as contas divergentes; eu também uso uma macro só para somar os valores que tem a cor vermelho.

Durante vinte anos eu trabalhei muito com o VBA. Eu, por exemplo, sou péssimo para mexer com o PowerPoint, mas graças ao VBA eu consegui imprimir etiquetas no PowerPoint, ele pegava os dados numa tabela do Access e depois usava os recursos do PowerPoint para imprimir. O PowerPoint é capaz de ajustar o tamanho dos caracteres de acordo com o tamanho da mensagem.

O problema é que estamos na era do iPhone, e o VBA não dá suporte para compartilhar as informações no navegador. Assim, em 2020 eu conheci o WampServe, e com ele veio o MySQL e o PHP, e graças a essa tecnologia eu podia consultar, editar, as informações no banco de dados através da rede local. Em 2023, eu decidi hospedar o meu banco de dados no Hostinger. A minha vida ficou bem mais fácil, não preciso mais deixar o notebook ligado a todo momento, e eu posso acessar as informações através do navegador em qualquer parte do planeta, onde tenha cobertura da Vivo. Claro que isso não é barato, eu pago R$ 23,00 por mês na Hostinger. Se você fizer um plano para dois anos, o aluguel cai pela metade.

Claro que para sair do VBA para ir para o HTML eu tive que apanhar muito. Mas ao invés de você gastar papel para atualizar as informações no computador, muito melhor é você levar o celular no local e corrigir o endereço em tempo real.
Responder

10/07/2023

Arthur Heinrich

A rotina "mouse_event" simula um evento do mouse, como pressionar e soltar botões, ou mover o mouse.

Para simular um click, você deve gerar os dois eventos: mouse down e mouse up.

É no momento do mouse up que o Windows avalia se foi um click.

Mouse_Event(MOUSEEVENTF_LEFTDOWN, Round(PosicaoX * (65535 / Screen.Width)), Round(PosicaoY * (65535 / Screen.Height)), 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, Round(PosicaoX * (65535 / Screen.Width)), Round(PosicaoY * (65535 / Screen.Height)), 0, 0);
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar