|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
[VBA/EXCELL'07] Scroll bar Orizzontale e ListBox
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
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
tra l'altro devo ammettere che il codice è abbastanza complesso per un nabbo come me... Posto il codice : 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
Ultima modifica di leomac : 11-11-2009 alle 12:06. Motivo: modifica errore ortografia |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
mi sa che con excel l'unica cosa è appunto allargare la cella
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
spero di no zupper mi verrebbe un Form veraAamente grande.
Nel frattempo vò in cerca di qualche artificio nei siti made in doichland. I tedeschi alcune volte ne sanno 1a + del diavolo. a dopo |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
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
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
zupper mica ho capito cosa dici
non dipende dalla cella di excel se nella listbox il testo entra o no 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. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
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 : Codice:
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
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
nn avevo capito stessi facendo uno userform avevo inteso le listbox tipo quelle del validate ma su un foglio normale excel
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 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. Cmq grazie per le risposte (anche a zupper ciaociao |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
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... |
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 49
|
Marco alla fine ho risolto così:
Codice:
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
1 saluto e thx |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:54.




















