› Sviluppare funzionalita su Microsoft Office con VBA › Pannello di controllo per inserimento dati
-
AutoreArticoli
-
ti riposto il file, fai delle prove senza mettere date inferiorio uguali al 03/03/2023.
Fai sapere.
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.Allora io ho dovuto iniziare nuovamente dal primo file che mi avevi mandato e l'ho dovuto modificare in modo che si potesse lavorare a partire da un altro foglio. te lo riallego cosi magari lavoriamo su questo cosi ci capisco qualcosa in piu
ho risolto anche il problema della data quindi adesso se io inserisco nel form la data del 06/03/2023 lui cerca la prima data del 06/03/2023 ed aggiunge le righe. rimangono irrisolti ci ho provato ma non sono riuscito alcune problematiche di fondo:
1) se la data non esiste (es. ho una nota del 03/06 ed una nota del 05/06, ma non ho note del 04/06) e quindi vado ad inserire ad esempio una data che non è presente come il 04/06/2023 dell'esempio lui non la inserisce.
2) stesso simile problema quando si tratta dell'ultima riga (es. se io ho note fino al 13/06/2023 e voglio inserire una nota del 14/06/2023) lui non la inserisce. ho provato con il codice LastRow ma non mi funziona
3) stessa cosa sull'intestazione - es. se le note partono dalla data del 03/06 ed io voglio inserire una data precedente tipo il 02/06 lui non la inserisce (ma questo mi avevi detto che era anche un altro problema riguardante il filtro che veniva eliminata ma essendo una casistica possibile dovrei risolverla in qualche modo)
4) quando uso il form e clicco su inserisci i campi rimangono compilati a me servirebbe che si cancellassero e che ci sia un blocco che non fa inserire la riga se ci sono campi non immessi nel form
scusate tutte le richieste e ringrazio chiunque riesca ad aiutarmi
Allegati:
You must be logged in to view attached files.ho risolto anche il problema della data
Se io inserisco una data esistente, il nuovo dato viene messo PRIMA di tutte le altre date. Mi sembrava di aver capito che doveva accodarsi (mi sembrerebbe anche più logico). Forse però alla fine fai un sorting su tutti i campi e allora il problema non si pone perché si rimescola tutto comunque 🙂
Diciamo che la prima richiesta era questa ma poi mi sono reso conto che il codice postato ha questo problema.
Se io ho due note 7/06 ed inserisco una nota 8/06
Il risultato è questo
07/06
08/06
07/06
Quindi la soluzione o è quella che ho postato io nel file oppure lui dovrebbe indentificare l'accodamento ma sull'ultima data esistente e quindi se ci sono 2 (07/06) posizionarsi dopo l'ultimo 07/06
Sto sistemando questi problemi nel file che posterò. Verrà inserita una data in cima se precedente alla prima, in fondo se successiva all'ultima, e in fondo al blocco di date uguali se la data è presente. Se non è presente verrà inserita dopo quella più vicina.
Ecco, allego la mia revisione.
Mi manca la seconda parte del punto 4: "e che ci sia un blocco che non fa inserire la riga se ci sono campi non immessi nel form" ma te la lascio per esercizio perchè è abbastanza semplice anche per te 😀Allegati:
You must be logged in to view attached files.beh funziona molto bene ci sono alcune cose che ho notato:
1) prova ad inserire una nota con data 08/03/2023 e guarda dove te la posizione praticamente dopo il 10/03/2023
2) ho inserito nel form altri 2 tasti:
Cerca Riga = Dovrebbe cercare i dati collegati alle textbox (data colonna A; Comunicazione colonna B; operatore colonna C) e restituire se possibile un menu tipo il trova di excel ed alla scelta della riga desiderata ripopolare i dati della userform
Salva Riga = Una volta ripopolato i dati ed effettuate le dovute correzioni risalvare i dati senza aggiungere una nuova riga ma trascrivendo quella prelevata dalla userform
3)
e che ci sia un blocco che non fa inserire la riga se ci sono campi non immessi nel form"
io ho provato questa cosa che ho anche inserito nel codice inserendo poi un apice per non farlo funzionare ma non va mi da errore "end with senza with" ma io ho messo sia il with che l'end with e quindi mi sono spiaggiato con un balenottero
`Option Explicit Private Sub CommandButton1_Click() Dim f As Object Dim datacerca As Date Dim i As Integer Dim itm As Integer Dim d As Date Application.ScreenUpdating = False datacerca = CDate(Me.TextBox1.Text) d = datacerca itm = [COUNTA('NOTE RICEVIMENTO'!A:A)] 'With Note_Ricevimento ' If TextBox1.Text = "" Then ' MsgBox "Compilare Campo Data" ' If TextBox2.Text = "" Then ' MsgBox "Compilare Campo Comunicazione" ' If TextBox3.Text = "" Then 'MsgBox "Compilare Campo Operatore" 'End If 'End With Set f = Worksheets("note Ricevimento").Range("A:A").Find(datacerca, LookIn:=xlValues, lookat:=xlWhole) If f Is Nothing Then If datacerca > Worksheets("note Ricevimento").Cells(itm, 1) Then Set f = Worksheets("note Ricevimento").Cells(itm + 1, 1) ElseIf datacerca < Worksheets("note Ricevimento").Cells(3, 1) Then Set f = Worksheets("note Ricevimento").Cells(3, 1) Else i = 0 Do i = i + 1 datacerca = datacerca + i Set f = Worksheets("note Ricevimento").Range("A:A").Find(datacerca, LookIn:=xlValues, lookat:=xlWhole) Loop While f Is Nothing End If Else i = f.Row Do i = i + 1 Loop While Worksheets("note Ricevimento").Cells(i, 1) = d Set f = Worksheets("note Ricevimento").Cells(i, 1) End If With f .EntireRow.Insert .Offset(-1).Value2 = d .Offset(-1, 1) = TextBox2.Text .Offset(-1, 2) = TextBox3.Text .EntireRow.Copy .Offset(-1).PasteSpecial xlPasteFormats End With Application.CutCopyMode = False Application.ScreenUpdating = True For i = 1 To 3 Controls("TextBox" & i) = "" Next TextBox1.SetFocus Unload Me End Sub`4) il reset l'ho risolto con Unload Me
Allegati:
You must be logged in to view attached files.1) Risolto 🙂 il controllo per l'inserimento nella posizione giusta è meglio farlo riga per riga per cercare la prima data maggiore di quella inserita.
2) Hai inserito i tasti ma non c'è codice. Nemmeno l'ombra. Forse solo la firma di Inserisci riga... non è sufficiente 🙂
3) Ci hai provato. Io poi metterei questo controllo a inizio codice, inutile fare altri calcoli se non è soddisfatta questa condizione. Nel tuo codice utilizzi degli if multiriga ma quando lo fai devi chiuderli con end if oppure utilizzare la sintassi ElseIf oppure utilizzare la sintassi If monoriga (cioè scrivere le istruzioni if ... then senza andare a capo) . Il with era chiuso ma non essendoci la chiusura degli if, VBA va in palla. Inoltre dopo ogni etst devi uscire dalla sub altrimenti il codice prosegue dopo i msgbox ed è tutto inutile 🙂
4) Io avevo previsto la pulizia delle textbox come avevi chiesto, e implementato la chiusura dl form premendo ESC (non lo avevi chiesto ma era intuitivo). Col tuo unload rendi inutile la pulizia delle textbox quindi ho rimosso quel codice.
Allego il file rivisitato. Manca il punto 2 ma fai un piccolo sforzo 😀
Allegati:
You must be logged in to view attached files.Alla ricerca della semplificazione e ottimizzazione allego revisione 4 😉
Uno sfruttamento intelligente di Match evita tutta una ridondanza di cicli e confronti.
Allegati:
You must be logged in to view attached files.1) Risolto
il controllo per l'inserimento nella posizione giusta è meglio farlo riga per riga per cercare la prima data maggiore di quella inserita.
Si probabilmente è la strada giusta appena ho un attimo lo guardo per bene
2) Hai inserito i tasti ma non c'è codice. Nemmeno l'ombra. Forse solo la firma di Inserisci riga... non è sufficiente
Hai ragione diciamo che volevo fare vedere quello che era necessario per capire come agire ci provooooo sicuramente
3) Ci hai provato. Io poi metterei questo controllo a inizio codice, inutile fare altri calcoli se non è soddisfatta questa condizione
Mi sembra di aver capito faccio le prove e ti aggiorno
4) Io avevo previsto la pulizia delle textbox
Si ho visto solo che pensandoci è abbastanza possibile che la nota da inserire sia una per poi passare magari ad altre note di altri fogli. Perciò tanto vale farla chiudere e riaprire all'occorrenza
Alla ricerca della semplificazione e ottimizzazione allego revisione 4
Se ho capito hai pulito solo il codice giusto?
Grazieeeeeee mille e ti aggiorno
Se ho capito hai pulito solo il codice giusto?
Sì, la versione 3 andava già bene di suo, scegli quella che preferisci 🙂 io ogni tanto rivedo i miei progetti alla ricerca della semplificazione (spesso poi non funziona più niente e allora torno indietro 🙂 )
Alla ricerca della semplificazione e ottimizzazione allego revisione 4
Uno sfruttamento intelligente di Match evita tutta una ridondanza di cicli e confronti.
ho incominciato a fare qualche prova:
la parte dei dati obbligatori ok. ma la parte data ha dei problemi:
se inserisci una data non esistente da errore
chiaramente succede anche se immetti una data tipo al 20/03/2023 che ancora non c'è invece di immetterla come ultima riga da errore, cosa strana non succede per la data del 02/03/2023 che immette correttamente come prima riga.
altra problema che secondo me a questo punto è un po tutto collegato, il file che stai gestendo in realtà è già pieno di note ma chiaramente verra prima o poi utilizzato dall'inizio quando ancora non ci sarà nemmeno una nota. se tu elimini tutte le note e provi ad inserire la prima va in errore
l'errore è sempre lo stesso per questo penso sia tutto collegato per facilitarti le prova prova ad inserire queste date sul file 4:20/03/2023
04/03/2023
prova ad eliminare tutte le righe ed inserisci una nuova prima riga
per queste 3 casistiche ti da erroreprova ad inserire la data del 02/03/2023 che non esiste e ragionando allo stesso modo dovrebbe dare errore ma stranamente la inserisce bene.
frost-Note-Voucher-Forum-ExcelVBA-3-VF.xlsm
stesse prove con il file 3:
se immetti queste date:
02/03/2023
20/03/2023le inserisce correttamente
04/03/2023
data che non esiste da errore
C'è sempre qualcosa che non va 🙂
Vediamo cosa posso fare.
Vedo... il Match fallisce se l'elenco è vuoto. Mettiamoci allora un controllo di validità 🙂
funziona tutto alla perfezioneeeeeeeeeeeeeeeeeeeeeeeeee grazie davvero tanto dell'aiuto e grazie a tutto il forum
-
AutoreArticoli
