› Sviluppare funzionalita su Microsoft Office con VBA › Ordinamento Automatico Righe
-
AutoreArticoli
-
Cmq portati in MODULO2, vai in Public Sub Cancella_Record_in_Tabella(frm As Object, index As Long), portati al rigo sopra r(1).AutoFill r, xlFillSeries e modifica If r.Rows.Count > 2 Then con If r.Rows.Count > 1 Then (Occhio che ce ne sono 2 di questi If r.Rows...., a te interessa il secondo).
Ciao Alex, problema risolto.
Per il resto? Funziona tutto?
Pare di si, certo è ancora presto nel senso che adesso appena riesco faccio degli inserimenti massivi di dati per provare tutte le casistiche e funzionalità e vediamo che ne esce, pero per adesso solo questo. Ti aggiornooooo
Ciao Alex,
Diciamo che di prove ne ho fatte tante e di errori non ne sono usciti almeno ad occhio nudo, ma continuerò a provare e fare delle comparazioni per vedere se magari non mi rendo conto di qualcosa.
Avrei qualcosina da chiederti sull'userform transfer:
1. attraverso le textbox io posso fare ricerche anche multicampo (nel senso posso inserire dati in 2 textbox e lui mi restituisce solo i risultati inerenti alla ricerca combinata). La textbox note ritorno funziona solo con ricerca generica (il classico ?,*) mentre se faccio una ricerca specifica solo con quella textbox o multicampo non va (probabilmente essendo l'ultima textbox nata non è ben inserita nel codice search. Altra cosa che dovrebbe fare quella textbox è restituire solo le righe ritorno essendo un campo dedicato (se io faccio ricerca tramite quello dovrei avere solo campi ritorno ed al contrario con quelli andata uguale.
2. mentre lavoravo e facevo prove mi è venuta in mente una cosa secondo me utile:
- Spesso (ma non sempre) quando preleviamo una riga per effettuare una modifica è necessario modificare sia la riga di andata che quella di ritorno (ti faccio un esempio, se il cliente non ha lasciato gli orari treno,aereo e ci manda i biglietti io dovrò modificare le righe ed inserire gli orari sia all'andata che il ritorno), ecco sarebbe utile che quando clicchiamo sul tasto salva riga (che è quello che ci modifica la riga dopo averla prelevata), l'userform ti chiedesse se vuoi modificare pure il ritorno:
- si potrebbe fare con una successiva ricerca dello stesso criterio di ricerca (es. cerco mario, prendo l'andata la modifico e clicco su salva, mi cerca nuovamente mario e mi da i risultati nella listview in modo da poter prelevare il ritorno), un po come succede sul tasto elimina (solo che lì quando popola la list se non trova tutti i campi uguali si azzera), con il tasto salva invece dovrebbe ragionare diversamente e dovrebbe uscire un popup, vuoi modificare anche il ritorno dello stesso cliente? se si faccio la stessa ricerca della prima (quindi se ho cercato antonio, mi cerca di nuovo antonio)
Pensi ci si possa riuscire senza sconvolgere il risultato attuale che è molto soddisfacente?
Grazie milleeeeeeeeee
ti allego il file con l'ultima modifica che abbiamo fatto sul riordinamento righe
Allegati:
You must be logged in to view attached files.Ciao Alex,
ti avevo scritto un post per un problema ma prima di farti lavorare su questo problema sto facendo prove per capire da dove arriva e se arriva perchè attualmente ho ricaricato tutti i dati ed il problema non c'è ma farò prove più approfondite.
Vale sempre il post precedente delle migliorie e della textbox ritorno
Grazie e scusa il caos
Ciao,
ho visto il problema sulla TextBox del riorno e l'ho risolto...poi stavo passando alla richiesta successiva e mentre cercavo una soluzione mi sono detto: "secondo me frost si sta solo complicando la vita nel modo in cui è strutturata la form dei Transfer".
Io mi chiedo come mai crei 2 record ad ogni inserimento? Perché ce ne vuole uno che identifica l'andata e uno che identifica il ritorno? Non è più semplice creare 1 record che identifica il cliente? A quel record poi definiamo le varie specifiche: data Andata, data Ritorno, nome Ospite, note Andata, note Ritorno, ecc...
Anche perché con questo sistema attuale secondo me ci sono altri problemi che non hai considerato. Mi spiego meglio:
se tu modifichi un cliente esistente, alterando le specifiche inerenti al viaggio di ritorno, crei una serie di problemi al record che fai prima a scoprirlo da solo che io a spiegartelo.
Io rimango dell'idea che è più funzionale creare 1 Record legato al Cliente, ed è anche più semplice gestire tutte le specifiche
ho visto il problema sulla TextBox del riorno e l'ho risolto...poi stavo passando alla richiesta successiva e mentre cercavo una soluzione mi sono detto: "secondo me frost si sta solo complicando la vita nel modo in cui è strutturata la form dei Transfer".
Poi quando puoi mi mandi la modifica
Io mi chiedo come mai crei 2 record ad ogni inserimento? Perché ce ne vuole uno che identifica l'andata e uno che identifica il ritorno? Non è più semplice creare 1 record che identifica il cliente? A quel record poi definiamo le varie specifiche: data Andata, data Ritorno, nome Ospite, note Andata, note Ritorno, ecc...
Capisco il tuo punto di vista, ma viene gestito giornalmente e c'è tutto un sistema lavorativo che non sto qui ad approfondire che viene gestito sulle date. Ogni giorno gestiamo le date del giorno dopo ed è per questo che vengono strutturate cosi in modo che ogni data vada nel posto giusto.
se tu modifichi un cliente esistente, alterando le specifiche inerenti al viaggio di ritorno, crei una serie di problemi al record che fai prima a scoprirlo da solo che io a spiegartelo.
Questo non l'ho capito e se riesci fammi capire perchè a me sembra che sia tutto ok nella modifica
Prova ad aprire un record del Ritorno dalla ListView con doppio click. Poi portati nella TextBox della data Andata (che chiaramente risulta vuota) e mettici una data dentro (quindi simuliamo un errore accidentale). Poi magari mettici del testo dentro alla textbox delle note Andata (che anche questa è vuota). Alla fine fai Salva e vedi che casino esce.
Il record del Ritorno si altera e si trasforma in uno di Andata.
Cmq se proprio vuoi tenere questo sistema, tutt'al più bisognerebbe fare in modo che quando carichi il record dell'andata, allora tutte le textbox destinate al ritorno, si bloccano. Viceversa se carichi un record di ritorno... altrimenti se fai modifiche che non rispettano i criteri, rischi di incasinare il record.
Prova ad aprire un record del Ritorno dalla ListView con doppio click. Poi portati nella TextBox della data Andata (che chiaramente risulta vuota) e mettici una data dentro (quindi simuliamo un errore accidentale). Poi magari mettici del testo dentro alla textbox delle note Andata (che anche questa è vuota). Alla fine fai Salva e vedi che casino esce.
Il record del Ritorno si altera e si trasforma in uno di Andata.
Effettivamente è una prova che non ho mai fatto, nel senso che è e può essere solo un errore accidentale, e capisco benissimo quello che mi stai dicendo, però vorrei mantenere sempre questo sistema e la tua soluzione:
Cmq se proprio vuoi tenere questo sistema, tutt'al più bisognerebbe fare in modo che quando carichi il record dell'andata, allora tutte le textbox destinate al ritorno, si bloccano. Viceversa se carichi un record di ritorno... altrimenti se fai modifiche che non rispettano i criteri, rischi di incasinare il record.
mi sembra una soluzione ottima, che deve avvenire solo quando io prelevo i dati quindi immagino sulla sub doubleclick solo del foglio transfer in quanto negli altri non serve
Ma c'è un altro problema che non hai considerato. Se carichi un cliente attraverso il solito doppioclick nella ListView e poi premi, sempre accidentalmente, il pulsante INSERISCI RIGA, allora vedrai che si crea un nuovo Record. Magari appena posso provo a vedere come impedire tutte queste situazioni che possono verificarsi in modo accidentale.
Il discorso invece di far comparire un messaggio popup che ti chiede se modificare il record di ritorno dopo che hai modificato quelle dell'andata...non è così semplice (ma solo per il modo di come è strutturata la tabella).
Qui bisogna intervenire un po' com'è stato fatto per il discorso A/R. C'è bisogno di un appoggio per far capire al record di andata che a lui è legato un record di ritorno. Eseguire poi un ciclo che deve soddisfare certe condizioni...insomma giri dell'oca per non avere tutte le informazioni in un unico record.
Caso mai prova a spiegarmi come mai non è possibile mettere tutto in un unico record, magari si possono risolvere diversi problemi e se poi vuoi implementare le funzionalità sarà anche più semplice.
Ciao Alex,
Ma c'è un altro problema che non hai considerato. Se carichi un cliente attraverso il solito doppioclick nella ListView e poi premi, sempre accidentalmente, il pulsante INSERISCI RIGA, allora vedrai che si crea un nuovo Record. Magari appena posso provo a vedere come impedire tutte queste situazioni che possono verificarsi in modo accidentale.
Beh, la butto li ma magari non è la stessa cosa, quando premi la check box "Inserisci Transfer One Way" viene totalmente nascosta la textbox data di ritorno. Si potrebbe al doppio click nascondere tutto quello che non ha a che fare con la modifica ad esempio:
1. Andata: si nascondono Textbox Ritorno, Textbox Ora partenza volo, Textbox Ora Transfer, pulsante inserisci riga e pulsante cerca riga
2. Ritorno: si nascondono Textbox Andata, Textbox Ora arrivo volo, pulsante inserisci riga e pulsante cerca riga
3. Cliccando sul pulsante Cancella Form, ritorna tutto allo stato normale.
Il discorso invece di far comparire un messaggio popup che ti chiede se modificare il record di ritorno dopo che hai modificato quelle dell'andata...non è così semplice (ma solo per il modo di come è strutturata la tabella).
va beh questo era una cosa in più possiamo farne a meno
Qui bisogna intervenire un po' com'è stato fatto per il discorso A/R. C'è bisogno di un appoggio per far capire al record di andata che a lui è legato un record di ritorno. Eseguire poi un ciclo che deve soddisfare certe condizioni...insomma giri dell'oca per non avere tutte le informazioni in un unico record.
Caso mai prova a spiegarmi come mai non è possibile mettere tutto in un unico record, magari si possono risolvere diversi problemi e se poi vuoi implementare le funzionalità sarà anche più semplice.
Non è che io non sono aperto a spiegarti, il problema fondamentale è che questo file doveva andare in produzione l'anno scorso poi per una cosa e per un'altra (essendo che al suo interno ci sono informazioni fondamentali sulla gestione dei reparti che se vanno perse è un grosso danno) abbiamo deciso di aspettare. Il problema è che so che una volta fatte alcune modifiche dobbiamo andare a rivedere il codice e ci vorrà più tempo ed io fra meno di un mese vorrei che il file lavorasse bene senza problemi e che mi permetta di utilizzarlo ad inizio stagione (praticamente fra un mese circa). Ti sono grato per il tuo impegno, fai conto anche che il sistema delle date in più righe viene utilizzato dai miei collaboratori da più tempo e questo significherebbe spiegare un nuovo sistema e cosi via. Ripeto vorrei utilizzarlo prima possibile e sistemare solo quello che mi permette di fare un lavoro corretto senza sfasare i dati, poi magari con il tempo se ne parlerà.
Grazie milleeeeeee di nuovo.
Allora...per ora limitiamoci a queste modifiche:
quando scegli un cliente dalla ListView, se è un Andata allora si bloccano le textbox destinate al Ritorno e i pulsanti Inserisci e Cerca. Stessa cosa ma al contrario se scegli un record riferito al Ritorno.
Per il discorso che deve chiederti se vuoi modificare anche l'altro viaggio...la questione è più complessa. Bisogna creare un qualcosa che lega i due record (tipo un codice id univoco per ogni coppia di record). Quindi impegnare almeno altre 2 colonne. Poi dopo fatto SALVA sul primo record dovrebbe partire un ciclo che scorre lungo tutta la tabella alla ricerca del codice gemello. Una volta trovato dovrebbe vedere se il record è da manipolare o meno. Quindi anche qui ci vorrebbe qualche altro indizio che va a determinare lo stato del record. Una volta eseguite tutte queste verifiche, bisogna svuotare la UserForm e popolarla con i dati del record trovato. Insomma è un po' un bel giro da far fare al codice...
Cmq per ora vedi se va bene così. Caso mai mi viene in mente qualcosa di diverso ti faccio sapere.
Allegati:
You must be logged in to view attached files.Ciao Alex,
Ti avevo scritto un post con una proposta ma te la riformulo per bene:
1. ho inserito una nuova colonna sul foglio transfer "Cod. Univ."
2. Ogni qualvolta inserisco una riga che sia doppia o singola lui inserisce un numero progressivo in quella colonna, come?
- se inserisco una doppia riga mi inserisce sia in andata che in ritorno lo stesso numero che calcolerà guardando il numero più alto in colonna
3. se entrambe le righe di andata e ritorno hanno lo stesso numero progressivo si potrebbe pensare che una volta che hai fatto una ricerca ed hai fatto una modifica (quindi cliccando sul tasto Salva) , lui ti chiede "Vuoi cercare anche il ritorno"? (Si o No) e lui cerca lo stesso numero della precedente riga. Risultati:
- Se trova uno stesso numero ti popola le textbox con quella riga
- Se non trova lo stesso numero: "Non è presente nessun ritorno per questo cliente"
Che dici si può fare?
Allegati:
You must be logged in to view attached files.quando scegli un cliente dalla ListView, se è un Andata allora si bloccano le textbox destinate al Ritorno e i pulsanti Inserisci e Cerca. Stessa cosa ma al contrario se scegli un record riferito al Ritorno.
ho fatto qualche prova e mi sembra tutto funzionante e molto utile, non avevo mai pensato a questa cosa dell'errore, che è difficile che accada ma con qualcuno alla prima esperienza non impossibile. Farò delle prove approfondite e ti aggiorno
non avevo mai pensato a questa cosa dell'errore, che è difficile che accada ma con qualcuno alla prima esperienza non impossibile
A lavoro da me c'è una rubrica telefonica "speciale" realizzata in Access in collaborazione con V_F e nonostante l'impegno e gli sforzi di creare un database il più robusto possibile...non sai quante volte i miei colleghi, pur di non attenersi al corretto utilizzo, fanno affiorare errori nel codice. Dopo anni penso di essere finalmente riuscito a stabilizzarlo...quindi in bocca a lupo
Cmq, tornando al tuo database...
mentre tu mi giravi l'ultimo allegato, io già ero all'opera. Come ti dicevo, non è una cosa così semplice...infatti fammi sapere come va questo nuovo allegato che ti giro. Tieni ovviamente sempre quello precedente a portata di mano perché in quest'ultimo ho dovuto stravolgere un po' di cose per raggiungere l'obiettivo.
Per aggiungere un codice univoco, ho sfruttato la proprietà Names del Workbook. In pratica se ti porti su con il mouse nella barra multifunzione, troverai la scheda FORMULE. Se vai in GESTIONE NOMI puoi definire un NOME (NAMES). Ora io ho creato un nuovo NOME che fa riferimento proprio a questo numero univoco (ID-Transfer) e l'ho fatto partite da 0 ("zero"). Questo NOME però tu non lo vedrai nell'elenco della scheda FORMULE perché l'ho generato tramite VBA e l'ho reso invisibile.
Fatto ciò, ogni qual volta si crea un nuovo cliente, nella colonna ID-Transfer verrà posto un codice "ID-0000x" nella cella degli Arrivi e avrà il suo gemello in quella del Ritorno.
A questo punto si genera un nuovo ID che avrà come numero quello successivo all'ultimo e verrà memorizzato nel NOME Id-Trasfer. Perciò anche se cancelli un cliente, il contatore andrà sempre avanti.
Ora, quando provi a modificare un cliente, dopo che hai fatto SALVA, parte un ciclo che va a verificare la presenza o meno del codice gemello. Ti riporto le varie casistiche:
1) se lo trova il codice gemello, effettua un controllo se la tipologia di viaggio è diversa rispetto a quello precedente. Esempio...se hai modificato l'andata, lui cerca il ritorno (tramite le due lettere di fianco A/R)...se non lo trova non fa nulla.
2) se trova il codice id gemello e verifica che il viaggio è diverso da quello precedente, allora ti mostra un messaggio se vuoi modificare l'altro viaggio oppure no. Se scegli SI, modifica la UserForm andando a popolare le textbox in base alla tipologia di viaggio.
3) se trova il codice id gemello e anche che il viaggio sia diverso da quello precedente...se alla richiesta di modificare anche l'altro viaggio, scegli NO allora non fa nulla.
Fammi sapere se funziona.
Allegati:
You must be logged in to view attached files.nonostante l'impegno e gli sforzi di creare un database il più robusto possibile...non sai quante volte i miei colleghi, pur di non attenersi al corretto utilizzo, fanno affiorare errori nel codice
Confermo! Il mio supergestionale in Access (credo di essermi fatto una buona esperienza ormai) e' in continuo affinamento da 15 anni perche' ad ogni nuovo utente (un nuovo collega che arriva) c'e' sempre qualche baco nascosto che salta fuori. Del resto e' quello che accade anche ai software commerciali... non per niente le software house vivono in buona parte sull'assistenza, la manutenzione e le revisioni dei programmi. Be' accade anche a Windows stesso no? Comunque state facendo un gran lavoro
Comunque state facendo un gran lavoro
Lo penso anche io Alex è un ottimo interlocutore d'altronde abbiamo preso la luce da un certo VF
Allora ho un piccolo problema ho fatto copia incolla della base dati ed ho riprodotto manualmente il numero id-transfer 1 ad 1.
Ora sono arrivato all'id-00051, ma se inserisco una nuova riga mi inserisce id-00005. Come faccio a farlo partire da dove voglio io e soprattutto se lo voglio far ripartire da zero?
Nella sub elimina righe sarebbe utile dire elimina tutte le righe del foglio e fai ripartire l'id da zero anche perchè inserisci oggi inserisci domani quel numero id diventerà sempre più grande.
Se mi dici come fare manualmente lo faccio direttamente sul file, l'ho cercato ma non riesco a trovarlo nel codice vba
In teoria non dovresti caricare tu i dati perché il contatore "Id-Transfer" si incrementa solo tramite codice.
Cmq per ora incrementa manualmente seguendo queste indicazioni:
Sai aprire una finestra immediata? Portati nell'editor VBE e premi contemporaneamente Ctrl + G. Si apre una finestra e al suo interno ci scrivi ThisWorkbook.Names("Id_Transfer").Value = 51 e poi dai Invio. Poi giusto per vedere se tutto è andato a buon fine scrivi:
?ThisWorkbook.Names("Id_Transfer").Value e poi dai Invio
Dovrebbe uscirti 51
Nella sub elimina righe sarebbe utile dire elimina tutte le righe del foglio e fai ripartire l'id da zero
Quand'è che lanci questa Sub? Non mi sembra di vederla legata a nessun pulsante. Cmq dovrebbe bastare una cosa del genere alla fine della Sub:
ThisWorkbook.Names("Id_Transfer").Value = 0Sai aprire una finestra immediata? Portati nell'editor VBE e premi contemporaneamente Ctrl + G. Si apre una finestra e al suo interno ci scrivi ThisWorkbook.Names("Id_Transfer").Value = 51 e poi dai Invio. Poi giusto per vedere se tutto è andato a buon fine scrivi:
?ThisWorkbook.Names("Id_Transfer").Value e poi dai Invio
risolto
Quand'è che lanci questa Sub? Non mi sembra di vederla legata a nessun pulsante. Cmq dovrebbe bastare una cosa del genere alla fine della Sub:
ad inizio anno quando è finita la stagione per resettare tutto. non è legata la lancio manualmente
Ho un piccolo dubbio, quando cerco un ritorno e lo modifico, lui mi chiede se voglio modificare l'andata se io dico si, mi ripopola correttamente ma alcune textbox mi rimangono bloccate in modo errate nel senso che mi prende i dati dell'andata ma alcune textbox dell'andata sono bloccate, ora ho modificato cosi e sembra anche funzionare ma non so se ho sbagliato ad inserire qualche dato:
For i = 3 To active_table(Me).Columns.Count - 3 Controls("TextBox" & i) = "" Controls("TextBox" & i).Enabled = True Controls("TextBox" & i) = c.Offset(, i - 12) Next i TextBoxA = c.Offset(, -10) TextBoxA.Enabled = True TextBoxB.Enabled = False TextBoxB = "" TextBox8.Enabled = False TextBox8 = "" TextBox9.Enabled = False TextBox9 = "" TextBox10 = c.Offset(, -2) 'HO MODIFICATO DA QUI TextBox10.Enabled = True TextBox11.Enabled = False TextBox11 = "" ' FINO A QUI SalvaViaggio = True xViaggio = c.Offset(, -11) Exit Sub Else i = MsgBox("Vuoi modificare anche il viaggio di ritorno?", vbQuestion + vbYesNo, "Transfer") If i = vbNo Then Exit For For i = 3 To active_table(Me).Columns.Count - 3 Controls("TextBox" & i) = "" Controls("TextBox" & i).Enabled = True Controls("TextBox" & i) = c.Offset(, i - 12) Next i TextBoxA.Enabled = False TextBoxA = "" TextBoxB = c.Offset(, -10) TextBoxB.Enabled = True TextBox7.Enabled = False TextBox7 = "" TextBox10.Enabled = False 'HO MODIFICATO DA QUI TextBox10 = "" TextBox11 = c.Offset(, -2) TextBox11.Enabled = True ' FINO A QUI SalvaViaggio = True xViaggio = c.Offset(, -11) Exit SubHo qualche dubbio su c.Offset che sia corretto nella parentesi
Si può essere che abbia fatto qualche errore nel dichiarare le TextBox da abilitare/disabilitare. Se hai effettuato le correzioni e funziona meglio così.
Gli Offset non sono altro che lo scostamento di x passi (negativi verso sinistra/su e positivi verso destra/giù) rispetto a dov'è il riferimento della cella....passami il termine..."Attiva/Selezionata". Quindi dovresti calcolare a quale cella fa riferimento la variabile c in partenza e capire se i vari numeri (positivi e/o negativi) sono corretti in base al risultato da ottenere.
effettivamente non riesco a capire quanto vale "C" e come verificarlo, ma sembra funzionare tutto cmq, anche il resto. Ti aggiorno dopo prove approfondite. Cmq ottimo lavoro e grazie mille davvero.
Ciao Alex,
Senti ma se volessi nascondere i tasti inserisci riga e cerca riga dopo aver prelevato dalla listview negli altri userform come dovrei fare esattamente?
Ho provato a guardare sull'userform transfer ma mi sembra un po diverso come sistema anche perchè è integrato con il discorso del ritorno
Nascondere o disabilitare? Perché nella UserForm Transfer si disabilitano.
Cmq in entrambi i casi ci sono le proprietà Enabled e Visible
Es.:
Per disabilitare...
nome del button.Enabled = False
Per renderlo invisibile...
nome del button.Visible = False
mmmm...il problema è che tutti gli userform fanno capo ad un codice generale che è questo:
Public Sub form_save(frm As Object) 'dopo aver selezionato una riga dal listview, 'permette il salvataggio della riga se modificata Dim f As Range Dim i As Integer Dim r As Range Dim s As String Dim LI As ListItem Dim is_sala_cucina As Boolean is_sala_cucina = (frm.Caption = "NOTE CUCINA" Or frm.Caption = "NOTE SALA") If frm.ListView1.ListItems.Count = 0 Then set_info frm, "Non hai prelevato alcuna riga dall'elenco sottostante.." frm.TextBox1.Tag = 0 Exit Sub End If Set LI = frm.ListView1.SelectedItem If LI Is Nothing Then set_info frm, "Per usare questa funzione devi prelevare una riga dall'elenco sottostante." frm.TextBox1.Tag = 0 Exit Sub End If s = validate_fields(frm) If s <> "" Then set_info frm, s frm.TextBox1.Tag = 0 Exit Sub End If Set r = active_table(frm) 'Set r = r.Offset(1).Resize(r.Rows.Count - 1) Set f = r.Columns(1).Find(LI, LookIn:=xlValues, LookAt:=xlWhole) f.Offset(, 1) = CDate(frm.TextBox1) For i = 2 To r.Columns.Count - 1 f.Offset(, i) = frm.Controls("Textbox" & i) Next Call sorting(Worksheets(frm.Caption), is_sala_cucina) Call form_clear(frm) set_info frm, "Riga aggiornata con successo." End Submentre l'userform transfer ha un altro codice. Ma se i bottoni hanno tutti un nome diverso nei vari userform come indicarli?
La logica del codice originale era di uniformare e fondamentalmente tutti i pulsanti hanno (avevano) lo stesso nome: btn*
Il form TransferNew non usciva da questa regola. Comunque le routine comuni (quelle nel modulo 2) accettano il parametro frm che punta al form chiamante.
ho provato cosi ma non va
Public Sub form_save(frm As Object) 'dopo aver selezionato una riga dal listview, 'permette il salvataggio della riga se modificata Dim f As Range Dim i As Integer Dim r As Range Dim s As String Dim LI As ListItem Dim is_sala_cucina As Boolean is_sala_cucina = (frm.Caption = "NOTE CUCINA" Or frm.Caption = "NOTE SALA") frm.btnSearch.Enabled = False frm.btnInsert.Enabled = False If frm.ListView1.ListItems.Count = 0 Then set_info frm, "Non hai prelevato alcuna riga dall'elenco sottostante.." frm.TextBox1.Tag = 0 Exit Sub End If Set LI = frm.ListView1.SelectedItem If LI Is Nothing Then set_info frm, "Per usare questa funzione devi prelevare una riga dall'elenco sottostante." frm.TextBox1.Tag = 0 Exit Sub End If s = validate_fields(frm) If s <> "" Then set_info frm, s frm.TextBox1.Tag = 0 Exit Sub End If Set r = active_table(frm) 'Set r = r.Offset(1).Resize(r.Rows.Count - 1) Set f = r.Columns(1).Find(LI, LookIn:=xlValues, LookAt:=xlWhole) f.Offset(, 1) = CDate(frm.TextBox1) For i = 2 To r.Columns.Count - 1 f.Offset(, i) = frm.Controls("Textbox" & i) Next Call sorting(Worksheets(frm.Caption), is_sala_cucina) Call form_clear(frm) set_info frm, "Riga aggiornata con successo." End Sub -
AutoreArticoli
