PDA

View Full Version : [VBA/EXCELL'07] Scroll bar Orizzontale e ListBox


leomac
10-11-2009, 10:49
Salve a tutti
ho un problema con delle ListBox.
Una ListBox prende dati da un database di excel. Ora se il testo è troppo lungo, non riesce ad entrare all'interno della ListBox. Se non volessi allungare quest'ultima, è possibile associare una ListBox ad una scorllbar orizzontale oppure c'è qualche opzione che la fa comparire normalmente come avviene per la scrollbar verticale??
grazie.

ciaociao ;)

MarcoGG
10-11-2009, 12:25
http://support.microsoft.com/kb/192184

leomac
11-11-2009, 11:04
in effeti ero già passato per il supporto microsoft (oltre altri siti), ma senza risultato. O meglio mi ero impantanato nel TextWidth che in VBA non esiste :mc:
tra l'altro devo ammettere che il codice è abbastanza complesso per un nabbo come me...
Posto il codice :
Option Explicit

Private Declare Function SendMessageByNum Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const LB_SETHORIZONTALEXTENT = &H194

Private Sub Command1_Click()
Dim s As String
Static x As Long
s = InputBox("Please enter any text", "List scroll", _
"this is a simple scrollbar sample for demonstration purposes")
ListBox1.AddItem s
If x < TextWidth(s & " ") Then
x = TextWidth(s & " ")
If ScaleMode = vbTwips Then _
x = x / Screen.TwipsPerPixelX ' if twips change to pixels
SendMessageByNum ListBox1.hwnd, LB_SETHORIZONTALEXTENT, x, 0
End If
End Sub

zuper
11-11-2009, 11:18
mi sa che con excel l'unica cosa è appunto allargare la cella :)

leomac
11-11-2009, 12:34
spero di no zupper mi verrebbe un Form veraAamente grande. :cry:
Nel frattempo vò in cerca di qualche artificio nei siti made in doichland.
I tedeschi alcune volte ne sanno 1a + del diavolo. :ave:
a dopo

zuper
11-11-2009, 13:52
uhm a caso ho provato ad allargare la cella...

poi guardi la lista...ed è ok

ho rimpicciolito la cella...

e la list box è rimasta grande :)

(ho il 2007 :))

leomac
11-11-2009, 15:17
zupper mica ho capito cosa dici :confused:
non dipende dalla cella di excel se nella listbox il testo entra o no :fagiano:
che c'entra la cella??
il mio problema è il testo che non entra nella listbox. Se allargo la listbox l'userform diventa grande. Per evitare finestre d'userform enormi cerco una scroll orizzontale per la listbox.

MarcoGG
12-11-2009, 08:12
in effeti ero già passato per il supporto microsoft (oltre altri siti), ma senza risultato. O meglio mi ero impantanato nel TextWidth che in VBA non esiste :mc:


Ops ! :p
In effetti il codice che ti ho linkato era per VB6. Purtroppo in VBA TextWidth non è disponibile, ma hai ancora qualche cartuccia da sparare.
La cosa forse più semplice che puoi fare, dato che parlavi di UserForm, è proprio quella di impostare la scrollbar orizzontale a livello di UserForm, mentre la ListBox andrà allargata quel tanto da poter contenere tutti gli elementi ( sta a te decidere quanto ). In questo modo :

Private Sub UserForm_Initialize()

ListBox1.Left = 5
ListBox1.Top = 5
ListBox1.Width = 2000

Me.Width = 500

Me.ScrollBars = fmScrollBarsHorizontal
Me.KeepScrollBarsVisible = fmScrollBarsHorizontal
Me.ScrollWidth = ListBox1.Width + ListBox1.Left * 2

End Sub

la UserForm può "contenere" qualsiasi ListBox, senza dover essere ridimensionata... ;)

zuper
12-11-2009, 15:23
zupper mica ho capito cosa dici :confused:
non dipende dalla cella di excel se nella listbox il testo entra o no :fagiano:
che c'entra la cella??
il mio problema è il testo che non entra nella listbox. Se allargo la listbox l'userform diventa grande. Per evitare finestre d'userform enormi cerco una scroll orizzontale per la listbox.

sorry avevo letto forse troppo in fretta io :d
nn avevo capito stessi facendo uno userform :)

avevo inteso le listbox tipo quelle del validate ma su un foglio normale excel :)

leomac
20-11-2009, 15:52
Marco ... ho risolto con la prorpietà ColunmWidths impostandola a valori alti compare direttamente la scrollbar orizzontale in fondo alla listbox.
Difatti immettendo una listbox con una larghezza molto bassa tale scroll compariva direttamente.
Cmq grazie per le risposte (anche a zupper :D ).

ciaociao

MarcoGG
20-11-2009, 22:49
Marco ... ho risolto con la prorpietà ColunmWidths impostandola a valori alti compare direttamente la scrollbar orizzontale in fondo alla listbox.
Difatti immettendo una listbox con una larghezza molto bassa tale scroll compariva direttamente.


Già, ColumnWidths, non ci avevo pensato. :)
In ogni caso resta il fatto che, anche così, devi dare un valore arbitrario, "abbastanza grande" da contenere l'item più lungo, ma non eccessivo, altrimenti ottieni un margine bianco inutile a destra...

leomac
01-12-2009, 16:18
Marco alla fine ho risolto così:
Dim CLIENTE As Object
Dim LungMax1 As Integer
Dim LungMax2 As Integer
Dim LungMax3 As Integer

LungMax1 = 0
LungMax2 = 0
LungMax3 = 0

For Each CLIENTE In Range(Range("A3"), Range("A3").End(xlDown))
If CLIENTE.Text = "" Then Exit For
CLIENTE.Select
If ActiveCell.Offset(0, 14) = "SI" Then
ListBox1.AddItem ActiveCell.Offset(0, 1)
If Len(ActiveCell.Offset(0, 1).Text) > LungMax1 And Len(ActiveCell.Offset(0, 1).Text) > 12 Then
LungMax1 = Len(ActiveCell.Offset(0, 1).Text)
ListBox1.ColumnWidths = LungMax1 * 5.5
End If
ListBox2.AddItem ActiveCell.Offset(0, 2)
If Len(ActiveCell.Offset(0, 2).Text) > LungMax2 And Len(ActiveCell.Offset(0, 2).Text) > 12 Then
LungMax2 = Len(ActiveCell.Offset(0, 2).Text)
ListBox2.ColumnWidths = LungMax2 * 5.5
End If
ListBox3.AddItem CLIENTE
If Len(CLIENTE.Text) > LungMax3 And Len(CLIENTE.Text) > 12 Then
LungMax3 = Len(CLIENTE.Text)
ListBox3.ColumnWidths = LungMax3 * 5.5
End If
End If
Next

la cosa pare che funga...
1 saluto e thx