none
Valores num formulário de outro Excel RRS feed

  • Pergunta

  • Bem, tou quase a apresentar a minha tese, e falta-me uma pequena coisinha, espero que me possam ajudar.

    É assim: tenho dois ficheiros em excel. Um deles tem um botão de acesso a um formulário que está noutro ficheiro excel. Em anexo estão dois ficheiros Excel. O primeiro tem o botao que abre o userform do ficheiro2. Nesse userform o objectivo é que o valor que está no ficheiro 1 apareça ali.

    Gostaria de saber como faço, para fazer algo do tipo

    label1.caption=worksheets(activesheet.name).active cell

    queria que fosse algo dete tipo. O problema e que ao abrir o ficheiro 2, deixa de estar activo sad.gif

    Por favor ajudem-me que pra semana já apresento a tese

     

    link pra ver os ficheiros excel de teste: http://www.megaupload.com/?d=3MROCX4W

    domingo, 4 de dezembro de 2011 16:38

Respostas

  • Antes de procedermos com essa idéia, vamos tentar da forma como mostrado abaixo. Pode ser que seja a mais simples de todas.

    Private Sub UserForm_activate()
    
    Workbooks(Workbooks.Count - 1).Activate
    Label1.Caption = ActiveCell
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    terça-feira, 6 de dezembro de 2011 00:38
    Moderador

Todas as Respostas

  • "label1.caption=worksheets(activesheet.name).active cell

    queria que fosse algo dete tipo. O problema e que ao abrir o ficheiro 2, deixa de estar activo sad.gif"

    Experimente qualificar inteiramente o caminho da célula que deseja obter a informação. No seu caso, seria algo como:

    Label1.Caption = Workbooks("Ficheiro1.xlsm").Sheets("Folha1").Range("D5")


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    segunda-feira, 5 de dezembro de 2011 15:47
    Moderador
  • O problema é mesmo esse. É que eu não posso colocar a parte 'Sheets("folha1").range("D5")'

    E isto porque no caso do meu trabalho, eu nunca sei em que folha de cálculo o utilizador está.

    O objectivo é o utilizador clicar numa célula qualquer em que pretenda colocar o valor, abrir o formulário (que está no ficheiro2), e esse ao abrir saber qual a célula que está activa no ficheiro1, que corresponde à que o utilizador seleccionou. O problema é que o Excel considera a 'activecell' a do novo excel aberto (ficheiro2), mas eu prentendo que seja a active cell do ficheiro1.

    segunda-feira, 5 de dezembro de 2011 16:00
  • Você pode selecionar Ficheiros pelo nome ou índice. Vamos supor que não há nenhum ficheiro aberto e você abriu o FicheiroA.xlsm. Ao digitar

    Workbooks(1).Name

    será retornado "FicheiroA.xlsm".

     

    No entanto, se em seguida for aberto (seja através de VBA ou não) o FicheiroB.xlsm, se você digitar:

    Workbooks(1).Name ' retorna FicheiroA.xlsm

    Workbooks(2).Name ' retorna FicheiroB.xlsm

    Logo, os índices dos ficheiros são armazenados pela ordem que foram abertos.

    Então, para referenciar o último ficheiro que foi aberto, basta escrevermos, por exemplo:

    Workbooks(Workbooks.Count).Sheets(...

    e para referenciar o penúltimo:

    Workbooks(Workbooks.Count - 1).Sheets(...

    E assim acho que é possível resolver seu problema, já que dessa forma não é necessário saber o nome dos Ficheiros.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    segunda-feira, 5 de dezembro de 2011 21:06
    Moderador
  • Deve estar praticamente resolvido o problema.

    Caso eu coloque desta forma:

     

    Private Sub UserForm_activate()
    Label1.Caption = Workbooks(Workbooks.Count - 1).Sheets(ActiveSheet.Name).Range("D5").Value
    End Sub

     

    Funciona porque tenho definido em que célula está o valor. Contudo, eu não quero assim, porque também não sei a célula. A célula também tem que ser a que está activa.

    Tentei isto:

     

     

    Private Sub UserForm_activate()
    Label1.Caption = Workbooks(Workbooks.Count - 1).Sheets(ActiveSheet.Name).ActiveCell.Value
    End Sub

     

    O meu erro deve ser no activecell, que não deve ser assim que se coloca.

     

    Obrigado

     


    • Editado marscb segunda-feira, 5 de dezembro de 2011 22:04
    segunda-feira, 5 de dezembro de 2011 22:04
  • Experimente atribuir uma variável à ActiveCell, como por exemplo:

    Sub Exemplo()

    Dim rng as Range

    Set rng = ActiveCell

    'Aqui vai o código de abrir outra Pasta de Trabalho e outro Formulário

    Label1.Caption = rng

    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    segunda-feira, 5 de dezembro de 2011 22:44
    Moderador
  • Mas coloco essa declaração de variável em qual ficheiro de Excel?

    É assim, tenho tudo assim:

    No Ficheiro1.xlsm, tenho o botão com o código:

     

    Public Sub CommandButton1_Click()
    
     Dim sArquivo As String
    Dim wb As Workbook

    sPasta = ThisWorkbook.Path
    sArquivo = "Ficheiro2.xlsm"

    Set wb = Workbooks.Open(sPasta & "\" & sArquivo)

    Run wb.Name & "!mostrar" 'mostrar é para ir buscar o userform

    wb.Close SaveChanges:=False end sub

     

    Depois no Ficheiro2.xlsm, no código do userform tenho:

    Private Sub UserForm_activate()
    Label1.Caption = Workbooks(Workbooks.Count - 1).Sheets(ActiveSheet.Name).ActiveCell.Value
    End Sub

    A sua ideia será colocar a declaração da variável com acesso à ActiveCell no commandbutton1, e depois, no código do userform no outro excel, colocar 'label1.caption=rng' ?

     

    Eu tentei isso, mas não deu. O que deve acontecer é que o Ficheiro2.xlsm não reconhece 'rng' como variável porque é noutro Excel. O erro deverá estar por aí.

    • Editado marscb segunda-feira, 5 de dezembro de 2011 23:16
    segunda-feira, 5 de dezembro de 2011 23:12
  • Antes de procedermos com essa idéia, vamos tentar da forma como mostrado abaixo. Pode ser que seja a mais simples de todas.

    Private Sub UserForm_activate()
    
    Workbooks(Workbooks.Count - 1).Activate
    Label1.Caption = ActiveCell
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    terça-feira, 6 de dezembro de 2011 00:38
    Moderador
  • Bem, mesmo muito mais simples e resolveu perfeitamente. Já consegue is buscar o valor.

    Testei finalmente nas folhas de cálculo do meu programa para a tese de mestrado, e funciona muito bem.

     

    Agradeço o tempo e a disponibilidade. Foi mesmo muito útil.

    Muito Obrigado

    Abraço

    terça-feira, 6 de dezembro de 2011 01:03