Sviluppare funzionalita su Microsoft Office con VBA Ordinamento Automatico Righe

Login Registrati
Stai vedendo 25 articoli - dal 51 a 75 (di 77 totali)
  • Autore
    Articoli
  • #45034 Score: 0 | Risposta

    FROST220684
    Partecipante

      alexps81 ha scritto:

      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.

       

      alexps81 ha scritto:

      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

      #45041 Score: 0 | Risposta

      FROST220684
      Partecipante

        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.
        #45046 Score: 0 | Risposta

        FROST220684
        Partecipante

          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

          #45050 Score: 0 | Risposta

          alexps81
          Moderatore
            58 pts

            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

            #45051 Score: 0 | Risposta

            FROST220684
            Partecipante

              alexps81 ha scritto:

              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

              alexps81 ha scritto:

              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.

              alexps81 ha scritto:

              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

              #45052 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                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.

                #45053 Score: 0 | Risposta

                FROST220684
                Partecipante

                  alexps81 ha scritto:

                  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: 

                  alexps81 ha scritto:

                  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

                  #45054 Score: 0 | Risposta

                  alexps81
                  Moderatore
                    58 pts

                    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.

                    #45055 Score: 0 | Risposta

                    FROST220684
                    Partecipante

                      Ciao Alex,

                      alexps81 ha scritto:

                      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.

                      alexps81 ha scritto:

                      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

                      alexps81 ha scritto:

                      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.

                      #45061 Score: 0 | Risposta

                      alexps81
                      Moderatore
                        58 pts

                        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.
                        #45064 Score: 0 | Risposta

                        FROST220684
                        Partecipante

                          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.
                          #45066 Score: 0 | Risposta

                          FROST220684
                          Partecipante

                            alexps81 ha scritto:

                            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

                            #45067 Score: 0 | Risposta

                            alexps81
                            Moderatore
                              58 pts

                              FROST220684 ha scritto:

                              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.
                              #45071 Score: 1 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                alexps81 ha scritto:

                                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   

                                #45072 Score: 0 | Risposta

                                FROST220684
                                Partecipante

                                  vecchio frac ha scritto:

                                  Comunque state facendo un gran lavoro   

                                  Lo penso anche io Alex è un ottimo interlocutore d'altronde abbiamo preso la luce da un certo VF       

                                  #45079 Score: 0 | Risposta

                                  FROST220684
                                  Partecipante

                                    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

                                    #45082 Score: 0 | Risposta

                                    alexps81
                                    Moderatore
                                      58 pts

                                      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

                                      FROST220684 ha scritto:

                                      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 = 0
                                      #45085 Score: 0 | Risposta

                                      FROST220684
                                      Partecipante

                                        alexps81 ha scritto:

                                        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

                                        risolto

                                        alexps81 ha scritto:

                                        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 Sub

                                        Ho qualche dubbio su c.Offset che sia corretto nella parentesi

                                        #45088 Score: 0 | Risposta

                                        alexps81
                                        Moderatore
                                          58 pts

                                          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.

                                          #45113 Score: 0 | Risposta

                                          FROST220684
                                          Partecipante

                                            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.

                                            #45120 Score: 0 | Risposta

                                            FROST220684
                                            Partecipante

                                              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

                                              #45124 Score: 0 | Risposta

                                              alexps81
                                              Moderatore
                                                58 pts

                                                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

                                                #45125 Score: 0 | Risposta

                                                FROST220684
                                                Partecipante

                                                  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 Sub

                                                  mentre l'userform transfer ha un altro codice. Ma se i bottoni hanno tutti un nome diverso nei vari userform come indicarli?

                                                  #45126 Score: 0 | Risposta

                                                  vecchio frac
                                                  Senior Moderator
                                                    272 pts

                                                    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.

                                                    #45127 Score: 0 | Risposta

                                                    FROST220684
                                                    Partecipante

                                                      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
                                                      
                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 51 a 75 (di 77 totali)
                                                    Rispondi a: Ordinamento Automatico Righe
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: