Notifications
Clear all

Abrir planilha, preencher listbox através do rowsourse

6 Posts
2 Usuários
0 Reactions
1,629 Visualizações
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Pessoal,

O meu projeto tem um formulário de cadastro, o qual salva as informações em uma outra planilha, que funciona apenas como banco de dados.

Nesse mesmo projeto, eu tenho um formulário que necessita de pegar alguns dados desse banco de dados e preencher uma listbox.

Ou seja, tenho um botão que abre a planilha de banco de dados, preenche a listbox, através do ListBox2.RowSource = ("B2:D4") e depois disso, o banco de dados é fechado.

A listbox é preenchida, mas ao clicar nela, aparece a seguinte mensagem: Espaço insuficiente de armazenamento para concluir a operação.

Será que isso ocorre, pois a listbox referida foi preenchida com dados de uma planilha que já foi fechada? Se sim, o que devo fazer?

 
Postado : 23/01/2015 11:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Seria interessante o código (visto que arquivo modelo, não foi postado).

Att

 
Postado : 23/01/2015 12:09 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Sub VERIFICAR()
Dim lRow As Long
Dim Ultimalinha As Long

Dim matricula

matricula = TextBox1.Text & ComboBox44.Text

'matricula = a matrícula do empregado e o ano base da avaliação de desempenho. Esse código é cadastrado no banco de dados, para fazer os procv's.

'aqui eu abro a planilha que funciona como banco de dados.
Workbooks.Open ("C:Usersalisson.jalDownloadsBD_GERAL.xlsx")
ActiveSheet.Unprotect ("1234")
Application.Visible = False

Sheets("FORM_ESTRATEGICO").Select
Application.Visible = False

ActiveSheet.Unprotect ("bossjob")
Application.Visible = False

With Sheets("FORM_ESTRATEGICO") '<- troque o nome da planilha, se necessário

Cells(3, "V") = matricula

'cadastro o código mencionado acima.

If [v10] <> "SIM" Then

'aqui verifica se o empregado pode dar continuidade na avaliação de desempenho.
'XX
'aqui alguns textbox sao preenchidos
TextBox10.Text = [W12]
TextBox11.Text = [W13]
TextBox12.Text = [W14]
TextBox13.Text = [W15]
TextBox14.Text = [W16]

Sheets("PDI").Select

'aqui eu altero a sheets e preencho a listbox. (eu prefiro preencher uma listview)

ListBox2.RowSource = ("B2:D4")

MsgBox "... Aguarde mais um pouco!", vbInformation, "Verificando..."

'aqui eu fecho o fecho o banco de dados.
Sheets("FORM_ESTRATEGICO").Select
ActiveSheet.Protect Password:="bossjob"
ActiveWorkbook.Close SaveChanges:=True 'salvar True

end sub

Exit Sub

End If

 
Postado : 23/01/2015 12:24 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Pessoal,

Anexei um arquivo para melhor entendimento. Execute-o e veja a real necessidade.

 
Postado : 23/01/2015 2:06 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Preciso de muita ajuda nesse caso! Por favor, ajudem-me!

 
Postado : 24/01/2015 12:33 pm
(@lorenzon)
Posts: 355
Honorable Member
Topic starter
 

Pessoal,

Descupem-me pelo ''desespero'', mas a reincidencia das minhas respostas ocorrem, pois necessito muito de suprir essa necessidade.

O código abaixo já me ajudou muito, mas para a listbox carregar os dados da planilha que funciona como banco de dados, a mesma não pode ser fechada, ou seja, nesse caso eu fico com duas planilhas abertas. Isso não é legal, pois muitas pessoas aqui na empresa utilizarão esse sistema e, se eu deixar dessa forma, uma hora ou outra haverá conflito.

Vejam abaixo:

sub preencher
Dim lRow As Long
Dim Ultimalinha As Long

Dim matricula
matricula = TextBox1.Text & ComboBox44.Text

'aqui eu abro a planilha do banco de dados
Workbooks.Open ("C:Usersalisson.jalDownloadsBD_GERAL.xlsx")
ActiveSheet.Unprotect ("bossjob")
Application.Visible = False

'aqui eu apanho algumas informações dessa sheets
Sheets("FORM_ESTRATEGICO").Select
Application.Visible = False

ActiveSheet.Unprotect ("bossjob")
Application.Visible = False

With Sheets("FORM_ESTRATEGICO") '<- troque o nome da planilha, se necessário

Cells(3, "V") = matricula

If [v10] <> "não" Then

'XX

TextBox10.Text = [W12]
TextBox11.Text = [W13]
TextBox12.Text = [W14]
TextBox13.Text = [W15]
TextBox14.Text = [W16]

Sheets("FORM_ESTRATEGICO").Select
ActiveSheet.Protect Password:="bossjob"

Dim rng As Range

'aqui eu seleciono outra sheets, para preencher a listbox em questão.
Sheets("PDI").Select

With Sheets("PDI")
Set rng = .Range("A2:D54")
UserForm21.ListBox2.ColumnCount = rng.Columns.Count
UserForm21.ListBox2.RowSource = rng.Address(, , , True, rng.Parent.Range("A1"))

MsgBox "... Aguarde mais um pouco!", vbInformation, "Verificando..."

exit Sub

Essa listbox preenche toda a aaliação do empregado, mas na verdade eu preciso apenas das linhas que possuem a letra D.

Segue o anexo. A senha é bossjob.

Vale ressaltar que se a listbox for substituída por uma listview, a qual filtre apenas pelos registros D, ai ficará top!!

 
Postado : 24/01/2015 2:09 pm