Notifications
Clear all

Ajuda em criar relatório.

19 Posts
4 Usuários
0 Reactions
3,741 Visualizações
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Bom Dia Amigos,

tenho uma planilha e uma listview com 14 colinas e gostaria de gerar um relatório apenas de algumas colunas.
Porém dentro dessa listview tem vários filtros. Tem como gerar esse relatório apenas como que estiver filtrado na listview?

Desda já agradeço.

Edmaxy.

 
Postado : 22/01/2014 5:39 am
(@mairon)
Posts: 40
Trusted Member
 

No banco de dados vc tem as informações completas porém no listview só aparecem algumas colunas? seria assim?

 
Postado : 22/01/2014 7:36 am
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Máiron,

Na verdade com a listview está tudo correto...
O que preciso é pegar só alguma colunas da listview e salvar numa planilha de relatório, para que possa examinar ou imprimir se preciso.

Andei vendo alguns exemplos aqui do fórum porem não consegui adaptar nenhum ainda.

:?

 
Postado : 22/01/2014 7:47 am
(@mairon)
Posts: 40
Trusted Member
 

Tenta o seguinte

Dim i, j As Integer

'--seleciona entre linha 2 coluna 1 até linha 100 coluna 5 e apaga

Plan2.Range(Cells(2, 1), Cells(100, 5)).Select

Selection.ClearContents

'--loop para as linhas
For i = 1 To ListView1.ListItems.Count
Plan2.Cells(i + 1, 1) = ListView1.ListItems(i).Text

'--loop para as colunas
For j = 1 To 1

'---- Plan2.Cells(i + 1, 2) --> o nº 2 é qual coluna da planilha será registrada
'----.ListSubItems(1).Text ---> o nº 1 é qual coluna do listview será gravada na planilha

Plan2.Cells(i + 1, 2) = ListView1.ListItems(i).ListSubItems(1).Text
Plan2.Cells(i + 1, 3) = ListView1.ListItems(i).ListSubItems(2).Text

Next j

Next i

 
Postado : 22/01/2014 8:51 am
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Máiron

adaptei o código e ficou assim:
Private Sub CommandButton1_Click()

Dim i, j As Integer

'--seleciona entre linha 2 coluna 1 até linha 100 coluna 5 e apaga

Plan2.Range(Cells(2, 1), Cells(100, 5)).Select

Selection.ClearContents

'--loop para as linhas
For i = 1 To IsLista.ListItems.Count
Plan2.Cells(i + 1, 1) = IsLista.ListItems(i).Text

'--loop para as colunas
For j = 1 To 1

'---- Plan2.Cells(i + 1, 2) --> o nº 2 é qual coluna da planilha será registrada
'----.ListSubItems(1).Text ---> o nº 1 é qual coluna do listview será gravada na planilha

Plan2.Cells(i + 1, 2) = IsLista.ListItems(i).ListSubItems(1).Text
Plan2.Cells(i + 1, 3) = IsLista.ListItems(i).ListSubItems(2).Text

Next j

Next i

End Sub

porém na linha:
'For i = 1 To IsLista.ListItems.Count' da erro de compilação e a mensagem "variável não definida"

Pior que em outro exemplo que testei deu o mesmo erro.

 
Postado : 22/01/2014 10:17 am
(@mairon)
Posts: 40
Trusted Member
 

eita, se puder disponibiliza uma cópia aqui pra verificação, substituindo dados confidenciais por fictícios

 
Postado : 22/01/2014 11:28 am
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Olá Máiron,

segue copia da planilha adaptada que baixei do Blog do Tomás, que muitos aqui conhecem.

Está um pouco desorganizado os códigos pois não sei nada de programação e tudo que mudei nela fui vendo na net mesmo. :mrgreen:

At.

 
Postado : 23/01/2014 12:59 pm
(@mairon)
Posts: 40
Trusted Member
 

Ops, malz a demora, estava viajando...pois então cara, dei uma olhada aqui, montei uma outra planilha e coloquei o mesmíssimo código que vc usou, esse acima que vc deu uma adaptada, funcionou perfeitamente, aconselho a rever os códigos e/ou objetos pra trás

 
Postado : 27/01/2014 6:02 pm
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Bom dia Máiron,

teria como você postar essa que você colocou seu código para que eu possa comparar e ver onde estou errando?

Abraços.

 
Postado : 28/01/2014 5:00 am
(@bilokas)
Posts: 168
Reputable Member
 

Private Sub CommandButton1_Click()

TextBox1 = "Exemplo"

lastRow = Plan1.Cells(Rows.Count, "a").End(xlUp).Row
ListView1.ListItems.Clear
' Adiciona itens
For x = 2 To lastRow
If UCase(Plan1.Cells(x, 1)) Like "*" & UCase(TextBox1) & "*" Then

Set li = ListView1.ListItems.Add(Text:=Plan1.Cells(x, "a").Value)
li.ListSubItems.Add Text:=Plan1.Cells(x, "b").Value
li.ListSubItems.Add Text:=Plan1.Cells(x, "c").Value
li.ListSubItems.Add Text:=Plan1.Cells(x, "d").Value

End If
Next
End Sub

Legenda:

TextBox1 é o seu critério para os filtros que pode ser substituído pelos seus critérios;
ListView1 é o seu ListView, mude para o nome correto;
O número 1 verde é a coluna em que vai ser feita a busca. Entenda 1 como coluna A

Coloquei a rotina num botão, mas pode ser posto em outro lugar.

 
Postado : 28/01/2014 6:51 am
(@bilokas)
Posts: 168
Reputable Member
 

Imagine essa rotina num botão:

Private Sub Gerar_Relatorio_Click()
Dim xlApp As Object
Dim xlWb As Object
Dim xlWs As Object

'Cria um novo documento do excel
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add
Set xlWs = xlWb.Worksheets(1)

xlApp.Visible = True
xlApp.UserControl = True

'Cria as colunas e determina a largura inicial
xlWs.Columns(1).ColumnWidth = 40
xlWs.Columns(2).ColumnWidth = 12
xlWs.Columns(3).ColumnWidth = 40
xlWs.Columns(4).ColumnWidth = 20

xlWs.Rows(1).RowHeight = 30

'Altera o tamanho da fonte
xlWs.Range("A1:Z1000").Font.Size = 10

'Configura um cabeçalho na linha 1, centralizando e com quebra de texto automatico
With xlWs.Range("A1:Z1")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

'Nomeia o cabeçalho
xlWs.Cells(1, 1).Value = "COLUNA A"
xlWs.Cells(1, 2).Value = "COLUNA B"
xlWs.Cells(1, 3).Value = "COLUNA C"
xlWs.Cells(1, 4).Value = "COLUNA D"

'Puxa os dados do ListView (trocar o nome do listview para o seu)
For Row = 2 To ListView1.ListItems.Count + 1
For Col = 1 To ListView1.ColumnHeaders.Count
If Col = 1 Then
xlWs.Cells(Row, Col).Value = ListView1.ListItems(Row - 1).Text
Else
xlWs.Cells(Row, Col).Value = ListView1.ListItems(Row - 1).SubItems(Col - 1)
End If
Next
Next Row
End Sub

 
Postado : 28/01/2014 7:00 am
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Olá bilokas,

Infelizmente deu o mesmo erro que deu em outros códigos que tentei adaptar.
Na linha: "For ROW = 2 To IsLista.ListItems.Count + 1" aparece a mensagem "Variável naõ definida e em seguida a mensagem "Não é possível executar o código no modo interromper".

Alguma luz para a situação? :?

 
Postado : 28/01/2014 7:44 am
(@bilokas)
Posts: 168
Reputable Member
 

Edmaxx, eu não sou muito bom para explicar. Mas quero ajudar, então fiz um arquivo de exemplo com a rotina de filtro e exportação.

Segue em anexo para você dar uma olhada e desculpe se não sei explicar direito.

 
Postado : 28/01/2014 8:28 am
(@edmaxy)
Posts: 54
Trusted Member
Topic starter
 

Bilokas,

fico grato pela sua boa-vontade em querer ajudar...
Realmente funciona mas eu quero adaptar apenas a parte que gera o relatório(já que o restante está perfeito) dá esse erro que mencionei.

creio que seja algum conflito com o código já existente...alguma linha se repetindo ou algo assim...Não sei quase nada de VBA rs...

Mas vamos conversando e tentando chegar a um acordo... :D

 
Postado : 28/01/2014 8:53 am
(@bilokas)
Posts: 168
Reputable Member
 

No meu atrabalho eu nao tenho como baixar nada.

Cola aqui como codes separados suas rotinas de preencher e filtrar o listview e de exportar, pra ver se da pra te ajudar.

 
Postado : 28/01/2014 9:05 am
Página 1 / 2