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
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
Curtir tópico
+ 0
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.
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);
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
Clique aqui para fazer login e interagir na Comunidade :)