Post by ikrass » 14 Jun 2019, 20:06
Gio, Obrigado pela ajuda.
Percebi que uma vez que a Conexão COM com o Excel é estabelecida ela só é fechada quando o Script é encerrado, caso contrario o processo ainda fica ativo no gerenciador de tarefas mesmo após fechado o Excel, impossibilitando que uma nova conexão COM seja estabelecida com a próxima instancia de Excel do gerenciador. A maneira que encontrei para contornar esse problema foi criando dois Scripts o primeiro Script coleta as informações que preciso no Excel e as copia, o segundo Script cola as informações no bloco de notas. Segue o Exemplo:
Script 1 (Extracao_Excel)
Excel := ComObjActive("Excel.Application"); Se conecta a primeira instancia de Excel Aberta
Excel.Range("A1").Select; Seleciona a Celula A1
Excel.Range(Excel.Selection, Excel.Selection.End(-4121)).Select; Estende a selecao
Excel.Range(Excel.Selection, Excel.Selection.End(-4161)).Select; Estende a selecao
Excel.Selection.Copy; Copia os dados
Excel.Quit; Encerra o Excel
Script 2 (Consolidar_Base)
F2::
Run, "C:\Users\xxxxx\Desktop\Teste\Consolidado.txt"; Abre o bloco de notas destinado a consolidar a base
Sleep, 1000
Run, "C:\Users\Ixxxxx\Desktop\Teste\Extracao_Excel.Ahk"; Obtem os dados da tabela atraves da execucao do script 1
Sleep, 400
Send, {LControl Down}; cola no notepad
Sleep, 700
Send, {v}
Sleep, 100
Send, {LControl Up}
Sleep, 1000
Send, {LControl Down}; salva no notepad
Sleep, 700
Send, {s}
Sleep, 100
Send, {LControl Up}
Sleep, 1000
Send, {LAlt Down}; fecha o notepad
Sleep, 700
Send, {f4}
Sleep, 100
Send, {LAlt Up}
Acredito que dessa forma irá funcionar para o que preciso contudo preciso que o script 2 rode em loop enquanto houverem instancias do excel abertas na maquina. Consegue me auxiliar nessa parte? Seria de grande ajuda. Desde já agradeço.
Gio, Obrigado pela ajuda.
Percebi que uma vez que a Conexão COM com o Excel é estabelecida ela só é fechada quando o Script é encerrado, caso contrario o processo ainda fica ativo no gerenciador de tarefas mesmo após fechado o Excel, impossibilitando que uma nova conexão COM seja estabelecida com a próxima instancia de Excel do gerenciador. A maneira que encontrei para contornar esse problema foi criando dois Scripts o primeiro Script coleta as informações que preciso no Excel e as copia, o segundo Script cola as informações no bloco de notas. Segue o Exemplo:
Script 1 (Extracao_Excel)
Excel := ComObjActive("Excel.Application"); Se conecta a primeira instancia de Excel Aberta
Excel.Range("A1").Select; Seleciona a Celula A1
Excel.Range(Excel.Selection, Excel.Selection.End(-4121)).Select; Estende a selecao
Excel.Range(Excel.Selection, Excel.Selection.End(-4161)).Select; Estende a selecao
Excel.Selection.Copy; Copia os dados
Excel.Quit; Encerra o Excel
Script 2 (Consolidar_Base)
F2::
Run, "C:\Users\xxxxx\Desktop\Teste\Consolidado.txt"; Abre o bloco de notas destinado a consolidar a base
Sleep, 1000
Run, "C:\Users\Ixxxxx\Desktop\Teste\Extracao_Excel.Ahk"; Obtem os dados da tabela atraves da execucao do script 1
Sleep, 400
Send, {LControl Down}; cola no notepad
Sleep, 700
Send, {v}
Sleep, 100
Send, {LControl Up}
Sleep, 1000
Send, {LControl Down}; salva no notepad
Sleep, 700
Send, {s}
Sleep, 100
Send, {LControl Up}
Sleep, 1000
Send, {LAlt Down}; fecha o notepad
Sleep, 700
Send, {f4}
Sleep, 100
Send, {LAlt Up}
Acredito que dessa forma irá funcionar para o que preciso contudo preciso que o script 2 rode em loop enquanto houverem instancias do excel abertas na maquina. Consegue me auxiliar nessa parte? Seria de grande ajuda. Desde já agradeço.