› Sviluppare funzionalita su Microsoft Office con VBA › Pannello di controllo per inserimento dati
-
AutoreArticoli
-
Ciao a tutti e grazie a chi riuscirà a darmi una mano. Ho un foglio excel con vari fogli e nel primo foglio è presente un pannello di controllo che svolge operazioni di routine.
una di queste operazioni e l'inserimento di una nuova riga nel foglio specifico immettendo dei dati rispettando la condizione data. mi spiego meglio vorrei che tramite un userform immetto dei dati in cui ad esempio è presente la data del 02/03/2023 e che venga aggiunta una riga quindi con i dati immessi subito dopo le righe che iniziano con la la data del 01/03/2023.
allego file per darvi un idea di come è strutturato
ho trovato vari tutorial in rete ma si parla sempre dell'aggiunta di un ultima riga a me serve invece che questa venga posizionata secondo il criterio data che immetto -1
grazie a tutti per l'aiuto
Allegati:
You must be logged in to view attached files.A naso e senza aver visto il file, cerchi la data col solito metodo di Find e assegni il risultato a una variabile Range, per esempio set f = range(...).find(date), una volta trovata la data, questa variabile f di tipo Range punta alla cella che soddisfa il criterio, quindi puoi utilizzare f.Offset(1).EntireRow.Insert per inserire una riga.
Naturalmente quando rispondo così di botto spesso dico stupidaggini quindi magari prima mi guardo il file e poi intervengo... ma ormai lo sapete che mi faccio prendere dalla voglia di dire qualcosa 🙂
Diciamo che il ragionamento ci può anche stare ma mi sa che è un po più complicato almeno per me di sicuro :))))
il problema è ricollegare quel "Date" alla text box dell'userform e dirgli che deve cercare quella data posizionarsi su quella riga ed immettere una nuova riga con i dati inseriti nell'userform che oltretutto io non ho mai utilizzato
ojojojojoi mi sono esaurito solo a scriverlo
ojojojojoi mi sono esaurito solo a scriverlo
tu mi farai morire nell'userform che oltretutto io non ho mai utilizzato
E infatti di tale userform nel file non c'è traccia 🙂
Perché non cominci a impostarlo? prendi confidenza con l'editor di form e disegnane uno, aggiungi i controlli che ti servono e poi vediamo 🙂 non lo dici chiaramente ma immagino che se clicco su "inserisci nota ricevimento", si apre il form, immetto i dati e quando confermo i dati si sistemano nel foglio "note ricevimento" (mettiamo che abbiamo scelto la data del 4/3/2023 nel form, sotto quella esistente nel suddetto foglio si inserisce una riga e ci vengono ricopiati i dati del form).
Ma a questo punto serve avere questi ulteriori dati... che presumo coincideranno con gli altri campi del medesimo foglio (nel caso citato, "comunicazione" e "operatore" oltre alla "data").
Se è così davvero, credo di aver vinto un premio per il miglior mago indovino senza palla di cristallo 😀
domanda stupida: e se ho piu date uguali, il find trova la prima data, quindi la riga la debbo inserire?
Perché non cominci a impostarlo? prendi confidenza con l'editor di form e disegnane uno, aggiungi i controlli che ti servono e poi vediamo
ci provooooooo non prometto nulla pero ahhahaha scherzo è il minimo provare però ho sempre bisogno di un tuo input che mi mette in discussione haahha
non lo dici chiaramente ma immagino che se clicco su "inserisci nota ricevimento", si apre il form, immetto i dati e quando confermo i dati si sistemano nel foglio "note ricevimento" (mettiamo che abbiamo scelto la data del 4/3/2023 nel form, sotto quella esistente nel suddetto foglio si inserisce una riga e ci vengono ricopiati i dati del form).
esattamente il form avrà la compilazione di tutte le colonne quindi all'interno del form io inserirò tutti i dati presenti in quel dato foglio. se scegli la data del 04/03/2023 a me va bene che quella nuova riga si trovi in ordine con tutte le date del 04/03/2023 quindi prima del 05/03/2023 e dopo il 03/03/2023.
Ma a questo punto serve avere questi ulteriori dati... che presumo coincideranno con gli altri campi del medesimo foglio (nel caso citato, "comunicazione" e "operatore" oltre alla "data").
esattamente
Se è così davvero, credo di aver vinto un premio per il miglior mago indovino senza palla di cristallo
lo sapevo che ero stato poco chiarooooooo ahhahahahahhaha
domanda stupida: e se ho piu date uguali, il find trova la prima data, quindi la riga la debbo inserire?
si assolutamente è molto probabile che si trovino piu date 4/3/2023 per in quel dato giorno ci possono essere più comunicazioni in merito a me serve soltanto che la nuova riga si metta in ordine in quella determinata data prima del 05/03/2023 e dopo il 03/03/2023.
ok mi metto a fare il form forse vi è tutto anche più chiaro
colpa miaaaaaaQui non basterà una birra. Ce ne vorrà almeno una cassa 🙂 🍺
Qui non basterà una birra. Ce ne vorrà almeno una cassa
Vabbe ho capito vengo io da te se no non si può fare ma ti avverto che sono un osso duro hahahahhahah
Allora, ho buttato giu due righe.
Ho creato una userform nominandola "Nota_Ricevimento"
nel foglio "Nota Ricevimento" nell'evento "Activate" ho messo queste righe codice
Private Sub Worksheet_Activate() Note_Ricevimento.Show End Subnella userform ho inserirto questo codice:
Option Explicit Private Sub CommandButton1_Click() Dim f As Object Dim data As Date, datacerca As Date data = (Me.TextBox1.Text) datacerca = data - 1 Set f = ActiveSheet.Range("a3:a20").Find(datacerca) If f Is Nothing Then Debug.Print "Name was not found." Exit Sub Else Debug.Print "Name found in :" & f.Address End If f.Offset(1).EntireRow.Insert f.Offset(1, 0) = data f.Offset(1, 1) = TextBox2.Text f.Offset(1, 2) = TextBox3.Text End Subnon dovrei perche cosi non impari, ti posto 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.E infatti di tale userform nel file non c'è traccia
io c'ho provato ma non assicuro il suo funzionamento ahhahah
allora diciamo che l'aspetto è questo poi i campi cambieranno da foglio a foglio ma penso di riuscire poi ad adattare da solo. L'unica incognita è sul tasto Cerca Riga:
1. vorrei cercare una riga di mio interesse, che mi richiamasse i dati in modo da poterli modificare e successivamente risalvare non in una nuova riga ma sulla stessa
2. e potrebbe essere possibile che la ricerca riproduca più risultati come fare una lista per scegliere quello che mi interessa modificare?
Allegati:
You must be logged in to view attached files.Qui non basterà una birra. Ce ne vorrà almeno una cassa
per me basta una Birra che sia dello STRETTO
Allora il funzionamento è corretto la riga viene inserita correttamente secondo la condizione.
L'unico problema è che l'userform si apre all'apertura del foglio mentre io voglio azionarlo tramite bottone macro all'interno del foglio Pannello di controllo. ho provato a copiare il codice in un modulo ma non so perchè non me lo da nella lista delle macro disponibili.
altro problema l'implementazione se potrebbe gestire quanto detto nel post #37201 ed anche che all'inserimento dei dati si resetti in campi bianchi
ho modificato cosi e funziona ora però ho verificato che quando immetto una data non esistente tipo il 20/03/2023 si deve posizionare dopo l'ultima riga come la stessa cosa se inserisco la data del 02/03/2023 (la prima data utile è il 3/3/2023) deve inserirsi come prima riga. non so se mi sono spiegato
`Option Explicit Sub InserisciRiga() Note_Ricevimento.Show End Sub Private Sub CommandButton1_Click() Dim f As Object Dim data As Date, datacerca As Date data = (Me.TextBox1.Text) datacerca = data - 1 Set f = Worksheets("Note Ricevimento").Range("a3:a300").Find(datacerca) If f Is Nothing Then Debug.Print "Name was not found." Exit Sub Else Debug.Print "Name found in :" & f.Address End If f.Offset(1).EntireRow.Insert f.Offset(1, 0) = data f.Offset(1, 1) = TextBox2.Text f.Offset(1, 2) = TextBox3.Text End Sub`Ma i dati che vuio inserire , li devi inserire in alcuni fogli o in tutti i fogli, perchè se è cosi, dato che la struttura dei fogli non è tutta uguale,secondo me, bisogna creare divese userform, che rispecchiano i campi dei vari fogli.
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 )Ma i dati che vuio inserire , li devi inserire in alcuni fogli o in tutti i fogli, perchè se è cosi, dato che la struttura dei fogli non è tutta uguale,secondo me, bisogna creare divese userform, che rispecchiano i campi dei vari fogli.
si si albatros ma questo era già preventivato ma diciamo che sono un bravo copiatore e penso che una volta fatta la struttura posso non disturbarvi. Per ogni foglio deve esistere una userform diversa ma che fondamentalmente ha lo stesso funzionamento solo con diversi dati.
ora però ho verificato che quando immetto una data non esistente tipo il 20/03/2023 si deve posizionare dopo l'ultima riga
questo non è un problema, perchè subito dopo l'istruzione
If f Is Nothing Then
puoi dire di selezionare l'ultima riga libera.
02/03/2023 (la prima data utile è il 3/3/2023) deve inserirsi come prima riga. non so se mi sono spiegato
nel tuo esempio di struttura del foglio ti va a sovrascrivere nella cella "A2",ed elimina il filtro.
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 )nel tuo esempio di struttura del foglio ti va a sovrascrivere nella cella "A2",ed elimina il filtro.
questo è un problema perchè poi il filtro servirà alla stampa filtrata
puoi dire di selezionare l'ultima riga libera.
come gli dico di selezionare l'ultima riga?
Per ogni foglio deve esistere una userform diversa ma che fondamentalmente ha lo stesso funzionamento solo con diversi dati.
quindi se sei un bravo Copiatore, studiando quelle poche di righe che ti ho postato dovresti ragiungere il tuo obbiettivo
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 )ci provo sono le cose nuove a darmi problemi
come gli dico di selezionare l'ultima riga?
LastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
lastrow= cells(conta le celle, della colonna 1)fino all'ultima cella che contiene un dato
+1 per trovare l'ultima riga vuota .
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 )LastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
`Option Explicit Sub InserisciRiga() Note_Ricevimento.Show End Sub Private Sub CommandButton1_Click() Dim f As Object Dim data As Date, datacerca As Date data = (Me.TextBox1.Text) datacerca = data - 1 Set f = Worksheets("Note Ricevimento").Range("a3:a300").Find(datacerca) If f Is Nothing Then lastrow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Debug.Print "Name was not found." Exit Sub Else Debug.Print "Name found in :" & f.Address End If f.Offset(1).EntireRow.Insert f.Offset(1, 0) = data f.Offset(1, 1) = TextBox2.Text f.Offset(1, 2) = TextBox3.Text End Sub `modificando cosi non va
il problema più grosso rimane sempre questoel tuo esempio di struttura del foglio ti va a sovrascrivere nella cella "A2",ed elimina il filtro.
altra cosa che ho notato e quella dell'immagine praticamente lui cerca la data ma si ferma alla prima trovata creando questo problema 2 date 8/03/2023 tra 2 7/03/2023
Allegati:
You must be logged in to view attached files.altra cosa che ho notato e quella dell'immagine praticamente lui cerca la data ma si ferma alla prima trovata creando questo problema 2 date 8/03/2023 tra 2 7/03/2023
modifica la riga cosi:
Set f = ActiveSheet.Range("a3:a20").Find(data, SearchDirection:=xlPrevious)
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 )Option Explicit Sub InserisciRiga() Note_Ricevimento.Show End Sub Private Sub CommandButton1_Click() Dim f As Object Dim data As Date, datacerca As Date Dim lastrow As Long data = (Me.TextBox1.Text) datacerca = data - 1 Set f = ActiveSheet.Range("a3:a300").Find(data, SearchDirection:=xlPrevious) If f Is Nothing Then lastrow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Debug.Print "Name was not found." Exit Sub Else Debug.Print "Name found in :" & f.Address End If f.Offset(1).EntireRow.Insert f.Offset(1, 0) = data f.Offset(1, 1) = TextBox2.Text f.Offset(1, 2) = TextBox3.Text End Subniente me le mette sempre in mezzo come da immagine
Allegati:
You must be logged in to view attached files.Set f = ActiveSheet.Range("a3:a20").Find(data, SearchDirection:=xlPrevious)
nella formula ho messo "Data" nel tuo codice che posti sodtituisci con "Datacerca"
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 )sinceramente non ho capito
io ho messo questo
Set f = ActiveSheet.Range("a3:a300").Find(data, SearchDirection:=xlPrevious)
ad ogni modo non so che cosa ho toccato adesso non funziona proprio piu le righe non le inserisce nemmeno sbagliate
non ho capito se la sub va inserita come private sub o sub normale e se va messa sia nel userform che sul modulo
Allegati:
You must be logged in to view attached files. -
AutoreArticoli
