|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Macro VBA Microsoft Excel
Buongiorno a tutti.
Tempo fa o creato una macro per excel per gestire delle consegne in base alle zone di consegna. Facendo delle prove ho notato che la macro gira abbastanza bene però volevo tutto sommato far controllare il codice in quanto è la prima grande macro che scrivo. Se qualcuno fosse disposto ad a controllare i codici che ho scritto posso inoltrarvi i dettagli. Vi comunico preventivamente che il ragionamento di funzionamento è abbastanza complesso e non vorrei farvi perdere tempo inutilmente. Vi ringrazio anticipatamente. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Dipende, quante righe di codice sono ?
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Sono diverse righe di codice...Le devo postare per dare almeno un'idea??
Ultima modifica di ciullo87 : 22-03-2010 alle 15:10. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Il mio consiglio è di postare solo le parti su cui nutri dubbi, ovviamente corredate da commenti significativi... |
|
|
|
|
|
|
#5 | |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Quote:
Quelli che ho io sono dei dubbi sull'insieme del codice...Che possa essere scritto in modo migliore e che la procedura possa essere più veloce...Posterò in seguito parte di codice che forse potrebbe essere migliorata...Grazie per il momento dell'attenzione... |
|
|
|
|
|
|
#6 | |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Quote:
Codice:
Private Sub UserForm_Activate()
Dim CL As Object
Dim frazione As String, nota1 As String, nota2 As String, comune As String, zona As String
Dim n As Integer
ListaZona.Clear
n = 0
ListaZona.ColumnWidths = 90
For Each CL In Worksheets("Zone_list").Range("A2:A14")
ListaZona.AddItem CL.Value
frazione = CL.Offset(0, 1).Value
nota1 = CL.Offset(0, 8).Value
nota2 = CL.Offset(0, 9).Value
comune = CL.Offset(0, 2).Value
zona = CL.Offset(0, 7).Value
ListaZona.List(n, 1) = frazione
ListaZona.List(n, 2) = nota1
ListaZona.List(n, 3) = nota2
ListaZona.List(n, 4) = comune
ListaZona.List(n, 5) = zona
n = n + 1
Next
If ListaZona.ListCount > 0 Then
ListaZona.ListIndex = 0
Else
Note1.Caption = ""
Note2.Caption = ""
LabelComune.Caption = ""
LabelZona.Caption = ""
End If
End Sub
Codice:
Private Sub TestoRicerca_Change()
Dim testodacercare As String
Dim CL As Object
Dim a As String, b As String, c As String, d As String, e As String
Dim frazione As String, nota1 As String, nota2 As String, comune As String, zona As String
Dim n As Integer
Dim colonna As Integer
testodacercare = TestoRicerca.Value
If testodacercare = "" Then
Exit Sub
End If
ListaZona.Clear
n = 0
ListaZona.ColumnWidths = 90
For Each CL In Worksheets("Zone").Range("A2:B1320")
If CL.Value Like "*" & testodacercare & "*" Then
colonna = CL.Column
If colonna = 1 Then
ListaZona.AddItem CL.Value
frazione = CL.Offset(0, 1).Value
nota1 = CL.Offset(0, 8).Value
nota2 = CL.Offset(0, 9).Value
comune = CL.Offset(0, 2).Value
zona = CL.Offset(0, 7).Value
End If
If colonna = 2 Then
ListaZona.AddItem CL.Offset(0, -1).Value
frazione = CL.Value
nota1 = CL.Offset(0, 7).Value
nota2 = CL.Offset(0, 8).Value
comune = CL.Offset(0, 1).Value
zona = CL.Offset(0, 6).Value
End If
ListaZona.List(n, 1) = frazione
ListaZona.List(n, 2) = nota1
ListaZona.List(n, 3) = nota2
ListaZona.List(n, 4) = comune
ListaZona.List(n, 5) = zona
n = n + 1
End If
Next
If ListaZona.ListCount > 0 Then
ListaZona.ListIndex = 0
Else
Note1.Caption = ""
Note2.Caption = ""
LabelComune.Caption = ""
LabelZona.Caption = ""
End If
End Sub
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Non ho ben chiaro cosa intendi per "va a scatti la valorizzazione della listbox". In ogni caso puoi trarre beneficio nel filling di controlli particolarmente onerosi ( a quanto vedo riempi una ListBox su più colonne con oltre un migliaio di righe... ) sospendendo temporaneamente l'aggiornamentro grafico dell'applicazione e ripristinandolo quando il filling è terminato. Ad es.:
Codice:
Application.ScreenUpdating = False
'...
'Fill Listbox
'...
Application.ScreenUpdating = True
|
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Quote:
Ieri ho modificato leggermente il caricamento... La colonna "A" contiene numeri (CAP delle città) mentre la colonna "B" testo (le frazioni da cercare) così ho usato la funzione IsNumeric e ora ho aggiunto le istruzioni che mi hai detto... Già meglio...Purtroppo sono tante righe da controllare... Grazie... |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Esempio > tabella dati su Foglio1 "A1:C30" : Codice:
Application.ScreenUpdating = False
With ListBox1
.ColumnHeads = True
.BoundColumn = 1
.ColumnCount = 3
.ColumnWidths = "50;100;100"
.RowSource = "Foglio1!A1:C30"
.ListStyle = fmListStyleOption
.ListIndex = 0
End With
Application.ScreenUpdating = True
|
|
|
|
|
|
|
#10 | |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 16
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:57.




















