Fabio, não me lembro em qual dos Forum já comentei, talvez sejaem outro, mas é o seguinte.
A primeira coisa que devemos fazer ao resolvermos adaptar rotinas ou até mesmo modelos completos para o nosso projeto, é ajustar os nomes dos controles para nomes que ao nos depararmos com os mesmos nas rotinas, saibamos de qual estamos lidando, por exemplo, você utiliza o nome "lstLista" em varios formulários, e alguns são do tipo ListView e outro ListBox, isto acaba confundindo e dificultando quando precisamos fazer alguma analise para se localizar erros, portanto procure ajustar os nomes, evite nomes genericos e iguais paravários controles, mesmo que em formulários diferentes.
Quanto a questão Tamanho Automático das Colunas, em um testee rápido no último exemplo que anexou, funcionou corretamente com os LV em MultiPages, então proceda da forma abaixo especificada, e faça os testes:
1°) Crie um Novo Modulo e renomeie para ModPublico;
2°) Cole as instruções abaixo neste novo Modulo :
'INICIO - REDIMENSIONAR AUTOMATICAMENTE COLUNAS DO LISTVIEW
'TamanhoColAutomatico - 'Define os Tamanhos das colunas automaticamente
Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const LVM_FIRST = &H1000
Public Const LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30)
Public Const LVSCW_AUTOSIZE = -1
Public Const LVSCW_AUTOSIZE_USEHEADER = -2
'FIM - REDIMENSIONAR AUTOMATICAMENTE COLUNAS DO LISTVIEW
As instruções acima são as mesmas que utilizamos para o redimensionamento das Colunas do LV, as únicas alterações que fiz, foi trocar a condição "Private" para "Public", ou seja, desta forma estará valendo para todo o conjunto, não sendo necessário repeti-las em todos os formulários.
3°) Procure nos formulários e apague estas instruções que passamos para o Modulo ModPublico, só deixando as que estão neste modulo.
4°) Ajuste as rotinas que fazem a chamada para o redimensionamento das colunas especificando cada LV, nesta parte você tem de ver quais os nomes deu aos seus controles, por exemplo :
No UserForm1 você tem o controle LV na Page "Cadastro de Clientes" com o nome padrão "ListView1", então a rotina para este controle ficaria :
Observe no nome da rotina, que no final coloquei LV_1, assim sei de qual controle estou lidando.
Private Sub TamanhoColAutoLV_1()
Dim Column As Long
Dim Counter As Long
Counter = 0
For Column = Counter To ListView1.ColumnHeaders.Count - 2
SendMessage ListView1.hWnd, LVM_SETCOLUMNWIDTH, Column, LVSCW_AUTOSIZE_USEHEADER
Next
End Sub
Como citou o nome ListView4, neste caso construimos a rotina para este controle da seguinte forma :
Private Sub TamanhoColAutoLV_4()
Dim Column As Long
Dim Counter As Long
Counter = 0
For Column = Counter To ListView4.ColumnHeaders.Count - 2
SendMessage ListView4.hWnd, LVM_SETCOLUMNWIDTH, Column, LVSCW_AUTOSIZE_USEHEADER
Next
End Sub
Procedendo desta forma, onde nós tinhamos a chamada a rotina :
Call TamanhoColAutomatico, alteramos para as expecificas de cada controle, Call TamanhoColAutoLV_1 , Call TamanhoColAutoLV_4 e assim por diante.
Espero ter conseguido explicar corretamente, faça as alterações e teste.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 18/03/2012 12:16 pm