locked
Chamar função via Hyperlink RRS feed

  • Pergunta

  • Pessoal,

     

    Tenho um problema que estou tentando resolver aqui no serviço faz um tempinho ja...
     
    Vamos la...
    Considerando a planilha abaixo:
     
    1 2 3 4 5 6.0 7.0
    a b c d e f g
    sexta 02/02/2007 24 9.5 0 0 0.6 13.9
    sabado 03/02/2007 24 24 0 0 0.0 0.0
    domingo 04/02/2007 24 24 0 0 0.0 0.0
    segunda 05/02/2007 24 8.5 0 0 0.6 14.9
    terca 06/02/2007 24 8.5 0 0 0.5 15.0
    quarta 07/02/2007 24 9.5 0 0 0.0 14.5
    quinta 08/02/2007 24 8.5 0 0 0.5 15.0

     

    - Ela é gerada dinamicamente via VBA,  conectando-se a um banco do SQL Server

     

    - Na coluna 4, é gerado dinamicamente um hyperlink para cada linha, redirecionando para uma célula em outra planilha, cada hyperlink redireciona para uma célula diferente. (Ex: o hyperlink na célula D5 redireciona para a célular D5 em outra planilha, D6 na D6 da outra e etc...)

     

    O grande problema está no seguinte:

    Ao clicar em um hyperlink da coluna 4,  e ser redirecionado para a outra planilha, seria executado um código para preencher a outra planilha dinamicamente.

     

    O que acontece na verdade é que quando se clicar no hyperlink, abriria outra planilha com informações detalhadas dessa coluna,

    Só que com hyperlink não é possível chamar funções ou procedimentos por si só, que seria usados para preencher a outra planilha.

     

    Funcionaria mais ou menos como um botão, só que não posso preencher um relatório com botões né?

     

    Estou aqui pensando em várias maneiras, mas será que existe algum modo para resolver ou pelo menos um modo mais simples de se fazer isso?

     

    Agradeço desde já a atenção,

    Obrigado
    segunda-feira, 25 de fevereiro de 2008 19:00

Todas as Respostas

  • Higor,

    Vc poderia capturar a seleção da planilha destino do hyperlink através de um evento, como abaixo:

    Code Snippet
    Private Sub Worksheet_Activate()
    'Executar ações
    End Sub

     

    Desta forma, ao ativar o hyperlink o procedimento é ativado.

    OBS: Se a planilha puder ser ativada de outra forma, temos que colocar uma trava para impedir a execução do procedimento.

    [ ]s

     

     

    segunda-feira, 25 de fevereiro de 2008 20:44
  •  

    Desculpe-me Adilson, mas não entendi

     

    Poderia postar um exemplo mais claro?

     

    Abraços,

    segunda-feira, 25 de fevereiro de 2008 21:16
  • Vamos lá.

    Suponha que a planilha com os hyperlinks é chamada de "Tabela" e ao clicar nos hyperlinks vc é levado para diferentes células da planilha chamada "Destino".

    O primeiro passo é dar um click com o botão direito na aba da planilha "Destino" e inserir um código similar ao que postei, onde na parte comentada devem estar os passos a serem executados após a ativação do hyperlink.

    A explicação é que quando vc ativa um hyperlink, este ativa uma determinada planilha.

    O excel captura isso através de um evento, no qual identifica a planilha que foi selecionada e com base neste fato executa os comandos que instruirmos.

    Se vc tiver várias planilhas de destino terá que criar um código para cada uma, ou um código único sensível ao contexto, ou seja, que identifique a planilha selecionada e execute diferentes comandos com base nesta seleção.

    Com base nas informações que vc postou, isso é o que posso te dizer.

    Se ainda tiver dúvidas e quizer, pode me mandar o arquivo e explicar detalhadamente o que precisa, que terei prazer em ajudá-lo.

    [ ]s

     

    segunda-feira, 25 de fevereiro de 2008 21:25
  • Entendi Adilson,

     

    Só que o problema é que eu vou precisar passar a data da linha do hyperlink como parametro para executar um procedimento.

     

    Exemplo utilizando a planilha de la de cima:

    Digamos que a planilha seja de vendas por dias.

    Ao clicar no hyperlink da mesma linha do dia 03//02/2007, é chamado um procedimento que monta uma outra planilha com uma consulta mais específica, no caso, suponhamos que a coluna d seja o numero de funcionarios que trabalharam neste dia, ao clicar no hyperlink (desse numero de funcionarios), chamaria um procedimento que preencheria uma outra planilha mostrando todos os funcionarios que trabalharam neste dia. Tudo dinamicamente.

     

    Entendeu?

    Qualquer coisa, deixe seu e-mail que eu te mando a planilha.

     

    Abraços

    terça-feira, 26 de fevereiro de 2008 14:20
  • Higor,

    Se quiser pode me mandar no endereço adilsonsoledade@hotmail.com

    [ ]s

    terça-feira, 26 de fevereiro de 2008 22:18
  • Adilson,

     

    Consegui resolver parte do problema,

    Utilizei o método FollowHyperlink, como fica a seguir:

     

    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

        Call DetalhaDados(Coluna, Sheet1.Range("K" & ActiveCell.Row).Text)
       
    End Sub

     

    Onde:

    Coluna é a coluna de onde está o hyperlink que foi clicado (Mais de uma coluna terá hyperlinks), criei um procedimento dinamico para checar em qual coluna esta o hyperlink ativado, dependendo da coluna ele executa procedimentos diferentes.

     

    E o outro parametro é a data, utilizado para passar como parametro para executar a Stored Procedure de onde virão os dados para popular a planilha.

     

    Só que isso tudo acabou me gerando um probleminha:

     

    Não estou conseguindo pegar a coluna do hyperlink!

     

    PS: Adilson, acabei de te mandar a planilha, fico no aguardo sobre alguma ajuda e desde já lhe agradeço!

     

    Muito obrigado,

    Atenciosamente,

    Higor Fernandes

     

    quarta-feira, 27 de fevereiro de 2008 19:42
  • higor,

    Peço desculpas pela demora, mas estou com vários outros projetos e o teu demorou para chegar no topo da fila.

    Para capturar a linha ou a coluna da célula onde se encontra o hyperlink, vc deve colocar no código acima

    Target.Range.Row ou Target.Range.Column.

     

    Poderia explicar melhor o passo a passo da aplicação, para poder orientá-lo das próximas etapas?

     

    [ ]s

     

     

    quarta-feira, 5 de março de 2008 21:10