Notifications
Clear all

MsgBox e formulários não abrem sobre o Excel (qdo usadas 2 t

9 Posts
4 Usuários
0 Reactions
1,518 Visualizações
(@gilbertjrs)
Posts: 77
Trusted Member
Topic starter
 

Estou com um problema numa macro que desenvolvi para meu serviço, o pessoal costuma usar 2 telas e diversas vezes o Excel está em uma delas porém, os MsgBox e UserForms abrem na outra. Como posso obter a posição na qual o Excel foi aberto e definir a posição de abertura dos MsgBox e UserForms em relação a do EXCEl?

 
Postado : 23/10/2016 4:44 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Nao entendi

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 23/10/2016 5:34 pm
DJunqueira
(@djunqueira)
Posts: 772
Prominent Member
 

Por duas telas vc quer dizer 2 monitores?

Se sua dúvida foi respondida marque o tópico como RESOLVIDO usando o botão com marca verde.

 
Postado : 23/10/2016 5:38 pm
(@gilbertjrs)
Posts: 77
Trusted Member
Topic starter
 

Sim são 2 monitores. O problema é o seguinte:
é aberto o EXCEL num monitor e um PDF de referência no outro, o EXCEL deve gerar uma imagem jpeg fiel a alguns campos de informações existentes no PDF.

No arquivo do Excel, dentro de um módulo tem uma SUB buscarInfo() que localiza todas as informações numa das planilhas e preenche a outra planilha(ambas dentro do mesmo arquivo),  ao final esta SUB solicita abrir o formulario GerarImg.Show (que gera uma imagem jpeg do range que contem as informações).
O pessoal que usa o arquivo precisa comparar com um PDF referencia, abre o EXCEL num monitor e o PDF no outro porém, por diversas vezes, tanto este formulário, quando as MsgBox, abrem no monitor onde está o PDF e não sobre o Excel (monitor onde foi aberto o EXCEL).
Tentei colocar a linha ThisWorkbook.Activate antes da GerarImg.Show porém, não resolveu o problema.

 
Postado : 24/10/2016 6:54 pm
DJunqueira
(@djunqueira)
Posts: 772
Prominent Member
 

Agora sua explicação ficou show!

Experimente algo como:

Private Sub UserForm_Click()
    Load UserForm2
    UserForm2. StartUpPosition = 3
    UserForm2.Show
End Sub

Office 2013 e posterior

Vc tb pode alterar a posição da janela em Propriedades.

Se sua dúvida foi respondida marque o tópico como RESOLVIDO usando o botão com marca verde.

 
Postado : 25/10/2016 2:22 am
(@gilbertjrs)
Posts: 77
Trusted Member
Topic starter
 

Tentei este código e não resloveu.

Os arquivos são da empresa que trabalho, não tenho acesso à Internet de lá.

A primeira etapa é copiar os dados de um PDF para a Planilha 2.
A segunda etapa é na Planilha 1 clicar em localizar, uma macro busca todas as informações importantes.
Ao final desta macro é aberto automaticamente um formulário para que o operador selecione uma página (quando os dados são muitos, o resultado é dividido em páginas, e cada uma gera uma imagem que é exportada ao ser selecionada).
Até aqui esta tudo em perfeita ordem.

O problema é que estes operadores trabalham com 2 monitores, em um fica o EXCEL e no outro o PDF e,
este formulário nem sempre abre sobre o EXCEL, muitas vezes abre no outro monitor sobre o PDF.
Quero travar a posição do userform sobre a posição do EXCEL que foi aberto ( e que roda a esta macro)

Segue print de uma simulação que fiz em casa

 
Postado : 26/10/2016 8:36 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite gilbertjrs,

Teste o seguinte.

No código que chama o Formulário digite logo no começo o seguinte código:

ThisWorkbook.Activate

Nas propriedades do formulário, mude ShowModal de 'true' para 'false'.

Teste e de reposta.

att,

 
Postado : 26/10/2016 10:19 pm
(@gilbertjrs)
Posts: 77
Trusted Member
Topic starter
 

brunoxro

O código sugerido não resolveu, achei um código no sitehttp://www.vbaexpress.com/kb/getarticle.php?kb_id=356 que resolveu o problema, grato pela ajuda, segue o código utilizado:

Private Sub UserForm_Initialize()
     
    With UserForm1 
        .Top = Application.Top + 150 '< change 125 to what u want
        .Left = Application.Left + 250 '< change 25 to what u want
    End With
     
End Sub

Obs.: Usei a Sub UserForm_Initialize(), pois do jeito sugerido pelo site, o formulário piscava num monitor e em seguida aparecia no outro.

Att

 
Postado : 28/10/2016 8:42 pm
(@gilbertjrs)
Posts: 77
Trusted Member
Topic starter
 

Pessoal, revisitando meus tópicos, pesquisei na internet e encontrei outra solução:

Para inicializar o userform use este código:

    With UserForm1
      .StartUpPosition = 0
      .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
      .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
      .Show
    End With

Solução encontrado no seguinte site:http://spreadsheetpage.com/index.php/tip/dual_monitors_and_userforms/

Fiz os testes e comigo funcionou perfeitamente.

Abraços e obrigado pelo constante apoio obtido aqui neste fórum.

 
Postado : 20/01/2018 5:02 pm