› Sviluppare funzionalita su Microsoft Office con VBA › Comando Archia " Ciclo per registrare 10 righe di dati in Colonna"
-
AutoreArticoli
-
Buona sera a tutti voi,
sono quasi a fine del gestionale che mi son creato per lavoro, anche grazie al vostro aiuto e hai vostri consigli quando ne avevo bisogno,
ma mi trovo a riscrivere, e chiedere di nuovo il vostro preziosissimo aiuto.
in pratica nella userform e nella Multipagina "Manodopera" ho una serie di textBox dove inserisco dati che successivamente archivio nel foglio GiornaleLavori.
il codice come l'ho scritto mi potrebbe anche andar bene. ma riscontro un rallentamento perchè ogni volta il codice così come l'ho scritto fa sempre il controllo per trovare l'ultima riga libera,
in pratica ora il foglio non contiene molti dati ed è già lento di suo, figuriamoci quando ho un centinaio/ migliaio di righe già piene ; ci metterà un eternità.
ora chiedo a voi se gentilmente potete darmi una mano a trovare un modo diverso.
presumo che ci voglia un codice che ripete il ciclo, ma ancora non sono tanto autonomo per poterlo creare in modo corretto e che mi permette di archiviare dati in modo più veloce.
Nota: va preso in considerazione anche che il codice così come l'ho scritto fa il controllo se le textBox (OPERAIO 1-2-3-4-5-6-7-8-9-10) e piena e numera in automatico il numero progressivo nella label a Sx delle textoBox.
Spero di esser stato chiaro nella spiegazione, cmq allego il file per farvi vedere come funziona e il codice che ho scritto io.
Magari provate anche voi a riempire tutte le textBox presenti sulla Userform e cliccare sul tasto "Archivia", e vedete che ci mette molto tempo nel registrare i dati sul foglio Giornale lavori. Date un occhio al codice, che sicuramente per il vostro livello di conoscenza è sbagliato, o perlomeno in parte.
ringrazio per l'aiuto e resto in attesa di soluzione. .
Private Sub CommandButton10_Click() Dim RowCount As Long '-------------------------------------------------------------------------------Codice Archivia su Gestionale RowCount = Worksheets("Giornalelavori").Range("B" & Rows.Count).End(xlUp).Row With Worksheets("Giornalelavori").Range("B1") .Offset(RowCount, 0).Value = ordine1.Caption .Offset(RowCount, 1).Value = CDate(DataContr.Value) .Offset(RowCount, 2).Value = ComboBox7.Value .Offset(RowCount, 3).Value = Cantiere.Value .Offset(RowCount, 4).Value = ComboBox5.Value .Offset(RowCount, 5).Value = ComboBox6.Value .Offset(RowCount, 6).Value = Manodopera.Caption .Offset(RowCount, 7).Value = Costo1.Value .Offset(RowCount, 9).Value = ComboBox99.Value .Offset(RowCount, 11).Value = Opera.Value .Offset(RowCount, 12).Value = Wbs.Value .Offset(RowCount, 13).Value = Task_Lavorazione.Value .Offset(RowCount, 14).Value = attivita1.Value .Offset(RowCount, 16).Value = UM1.Caption .Offset(RowCount, 17).Value = ora1.Value .Offset(RowCount, 21).Value = OPERAIO1.Value .Offset(RowCount, 20).Value = Qualifica1.Value .Offset(RowCount, 22).Value = Prezzo1.Value End With If OPERAIO2.Text <> "" Then RowCount = Worksheets("Giornalelavori").Range("B" & Rows.Count).End(xlUp).Row With Worksheets("Giornalelavori").Range("B1") .Offset(RowCount, 0).Value = Label_OP_2.Caption .Offset(RowCount, 1).Value = CDate(DataContr.Value) .Offset(RowCount, 2).Value = ComboBox7.Value .Offset(RowCount, 3).Value = Cantiere.Value .Offset(RowCount, 4).Value = ComboBox5.Value .Offset(RowCount, 5).Value = ComboBox6.Value .Offset(RowCount, 6).Value = Manodopera.Caption .Offset(RowCount, 7).Value = Costo2.Value .Offset(RowCount, 9).Value = ComboBox99.Value .Offset(RowCount, 11).Value = Opera.Value .Offset(RowCount, 12).Value = Wbs.Value .Offset(RowCount, 13).Value = Task_Lavorazione.Value .Offset(RowCount, 14).Value = attivita2.Value .Offset(RowCount, 16).Value = UM2.Caption .Offset(RowCount, 17).Value = ora2.Value .Offset(RowCount, 21).Value = OPERAIO2.Value .Offset(RowCount, 20).Value = Qualifica2.Value .Offset(RowCount, 22).Value = Prezzo2.Value End With Else End Ifallego il file per visionare quanto appena scritto.
Allegati:
You must be logged in to view attached files.Ciao
Devi tener presente che ogni"scrittura" sul foglio fa perdere tempo. Non entro nel merito del codice (ognuno di noi ha un proprio stile e se il risultato è quello che si vuole, allora va bene comunque) ma penso che si potrebbe velocizzare assegnando ad una matrice i valori da scrivere nelle celle da .Offset (RowCount, 0) fino a fino a .Offset(RowCount, 14) e poi scrivere indicando l'intervallo. Continuare poi con gli altri.
Altro sistema (più sbrigativo ma comporta un po' di lavoro prima) potrebbe essere quello di evitare i salti di colonna ed assegnare i valori in sequenza alla matrice e poi scrivere nell'intero intervallo)
Ciao,
Mario
Ciao Marius Grazie per la risposta, potresti propormi un codice che fa la stessa cosa del codice che ho scritto io? E magari più sintetico e che fa il controllo dal basso verso l'alto? Forse ci mette meno tempo?
Il problema non è tanto ora che ci sono pochi dati inseriti ma quando avrò mille righe, finché controlla tutti i cicli ci mette un eternità, e vorrei evitarlo. Potresti darmi una soluzione?
Anche per imparare magari nuove soluzioni e procedimenti.
Grazie
Ciao
Ripeti per 10 volte questo ciclo
1 .Offset(RowCount, 0).Value = ordine1.Caption
10 .Offset(RowCount, 1).Value = CDate(DataContr.Value)
10 .Offset(RowCount, 2).Value = ComboBox7.Value
10 .Offset(RowCount, 3).Value = Cantiere.Value
10 .Offset(RowCount, 4).Value = ComboBox5.Value
10 .Offset(RowCount, 5).Value = ComboBox6.Value
10 .Offset(RowCount, 6).Value = Manodopera.Caption
1 .Offset(RowCount, 7).Value = Costo1.Value
10 .Offset(RowCount, 9).Value = ComboBox99.Value
10 .Offset(RowCount, 11).Value = Opera.Value
10 .Offset(RowCount, 12).Value = Wbs.Value
10 .Offset(RowCount, 13).Value = Task_Lavorazione.Value
1 .Offset(RowCount, 14).Value = attivita1.Value
1 .Offset(RowCount, 16).Value = UM1.Caption
1 .Offset(RowCount, 17).Value = ora1.Value
1 .Offset(RowCount, 21).Value = OPERAIO1.Value
1 .Offset(RowCount, 20).Value = Qualifica1.Value
1 .Offset(RowCount, 22).Value = Prezzo1.ValueLe righe dove vedi il 10 sono identiche tutte le volte mentre le altre cambiano
Devi trovare il sistema che, pur cambiando di volta in volta, ogni ciclo possa assegnare alla matrice il valore giusto. Ti passo un esempio (ma devi studiarci sopra per individuare il numero del controllo). Inserisci In UserForm1 un pulsante (dovrebbe venire il n°35) ed assegnagli questo codice.
Private Sub CommandButton35_Click()Dim obj As ControlFor Each obj In UserForm1.Frame2.ControlsIf TypeOf obj Is MSForms.TextBox Thenobj.Value = TrueStopEnd IfNextEnd SubHo messo un stop per farti notare che tutte le TextBox avranno il valore True man mano che avanzi.
Non è semplicissimo ma sicuramente alla tua portata.
Ciao,
Mario
Buona giornata, @dodi;
ho analizzato l'Evento:
- Private Sub UserForm_Initialize()
avrei una domada da porti, ho notato che avevi inserito le Istruzioni:
- all'inizio Application.ScreenUpdating = False e alla fine Application.ScreenUpdating = True
poi le hai rese come commento, c'è un motivo particolare?
Queste Istruzioni migliorano i tempi di elaborazione.Inoltre ho notato che l'Istruzione:
- lRiga = .Range("Z" & .Rows.Count).End(xlUp).Row + 1
è ripetuta per ogni "Operaio"; considerando che la riga è sempre la stessa, c'è un motivo specifico per doverla ripetere?A margine di quanto sopra, avrei una cortesia da chiederti, come si ottiene la visualizzazione dei Codici VBA che hai proposto:

La visualizzazione che riesco ad ottenere è:
Private Sub CommandButton10_Click()Dim RowCount As Long'-------------------------------------------------------------------------------Codice Archivia su GestionaleRowCount = Worksheets("Giornalelavori").Range("B" & Rows.Count).End(xlUp).RowWith Worksheets("Giornalelavori").Range("B1")decisamente meno elegante.
Grazie dell'attenzione che potrai dedicarmi.
Buon Lavoro.
Giuseppe
Giuseppe Buongiorno
la stringa
Application.ScreenUpdating = False e alla fine Application.ScreenUpdating = True
le ho rese come commento perchè quando cambio pagina sulla Multipage devo cambiare anche foglio,
e se lascio attivi Application. ScreeUpdating ecc ecc non mi cambia foglio excel.
poi per quanto riguarda
Inoltre l'Istruzione:
- lRiga = .Range("Z" & .Rows.Count).End(xlUp).Row + 1la ripeto perchè, a mia conoscenza è l'unico modo per registrare tutte le righe degl'operai in seguenza, scrivendo la prima riga e poi se la TextBox Operaio2 e piena trova la riga vuota successiva sul foglio e archivia e così via.
il codice che ho proposto sull'editor del forum e solo un pezzo. il resto lo trovi sul tasto "Archivia" della Userform del file che ho allegato. magari prova a lanciare la Userform, compila tuyye le TextBox e combobox presenti e poi clicca sul tasto Archia e vedi quello che fa e quello che mi occorre.
In effetti lo riconosco anche io che è un metodo poco elegante, poco veloce come procedimento e anche lento nell'archiviare i dati sul foglio Excel; per quello mi ero rivolto a voi esperti.
intanto ringrazio anche Marius per la sua soluzione che provo tra un pò a mettere in atto e cerco di vedere se e più funzionale e veloce. Sperando di riuscire a capire la sua procedura Proposta.
Ma se hai da proporre qualcosa ben venga, e te ne sarei grato.
saluti.
Marius Buon Giorno
in pratica le righe che te hai segnato con 10 si devono ripetere tutte le volte,
perchè sono dei dati ripetitivi per ogni operaio.
in pratica corrispondono :
10 .Offset(RowCount, 1).Value = CDate(DataContr.Value) 'alla data
10 .Offset(RowCount, 2).Value = ComboBox7.Value 'alle condizioni meteo
10 .Offset(RowCount, 3).Value = Cantiere.Value 'al cantiere
10 .Offset(RowCount, 4).Value = ComboBox5.Value 'al codice Cantiere10 .Offset(RowCount, 5).Value = ComboBox6.Value 'al tipo di registrazione
10 .Offset(RowCount, 6).Value = Manodopera.Caption 'al numero d'ordine in progrressivo
10 .Offset(RowCount, 9).Value = ComboBox99.Value 'all'impresa di appertenenza
10 .Offset(RowCount, 11).Value = Opera.Value 'all'opera
10 .Offset(RowCount, 12).Value = Wbs.Valuealla 'WBS
10 .Offset(RowCount, 13).Value = Task_Lavorazione.Value 'all'attività Lavorativaperchè questo ripetere?
perchè ogni operaio che registro ,lavorano nello stesso giorno, riscontrano le stesse condizioni meteo, lavorano nello stesso cantiere e lavorano alla stessa Opera, WBS e Task_Lavorazione, e questi a loro volta sono individauti come tipo di registrazione,
quindi ho strutturato il gestionale per gestire squadre di persone e nel foglio Giornale di lavori devo avere per ogni riga i seguenti dati per analizzare a fine mese i singoli costi sostenuti per eseguire determinate attività nei cantieri e capire cosa possa aver influito di positivo o negativo per la produzione o mancata produzione, per quello registro anche il meteo, fattore importante per le lavorazioni.
spero di aver chiarito il tuo dubbio e del perchè si ripetono le voci che te hai segnato con 10.
sto provando a completare il tuo codice ma non ho capito cosa intendi per
(Ho messo un stop per farti notare che tutte le TextBox avranno il valore True man mano che avanzi)
potresti gentilmente darmi uno spunto in più.
ti ringrazio per la collaborazione. e risaluto Giuseppe che ha visto il mio grido di aiuto. ahahahahh
saluti
errata corrige.
questa stringa corrisponde al Centro di Costo
10 .Offset(RowCount, 6).Value = Manodopera.Caption
saluti e scusa
Ciao
Torno adesso dal dentista
e non sono in grado di concentrarmi. Scusami.Aggiungo solo una cosa: potresti ciclare i Controlli in base al loro numero, per esempio (in questo caso rinomina il pulsante, ma si può fare anche con le TextBox):
For i = 1 To 20
Controls("CommandButton" & i).Caption = "Bouton "& i
Next iOra prendo un antidolorifico e cerco di dormire un po'.
Ciao,
Mario
Ciao Marius tranquillo e pensa alla salute.
Intanto provo con l'esempio del ciclo che mi hai suggerito, spero di risolvere, Cmq ti aggiorno, e quando stai bene e sei nel pieno delle tue forze fisiche e mentali mi darai una mano eventualmente non risolvo.
Saluti e in bocca al lupo per i tuoi denti. Ti auguro di cuore buona salute

Marius
Buon giorno,
Non so proprio come mettere in funzione il ciclo che mi hai suggerito,
Te lo chiedo per gentilezza e cortesia, se potresti rimandarmi il file con il codice rivisto? Forse facciamo prima e poi vedo di capirlo per bene, perché sto provando ma non so come far capire al codice che determinate textbox , combobox e label se sono piene devono inserire nel foglio i valori presenti in essi.
Te ne sarei grato.
Grazie
Ciao Marius
spero che stai meglio oggi.
cmq come ti avevo accennato stamani sbatto la testa al muro perchè non riesco a comporre in modo corretto e a mettere insieme i tuoi suggerimenti.
anche perchè mi va in errore.
sicuramente sbaglio qualcosa, ma come detto ho grosse difficoltà a scrivere il codice in modo corretto e far capire come archiviare i dati sul foglio,
allego quello che son riuscito a mettere insieme ma come vedi ho capito molto poco,
Private Sub CommandButton35_Click()
Dim obj As Controls
For Each obj In UserForm1.Frame2.Controls
If TypeOf obj Is MSForms.TextBox Then
obj.Value = True
For i = 1 To 10' Controls("CommandButton" & i).Caption = "Bouton " & i
Controls("DataContr" & i).Text = "DataContr" & i
Controls("ComboBox7" & i).Text = "ComboBox7" & i
Controls("Cantiere" & i).Text = "Cantiere" & i
Controls("ComboBox5" & i).Text = "ComboBox5" & i
Controls("ComboBox6" & i).Text = "ComboBox6" & iIf OPERAIO1.Text <> "" Then
Controls("DataContr" & i).Text = "DataContr" & i
Controls("ComboBox7" & i).Text = "ComboBox7" & i
Controls("Cantiere" & i).Text = "Cantiere" & i
Controls("ComboBox5" & i).Text = "ComboBox5" & i
Controls("ComboBox6" & i).Text = "ComboBox6" & i
'Controls("CommandButton35" & i).Caption = " Archivia" & iEnd If
Next i
'Stop
End If
Next
End Subanche perchè essendo autodidatta mi mancano molte basi, e avvolte scrivo codici più semplici e li ripeto per avere il risultato che cercavo. (vedere file allegato ad inizio discussione) ma come scritto sin dall'inizio avevo chiesto aiuto a voi esperti per avere una mano per un codice sintetico, funzionale e che facesse al mio caso, ma sopratutto era più veloce nel registrare i dati nel foglio GiornaleLavori, trovando la prima riga libera facendo il controllo dal Basso, o un controllo più veloce.
Ti faccio un caro saluto con l'augurio che oggi stai meglio.
resto in attesa di riscontro e tuo prezioso aiuto
Ho cercato di rendere il codice piu leggibile e forse piu veloce.
Ho eliminato dalla routine "Sub CommandButton10_Click()" tutto il codice che veniva ripetuto, e ho inserito il codice in una routine"scrivi" che riceve in entrata un paramentro"RowCount" e quindi questa routine entra in gioco quando viene richiamata.
Private Sub CommandButton10_Click() Dim RowCount As Long '---Codice Archivia su Gestionale-------- If OPERAIO1.Text <> "" Then RowCount = Worksheets("Giornalelavori").Range("B" & Rows.Count).End(xlUp).Row With Worksheets("Giornalelavori").Range("B1") scrivi (RowCount) '<<<<<-----------Chiamata routine .Offset(RowCount, 0).Value = ordine1.Caption .Offset(RowCount, 7).Value = Costo1.Value .Offset(RowCount, 14).Value = attivita1.Value .Offset(RowCount, 16).Value = UM1.Caption .Offset(RowCount, 17).Value = ora1.Value .Offset(RowCount, 21).Value = OPERAIO1.Value .Offset(RowCount, 20).Value = Qualifica1.Value .Offset(RowCount, 22).Value = Prezzo1.Value scrivi (RowCount) End With Else End If If OPERAIO2.Text <> "" Then scrivi (RowCount) RowCount = Worksheets("Giornalelavori").Range("B" & Rows.Count).End(xlUp).Row With Worksheets("Giornalelavori").Range("B1") scrivi (RowCount) '<<<<<-----------Chiamata routine .Offset(RowCount, 0).Value = Label_OP_2.Caption .Offset(RowCount, 7).Value = Costo2.Value .Offset(RowCount, 14).Value = attivita2.Value .Offset(RowCount, 16).Value = UM2.Caption .Offset(RowCount, 17).Value = ora2.Value .Offset(RowCount, 21).Value = OPERAIO2.Value .Offset(RowCount, 20).Value = Qualifica2.Value .Offset(RowCount, 22).Value = Prezzo2.Value 'continua col codicepoi ho modificato il codice che riquarda la cancellazione dei vari oggetti della tua userform1 cosi
' codice continua For Each obj In UserForm1.Controls If (TypeOf obj Is MSForms.TextBox) Or (TypeOf obj Is MSForms.ComboBox) Then obj.Text = "" UM1.Caption = "" UM2.Caption = "" UM3.Caption = "" UM4.Caption = "" UM5.Caption = "" UM6.Caption = "" UM7.Caption = "" UM8.Caption = "" UM9.Caption = "" UM10.Caption = "" Label_OP_2.Caption = "" Label_OP_3.Caption = "" Label_OP_4.Caption = "" Label_OP_5.Caption = "" Label_OP_6.Caption = "" Label_OP_7.Caption = "" Label_OP_8.Caption = "" Label_OP_9.Caption = "" Label_OP_10.Caption = "" End If Nextcomunque , ti allego il file.

Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Allegati:
You must be logged in to view attached files.Buon giorno
Albatros.
Non appena ho modo di vedere il file ti aggiorno.
E cerco di capire quello che mi hai suggerito e modificato, intanto grazie mille,
Ciao Albatros
ho avuto modo di vedere come hai composto il codice,
in pratica hai creato una Routine che la richiami la sub "scrivi"
e poi hai alleggerito il codice per la pulizia delle textBox e ComboBox.
ma probabilmente creare una Routine che richiama la sub scrivi, rallenta ancor di più rispetto al codice iniziale,
almeno a mia impressione vedo che ci mette più tempo,
comunque grazie per avermi suggerito una cosa nuova come creare una Routine con una nuova sub e richiamarla all'occorrenza.
ma ti chiedevo anche per imparare , capire se e fattibile o meno creare un codice con i cicli "for i" E possibile?
e se si riesce sopratutto a ridurre l'inserimeno dei dati sul foglio, anche perchè come detto dall'inizio ora i dati inseriti son pochi, ed e lento,
figuriamoci quando ho inserito un migliaio di righe e più, sicuramente sarà ancor più lento,
magari con un codice a ciclo e con controllo dal basso per la prima riga vuota (forse e più veloce?)
avevo provato con i suggerimenti di Marius che saluto, ma non son riuscito a tirar fuori un ragno dal Buco.
"potrei rompermi la testa al muro" ma essendo autodidatta trovo difficile comporre nell'interezza il codice con le sue funzionalità. devo dire che dedico il tempo libero a capire a sperimentare, insomma sono volenteroso,
e voi maestri mi avete dato una mano.
grazie.
poi se hai un modo con un ciclo "for i" sarei curioso di capire se migliora o meno il tempo di registrazione dati.
e se te o Marius potete rimandarmi il file con il codice completo, che a sua volta cercherò di capire, studiare e sperimentare per situazioni future.
saluti e ancora grazie.
allora, prova a sostituire il codice del pulsante "Archivia", con quello che ti posto.
Il codice funziona, pero è rallentato dal fatto che lui deve ricalcolare il numero della label"Ordine1", ogni volta che inserisci un nuovo record.
Private Sub CommandButton10_Click() ' Dim RowCount As Range '---Codice Archivia su Gestionale-------- Set clsheet = Application.ThisWorkbook.Worksheets("Giornalelavori") RowCount = clsheet.Range("B" & Rows.Count).End(xlUp).Row + 1 With clsheet For i = 1 To 10 Range("B" & RowCount).Offset(0, 0).Value = Me.Controls("ordine" & 1).Caption Range("B" & RowCount).Offset(0, 7).Value = UserForm1.Controls("Costo" & i).Value Range("B" & RowCount).Offset(0, 14).Value = UserForm1.Controls("attivita" & i).Value Range("B" & RowCount).Offset(0, 16).Value = UserForm1.Controls("UM" & i).Caption Range("B" & RowCount).Offset(0, 17).Value = UserForm1.Controls("ora" & i).Value Range("B" & RowCount).Offset(0, 21).Value = UserForm1.Controls("OPERAIO" & i).Value Range("B" & RowCount).Offset(0, 20).Value = UserForm1.Controls("Qualifica" & i).Value Range("B" & RowCount).Offset(0, 22).Value = UserForm1.Controls("Prezzo" & i).Value Range("B" & RowCount).Offset(0, 1).Value = CDate(DataContr.Value) Range("B" & RowCount).Offset(0, 2).Value = ComboBox7.Value Range("B" & RowCount).Offset(0, 3).Value = Cantiere.Value Range("B" & RowCount).Offset(0, 4).Value = ComboBox5.Value Range("B" & RowCount).Offset(0, 5).Value = ComboBox6.Value .Range("B" & RowCount).Offset(0, 6).Value = Manodopera.Caption Range("B" & RowCount).Offset(0, 9).Value = ComboBox99.Value Range("B" & RowCount).Offset(0, 11).Value = Opera.Value Range("B" & RowCount).Offset(0, 12).Value = Wbs.Value Range("B" & RowCount).Offset(0, 13).Value = Task_Lavorazione.Value Range("b29").Select While ActiveCell <> "" If ActiveCell <> "N° O." Then ordine1.Caption = ActiveCell.Offset(0, 0).Value + 1 Else End If ActiveCell.Offset(1, 0).Activate Wend RowCount = RowCount + 1 Next i End With For Each obj In UserForm1.Controls If (TypeOf obj Is MSForms.TextBox) Or (TypeOf obj Is MSForms.ComboBox) Then obj.Text = "" UM1.Caption = "" UM2.Caption = "" UM3.Caption = "" UM4.Caption = "" UM5.Caption = "" UM6.Caption = "" UM7.Caption = "" UM8.Caption = "" UM9.Caption = "" UM10.Caption = "" Label_OP_2.Caption = "" Label_OP_3.Caption = "" Label_OP_4.Caption = "" Label_OP_5.Caption = "" Label_OP_6.Caption = "" Label_OP_7.Caption = "" Label_OP_8.Caption = "" Label_OP_9.Caption = "" Label_OP_10.Caption = "" End If Next CaricaDati MsgBox ("Inserimento eseguito correttamente") End Sub
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros,
grazie per la soluzione (va molto più veloce come inserimento.
ma ho riscontrato un problema e cioè ;
se alcune combobox dei dipendenti non sono piene il ciclo vedo che continua a lavorare e inserisce le 10 righe.
(fai una prova) magari fai una prova
inserisci solo 4 operai e vedi che la funzione continua a registare, ma si dovrebbe invece fermare se non trova la combobox piena.
anche perchè non sempre tutte le combobox "Nome/Cognome Dipendente" sono piene, ma magari ho da registrare solo 4-5-6 dipendenti,
ma leggendo il codice presumo che con il ciclo e una funzione che si ripete per N° di 10 volte e non si può interrompere con un controllo if .
saluti
ma leggendo il codice presumo che con il ciclo e una funzione che si ripete per N° di 10 volte e non si può interrompere con un controllo if .
With clsheet For i = 1 To 10 If UserForm1.Controls("OPERAIO" & i).Value <> "" Then Range("B" & RowCount).Offset(0, 0).Value = Me.Controls("ordine" & 1).Caption Range("B" & RowCount).Offset(0, 7).Value = UserForm1.Controls("Costo" & i).Value '---Continua codice Wend RowCount = RowCount + 1 End If Next i
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Buon giorno
grazie mille risultato che cercavo. (sei un grande) e ringrazio cmq anche Marius per i suoi suggerimenti.
Dal tuo codice con il ciclo ho eliminato questa stringa di codice,
Range("b29").Select
così facendo non controlla sempre dal range B29 per trovare la prima riga vuota, ma controlla direttamente sull'ultima riga.
e va ancora più veloce.
grazie infinitamente.
buon fine settimana.
-
AutoreArticoli
