Usuário com melhor resposta
Valores num formulário de outro Excel

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
Por favor ajudem-me que pra semana já apresento a teselink pra ver os ficheiros excel de teste: http://www.megaupload.com/?d=3MROCX4W
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- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 21:59
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 21:59
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"
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 -
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.
-
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 -
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
-
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 -
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
-
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- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 21:59
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 21:59
-
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