ENVIAR TECLAS A PROGRAMAS EXTERNOS PELO VBA
E ae galera blz!
Bom, não sei se estou pedindo demais, mas ai vai.
Aqui na empresa, as pessoas trabalham fazendo coisas muito repetitivas, por exemplo usamos um sistema da Oracle para lançar produtos e notas e etc.
Ãs vezes (e muitas vezes) essas notas possuem mais de 300, 500 itens, e para algumas ações é necessário fazer item a item, e muitas vezes!! o que gera desperdÃcio de tempo à s pessoas, sem falar na LER (lesão por esforço repetitivo).
Um exemplo bastante tipico é cancelar itens em uma nota, deve ser item a item, entao eu clico num menu, vou em uma opção, seleciono outra opção num listbox, clico num botao, aparece mais tres janelas para confirmar, só entao é cancelado este item. E vou repetindo essa ação item a item.
Imagina cancelar 500 itens numa nota de 2000 itens!!
No Word e no Excel eu consegui [Ô]contornar[Ô] esse problema gerando uma macro VBA que melhorou e muito a ação de algumas tarefas, porém nesse aplicativo do Oracle fica difÃcil.
Então gostaria de saber da galera se existe a possibilidade de mandar uma combinação de teclas para outro aplicativo externo atraves de VBA.
Valew ae galera
Bom, não sei se estou pedindo demais, mas ai vai.
Aqui na empresa, as pessoas trabalham fazendo coisas muito repetitivas, por exemplo usamos um sistema da Oracle para lançar produtos e notas e etc.
Ãs vezes (e muitas vezes) essas notas possuem mais de 300, 500 itens, e para algumas ações é necessário fazer item a item, e muitas vezes!! o que gera desperdÃcio de tempo à s pessoas, sem falar na LER (lesão por esforço repetitivo).
Um exemplo bastante tipico é cancelar itens em uma nota, deve ser item a item, entao eu clico num menu, vou em uma opção, seleciono outra opção num listbox, clico num botao, aparece mais tres janelas para confirmar, só entao é cancelado este item. E vou repetindo essa ação item a item.
Imagina cancelar 500 itens numa nota de 2000 itens!!
No Word e no Excel eu consegui [Ô]contornar[Ô] esse problema gerando uma macro VBA que melhorou e muito a ação de algumas tarefas, porém nesse aplicativo do Oracle fica difÃcil.
Então gostaria de saber da galera se existe a possibilidade de mandar uma combinação de teclas para outro aplicativo externo atraves de VBA.
Valew ae galera
Procure sobre a API chamada [Ô]SENDKEYS[Ô]
valew, ASHKATCHUP eu vi, só que pelo q eu entendi ele envia as teclas mas o foco tem que estar numa janela dentro do Word!
e o que eu tava querendo era assim: deixar o programa [Ô]em espera[Ô] na barra de tarefas, ao acionar uma combinação de tecla pre-definida ele ia se ativar e enviar outra combinação de tecla tambem pré-definida ao sistema ou programa que estivesse em foco (e nao no word).
Acho que em VBA fica meio complicado, entao tava pensando em fazer um pequeno programinha em VB6 ou mesmo VB.NET, se alguem tiver alguma ideia ai, ela é bem vinda!
e o que eu tava querendo era assim: deixar o programa [Ô]em espera[Ô] na barra de tarefas, ao acionar uma combinação de tecla pre-definida ele ia se ativar e enviar outra combinação de tecla tambem pré-definida ao sistema ou programa que estivesse em foco (e nao no word).
Acho que em VBA fica meio complicado, entao tava pensando em fazer um pequeno programinha em VB6 ou mesmo VB.NET, se alguem tiver alguma ideia ai, ela é bem vinda!
Uhm, isso é um problema... faz sentido o alcance do VBA ser somente o Word.
MAS, em VB isso é facinho!!
Há meia dúzia de manerias de fazer isso. Uma delas, a mais facil na minha visão, é trazer a janela pra frente e dar sendkeys. Olha exemplo ai:
Cria um form. Poe um textbox e um botão, sem mudar nomes.
Abre o notepad.
Clica no botão
MAS, em VB isso é facinho!!
Há meia dúzia de manerias de fazer isso. Uma delas, a mais facil na minha visão, é trazer a janela pra frente e dar sendkeys. Olha exemplo ai:
Cria um form. Poe um textbox e um botão, sem mudar nomes.
Abre o notepad.
Clica no botão
Option Explicit
Private Declare Function FindWindowA Lib [Ô]user32[Ô] (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib [Ô]user32[Ô] (ByVal hwnd As Long) As Long
Private Const SW_MINIMIZE = 6, SW_NORMAL = 1, SW_MAXIMIZE = 3, SW_RESTORE = 9
Function AppToForeground2(Optional sApplicationCaption As String, Optional lHwnd As Long, Optional lWindowState As Long = SW_NORMAL) As Boolean
If lHwnd = 0 Then
lHwnd = DialogGetHwnd(sApplicationCaption)
End If
If lHwnd Then
AppToForeground2 = SetForegroundWindow(lHwnd)
End If
End Function
Sub Test()
Dim lHwnd As Long
lHwnd = DialogGetHwnd(, [Ô]NOTEPAD[Ô])
If lHwnd Then
If AppToForeground2(, lHwnd, SW_NORMAL) Then
SendKeys Text1.Text, 2000
End If
End If
End Sub
Function DialogGetHwnd(Optional ByVal sDialogCaption As String = vbNullString, Optional sClassName As String = vbNullString) As Long
On Error Resume Next
DialogGetHwnd = FindWindowA(sClassName, sDialogCaption)
On Error GoTo 0
End Function
Private Sub Command1_Click()
Test
End Sub
Tópico encerrado , respostas não são mais permitidas