CRIANDO LISTVIEW VIA CODIGO...

DANLEONHART 14/02/2012 08:09:16
#394643
Pessoal...

Como faço para criar um ListView via código sem precisar referênciar a biblioteca/controle ???

Tentei assim:

Sub Lista()
Dim objLst As Object

Set objLst = CreateObject([Ô]MSComctlLib.ListViewCtrl.2[Ô], [Ô]MSCOMCTL.OCX[Ô])
Set objLst = Controls.Add([Ô]MSComctlLib.ListViewCtrl.2[Ô], [Ô]MyLst[Ô], Form1)


With objLst
.Left = 75
.Top = 240
.Height = 2500
.Width = 2500
.Visible = True

End With

End Sub


Mas deu erro:
[txt-color=#e80000]Erro: 462
The remote server machine does not exist or is unavailable.[/txt-color]

e aponta para a linha:
Set objLst = CreateObject([Ô]MSComctlLib.ListViewCtrl.2[Ô], [Ô]MSCOMCTL.OCX[Ô])

MARCELO.TREZE 14/02/2012 08:54:43
#394647
Faz assim Danleon

Option Explicit
Dim WithEvents objLst As VBControlExtender


Sub Lista()
Licenses.Add [Ô]MSComctlLib.listviewctrl[Ô]

Set objLst = Controls.Add([Ô]MSComctlLib.listviewctrl[Ô], [Ô]MyLst[Ô], Form1)
With objLst
.Left = 75
.Top = 240
.Height = 2500
.Width = 2500
.Visible = True
End With

End Sub
MARCELO.TREZE 14/02/2012 09:05:20
#394650
porém existe uma questão:

Observe a linha de código : Dim WithEvents ctltree As VBControlExtender

A fim de programar os eventos para um controle não referenciado, devemos declarar uma variável objeto usando a chave WithEvents como um objeto VBControlExtender e definir a variável objeto pela referência retornada via método Add. A seguir devemos usar o evento ObjectEvent do objeto VBControlExtender .

Assim para programar um evento do controle Listview inserido devemos usar o seguinte código:(No caso estamos programando o evento Click )

Private Sub objlst_objectEvent(info As EventInfo)
Select Case info
Case [Ô]Click[Ô]
MsgBox [Ô]Voce clicou no controle [Ô]
End Select
End Sub


Você só não pode associar um controle intrinseco do VB á variável VBControlExtender pois ocorrerá um erro de tipo incompatível ( Mismatch error).

obs: códigos adaptados usando com referência o site MACORATTI
DANLEONHART 14/02/2012 10:21:13
#394665
Valeu Marcelo !

Na verdade o que está acontecendo é que tenho uma planilha que tem um UserForm com um ListView...como na minha máquina eu apontei o controle, funciona perfeito !

Só que vou enviar a planilha para os demais funcionários, então estou tentando fazer com que não precise referenciar o controle, ou seja, creio que criando via código deve dá certo.

Se tiver algo mais viável diz aê, beleza ?!
MARCELO.TREZE 14/02/2012 10:23:19
#394666
entendi é VBA
DANLEONHART 14/02/2012 10:44:41
#394670
Correto amigo !
Mas vou tentar assim mesmo, pois a diferença é pouquíssima.
DANLEONHART 14/02/2012 21:47:57
#394766
é... não deu certo no VBA...não existe nele a classe[txt-color=#0000f0] VBControlExtender.[/txt-color]
Tópico encerrado , respostas não são mais permitidas