|
|
|
![]() |
|
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 14: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: 11:48.