Página 1 de 1

Código SendKeys

Enviado: 02 Dez 2016 às 14:17
por juauvitor
Boa tarde Galera,
sou novo aqui no fórum e me chamo João Vitor, prazer,
Tenho uma dúvida que está me matando, não acho resposta em lugar algum para minha dúvida, seguinte:

Em uma planilha, ao abrir ela por meio de um atalho de teclados, a planilha tira print apenas da janela ativa (no meu sistema de trabalho é super útil). Porém, quando eu preciso acionar novamente o código, o excel não reconhece que o Word está aberto e abre um novo word e refaz a colagem.

pra ser mais específico, queria que o código reconhecesse que o word está aberto e colasse o print logo abaixo do outro. no mesmo trabalho de Word que já foi iniciado.

Re: Código SendKeys

Enviado: 02 Dez 2016 às 15:38
por alexandrevba
Boa tarde!!

Talvez ajuda a clarear um pouco.

Não testado!
Código: Selecionar todos
Function DocOpen(strDocName As String) As Boolean
    Dim appWord As Object
    Dim wdDoc As Object
    On Error Resume Next
    Set appWord = GetObject(, "Word.Application")
    If Err <> 0 Then GoTo errorhandler
     
    With appWord
        Set wdDoc = appWord.Documents(strDocName)
        If Err <> 0 Then GoTo errorhandler
    End With
    DocOpen = True
    Exit Function
errorhandler:
     
End Function
Código: Selecionar todos
Sub testeAleVBA()
    If DocOpen("Document1.doc") <> True Then
        MsgBox "AleVBA"
    End If
End Sub
Att

Código SendKeys

Enviado: 02 Dez 2016 às 16:25
por juauvitor
Olá Alexandre, obrigadão pela dica, mas pode me auxiliar a colocar isso no meu código? Eu estou aprendendo VBA de forma auto de data, e Function eu ainda não faço ideia de como usar, domino algumas funções apenas, mas nada muito extenso.
Fico grato pela ajuda até agora e aguardo algum retorno referente.

Re: Código SendKeys

Enviado: 02 Dez 2016 às 16:47
por alexandrevba
Boa tarde!

No meu exemplo a função foi invocada pelo nome
Código: Selecionar todos
DocOpen()
na linha
Código: Selecionar todos
If DocOpen("Document1.doc") <> True Then
faça isso na sua sub rotina.

Att

Código SendKeys

Enviado: 05 Dez 2016 às 12:10
por juauvitor
Alexandre, coloquei o código na minha planilha, ela está aqui de forma já modificada, mas não consegui concluir. Pode por favor revisar e me dar uma dica?
Antes ela abria o Word toda vez que o código era acionado, porém, quero que o apenas o código seja aplicado caso o Word tenha sido aberto, sem abrir ele novamente como um novo trabalho.

Segue a planilha para analise, grato desde já.
Pasta1.rar

Re: Código SendKeys

Enviado: 12 Dez 2016 às 16:51
por juauvitor
Boa tarde,

Cheguei no seguinte código:
Código: Selecionar todos
Sub incon()
Application.WindowState = xlMinimized
Application.Wait (DateAdd("s", 1, Now()))
Call PrintTheScreen1
 If DocOpen("Doc1.docx") <> True Then
        Application.Wait (DateAdd("s", 1, Now()))
Shell "C:\Program Files\Microsoft Office 15\root\office15\winword.exe", vbNormalFocus
Application.Wait (DateAdd("s", 2, Now()))
SendKeys "{ENTER}"
SendKeys "Inconsistências filial 1"
SendKeys "{ENTER}"
SendKeys "^v"
SendKeys "{NUMLOCK}"
Application.Visible = True

ElseIf DocOpen("Doc1.docx") <> False Then
Call PrintTheScreen1
SendKeys "{ENTER}"
SendKeys "Inconsistências filial 2"
SendKeys "{ENTER}"
SendKeys "^v"
SendKeys "{NUMLOCK}"
Application.Visible = True
End If
End Sub

Sub PrintTheScreen1()
Application.SendKeys "(%{1068})"
DoEvents
End Sub

Function DocOpen(strDocName As String) As Boolean
    Dim appWord As Object
    Dim wdDoc As Object
    On Error Resume Next
    Set appWord = GetObject(, "Word.Application")
    If Err <> 0 Then GoTo errorhandler
     
    With appWord
        Set wdDoc = appWord.Documents(strDocName)
        If Err <> 0 Then GoTo errorhandler
    End With
    DocOpen = True
    Exit Function
errorhandler:
     
End Function
Porém meu código n está funcionando na segunda parte, que deveria abrir o documento do Word já em uso e continuar parte do percurso.

Alguém será que consegue ajudar? fico no aguardo, abraço.