none
Fechar Caixa de Diálogo pelo VBA RRS feed

  • Pergunta

  • Pessoal, estou desenvolvendo um código que copia fórmulas de uma planilha (CONSOLIDADO) para outra (VÍNCULOS), dentro de uma mesma pasta de trabalho. Essas fórmulas, na verdade, são vínculos à células de uma outra pasta de trabalho.

    Consegui criar tudo. Porém, durante a execução do código, a cada colagem de vínculo, abre-se a caixa de diálogo para que seja escolhida a pasta de trabalho a que se refere aquele vínculo.

    Preciso que essa caixa de diálogo seja fechada automaticamente a cada vez que ela é aberta ou, ainda melhor, que ela nunca seja aberta. É possível? Segue o código:

    Sub CopiarVínculos()

    For Coluna = 5 To 150
    For Linha = 6 To 500

    Sheets("VÍNCULOS").Cells(Linha, Coluna).Value = Sheets("CONSOLIDADO").Cells(Linha, Coluna).Formula

    Next
    Next

    End Sub

    Desculpem se for uma pergunta simples, mas estou trabalhando com VBA há apenas 2 semanas.

    Obrigado, abraços!

    terça-feira, 5 de janeiro de 2016 12:28

Respostas

  • Bom dia Cezário,

    Experimente inserir o trecho de código abaixo no início da sua função para evitar que sejam abertas quaisquer caixas de diálogo.

    Application.DisplayAlerts = False

    Ao final do código, você deve voltar com os alertas

    Application.DisplayAlerts = True

    terça-feira, 5 de janeiro de 2016 12:32
  • Cezário, 

    Para esta operação que você está executando no momento, os alertas não são importantes, mas pode ser que em outra operação eles sejam úteis. Exemplo: Em caso de erro, você provavelmente vai querer que seja exibida uma mensagem, ou até mesmo para salvar um arquivo, você precisa de um diálogo para selecionar um local.

    Por favor, marque como resposta.

    Qualquer dúvida estamos a disposição

    terça-feira, 5 de janeiro de 2016 12:48
  • Você está usando um controle ActiveX ou um controle de formulário ?
    quarta-feira, 6 de janeiro de 2016 10:23
  • Clique sobre a caixa de seleção com o botão direito e selecione a opção formatar controle.

    Na aba Controle, haverá um campo chamado Vínculo da Célula, selecione uma célula da sua planilha e clique em OK.

    O vínculo da célula é uma célula que conterá o valor selecionado na caixa de seleção a cada alteração que você fizer na mesma.

    Feito isto, este valor estará disponível através de programação. Suponhamos que seu vínculo de célula seja a célula A1, através do comando abaixo você recupera o valor de A1, ou seja, se está selecionada ou não.

    Sheets("Plan1").Range("A1").value

    Feito isto, você deve recuperar este valor e atribuir ao vínculo da célula da caixa de opção 2.


    quarta-feira, 6 de janeiro de 2016 10:59

Todas as Respostas

  • Bom dia Cezário,

    Experimente inserir o trecho de código abaixo no início da sua função para evitar que sejam abertas quaisquer caixas de diálogo.

    Application.DisplayAlerts = False

    Ao final do código, você deve voltar com os alertas

    Application.DisplayAlerts = True

    terça-feira, 5 de janeiro de 2016 12:32
  • Sensacional, funcionou! Obrigado!

    Porém, gostaria de entender melhor o porque de ter que voltar com os alertas ao final.

    Não posso simplesmente ignorá-los?

    terça-feira, 5 de janeiro de 2016 12:43
  • Cezário, 

    Para esta operação que você está executando no momento, os alertas não são importantes, mas pode ser que em outra operação eles sejam úteis. Exemplo: Em caso de erro, você provavelmente vai querer que seja exibida uma mensagem, ou até mesmo para salvar um arquivo, você precisa de um diálogo para selecionar um local.

    Por favor, marque como resposta.

    Qualquer dúvida estamos a disposição

    terça-feira, 5 de janeiro de 2016 12:48
  • André, nesse caso eu não posso deixar os alertas surgirem, pois atrapalharia todo o processo. Porém, entendi perfeitamente o que você disse sobre a necessidade de que eles surjam em vários casos.

    Muito obrigado pela ajuda! Aproveitando, estou com outra dificuldade. Sempre pesquiso muito na internet antes de perguntar, mas realmente não consigo achar a resposta para a seguinte questão:

    Preciso copiar de uma planilha para outra a seleção (flag) feita pelo usuário em uma Caixa de Seleção.

    Já criei todo o processo de importação dos valores das células, e está faltando só essa (na verdade são duas) caixas.

    Você sabe como faço isso?

    terça-feira, 5 de janeiro de 2016 21:28
  • Você está usando um controle ActiveX ou um controle de formulário ?
    quarta-feira, 6 de janeiro de 2016 10:23
  • André, é controle de formulário.
    quarta-feira, 6 de janeiro de 2016 10:48
  • Clique sobre a caixa de seleção com o botão direito e selecione a opção formatar controle.

    Na aba Controle, haverá um campo chamado Vínculo da Célula, selecione uma célula da sua planilha e clique em OK.

    O vínculo da célula é uma célula que conterá o valor selecionado na caixa de seleção a cada alteração que você fizer na mesma.

    Feito isto, este valor estará disponível através de programação. Suponhamos que seu vínculo de célula seja a célula A1, através do comando abaixo você recupera o valor de A1, ou seja, se está selecionada ou não.

    Sheets("Plan1").Range("A1").value

    Feito isto, você deve recuperar este valor e atribuir ao vínculo da célula da caixa de opção 2.


    quarta-feira, 6 de janeiro de 2016 10:59
  • André, é uma ótima ideia! Eu não sabia que, alterando manualmente o vínculo da caixa de seleção, o flag também se alterava. Vou implementar aqui.

    Outra questão: é possível incluir no código um comando que "clique" em Atualizar toda vez que o Excel mostrar aquela tela "Você gostaria de atualizar os vínculos?"?

    Um dos processos de importação que estou desenvolvendo faz com que várias planilhas se abram em sequência, e o Excel sempre faz essa pergunta, sendo a resposta sempre a mesma. Se tivesse como automatizar, ficaria bem melhor. Segue o trecho do código:

    PASTACONSOLIDADO = ThisWorkbook.Name
    If Cells(Linha, 1).Value = "ORÇAMENTO" Then
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & Novonome & ".xls"
    Else
    If Cells(Linha, 1).Value = "CAP" Then
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & Novonome & ".xlsm"
    End If
    End If
    Windows(PASTACONSOLIDADO).Activate
    quarta-feira, 6 de janeiro de 2016 11:11