Jump to content
jmaocubo

Listbox - identificar todos os livros abertos

Recommended Posts

jmaocubo

Olá a todos.

Estou a tentar fazer uma listagem de todos os livros abertos. estou a utilizar uma userform com uma listbox e o código:

Private Sub UserForm_Activate()
    Dim wkb As Workbook

    For Each wkb In Workbooks
        If Windows(wkb.Name).Visible Then _
          ListBox1.AddItem wkb.Name
    Next
End Sub

Acontece que apenas enumera o livro onde está a ser executado este código.... O que estou a fazer mal??? 🤔

EDIT: os livros que estão gravados ele identifica, o problema são aqueles que não foram guardados, ou seja, aqueles que ainda estão com Livro1 ou Livro2....

Desde já agradeço a vossa disponibilidade.

cumprimentos,

Miguel

Share this post


Link to post
Share on other sites
paulosemblano

Veja se te serve:

Private Sub UserForm_Activate()

Dim I As Long

For I = 1 To Worksheets.Count

    If Worksheets(I).Visible = True Then ListBox1.AddItem Worksheets(I).Name

Next I

End Sub

Share this post


Link to post
Share on other sites
jmaocubo

Viva Paulo

O código

Private Sub UserForm_Activate()
Dim I As Long
For I = 1 To Worksheets.Count
    If Worksheets(I).Visible = True Then ListBox1.AddItem Worksheets(I).Name
Next I
End Sub

É referente às folhas de um livro. O meu problema é listar todos os livros abertos. A parte de os listar até nem é dificil basta utilizar o código que postei.

O que eu tenho é um programa que exporta para excel, ou seja, no programa faço exportar e ele abre um novo livro de excel e coloca lá os dados. quando executo a macro no meu livro principal ele não me identifica esse livros ou outros que estejam abertos sem serem gravados primeiro tipo Livro1.xls [modo de compatibilidade]. Penso que será pelo export do programa que usa CreateObject() em vez de  GetObject().

Não sei mesmo como resolver isto :wallbash:

Share this post


Link to post
Share on other sites
paulosemblano

Private Sub UserForm_Activate()

Dim I As Long

For I = 1 To Workbooks.Count

    ListBox1.AddItem Workbooks(I).Name

Next I

End Sub

Share this post


Link to post
Share on other sites
jmaocubo

Não funciona (foi algo que eu também tinha experimentado)...

Experimente o seguinte:

1) abra um livro novo e coloque o código e crie a userform

2) abra dois novos livros (mas sem ser na janela do seu livro, abra clicando no icone do excel) e minimize para a barra do windows

3) vá ao seu livro onde tem o código e execute... vai constatar que apenas lhe aparece o livro de onde está a executar o seu código.

Share this post


Link to post
Share on other sites
jpaulino

2) abra dois novos livros (mas sem ser na janela do seu livro, abra clicando no icone do excel) e minimize para a barra do windows

Dessa forma não funciona porque são duas instâncias do Excel abertas e não dois workbooks abertos na mesma instância. Era necessário ir ver os processos do sistema operativo.

btw isto não é muito correcto (embora até funcione):

For Each wkb In Workbooks
        If Windows(wkb.Name).Visible Then 

Deverá ser:

For Each wkb In Workbooks
        If wkb.Visible Then 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.