Sviluppare funzionalita su Microsoft Office con VBA Problema userform multipagina

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #29939 Score: 0 | Risposta

    Giulio
    Partecipante

      Buongiorno a tutti, allego un file di un configuratore con userform (pulito dalle cose non di interesse per questo topic) con cui ho un problema che non riesco a spiegarmi. Praticamente all'avvio si apre un form che chiede di inserire il numero di elementi. Nel secondo form questi elementi si possono configurare tramite un multischeda (le schede si possono cambiare con la combobox posta appena sopra). Gli elementi sono ordinati in ordine decrescente; il primo (ovvero il numero n) ha una scheda diversa dagli altri. Se in un secondo momento si riduce il numero di elementi tramite la textbox posta in cima al form, le schede vengono aggiornate di conseguenza: le ultime vengono nascoste e disabilitate, quelle ancora visibili vengono rinominate in funzione del nuovo numero di elementi, e se ci si trovava in una scheda che non c'è più si ritorna automaticamente alla prima.

      Ora, provate la seguente combinazione: 1)Nel primo form inserite 13 elementi 2)Nel secondo form switchate alla scheda dell'elemento 6 tramite la combobox, 3) Cambiate il numero massimo di elementi a 3 con la textbox, 4)Per scatenare l'evento after_Update della txtN cliccate ora su un controllo del multischeda (QUESTO è FONDAMENTALE, SE PER ESEMPIO CLICCATE INVIO PER CONFERMARE IL NUOVO NUMERO DI ELEMENTI IL PROBLEMA NON SI VERIFICA). Vedrete che è comparso un secondo multischeda sotto ed è come se la pagina corrente fosse "freezata" in primo piano (Alcune volte invece esce proprio un runTime error).

      Ho anche isolato quali sono le righe di comando che generano il problema: sono entrambe nell'evento after_update del txtN del secondo form, ed in particolare sono la riga "if cmbBraccio.Listindex>n-1 then cmbBraccio.ListIndex=0" (che sposta alla prima pagina se la pagina corrente non è più attiva) e la riga "call pagOff" che nasconde le pagine non più attive. SE ANCHE SOLO UNA di queste due righe non è commentata, il problema si verifica. 

      Qualcuno saprebbe capire cosa succede e perchè si verifica questa cosa stranissima, SOLO se la modifica del txtN avviene cliccando dentro un controllo del multischeda?

      Grazie a chiunque vorrà aiutarmi

      Giulio

      Allegati:
      You must be logged in to view attached files.
      #29944 Score: 0 | Risposta

      albatros54
      Moderatore
        89 pts

        Ciao@Giulio

        Il problema che tu riscontri(se si puo chiamare problema) sta nel fatto che la scheda numero 20, che è quella che tu dici che rimane""freezata", ha una struttura diversa dalle altre 19 , quindi quando tu vai a variare il numero di "page" del controllo "Multipage", queste è come se fossero messe una sull'altra, prova ha variare le dimensioni della page20 vedrai che non la vedi piu ""freezata".

         

        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 )
        #29945 Score: 0 | Risposta

        Giulio
        Partecipante

          Ciao Albatros, grazie per il riscontro, capisco quello che intendi ma il controllo multipage è uno solo, quindi tu cambiando pagina non dovresti vedere due pagine sovrapposte, dovrebbe semplicemente cambiare pagina. Poi in realtà la scheda "freezata" non è quella in secondo piano che sarebbe appunto la 20, ma quella in primo piano. Infatti se provi a compilare i parametri della scheda visibile e a cambiare pagina, noterai che la pagina in primo piano non cambia e rimane sempre quella, col risultato che le varie pagine non sono - di fatto - compilabili. 

          #29963 Score: 0 | Risposta

          Giulio
          Partecipante

            Nessuno vuole aiutarmi a capire questo problema??

            #29964 Score: 0 | Risposta

            Marius44
            Moderatore
              58 pts

              Ciao

              Credo che il problema stia nel "capire" il tuo elaborato.

              Per esempio a me è successo che ho scaricato il file, l'ho aperto (anche se mi dice che ci sono collegamenti che non possono essere aggiornati) ed ho cliccato sulla X in alto a destra della Form. Bene. Mi ha chiuso il Form. Non mi consente, però, di cestinare il file in quanto "risulta aperto. Chiuderlo e poi proseguire".

              Nella videata della Form con il mio visore non riesco a vedere se in basso c'è qualche pulsante per chiudere correttamente il file.

              Fra l'altro non è facile "vedere" il codice sottostante.

              Ciao,

              Mario

              #29965 Score: 0 | Risposta

              Giulio
              Partecipante

                Marius44 ha scritto:

                Per esempio a me è successo che ho scaricato il file, l'ho aperto (anche se mi dice che ci sono collegamenti che non possono essere aggiornati) ed ho cliccato sulla X in alto a destra della Form. Bene. Mi ha chiuso il Form. Non mi consente, però, di cestinare il file in quanto "risulta aperto. Chiuderlo e poi proseguire".

                Nella videata della Form con il mio visore non riesco a vedere se in basso c'è qualche pulsante per chiudere correttamente il file.

                Colpa mia, non ho ancora implementato la modalità di chiusura corretta; x evitare questo problema consiglio di aprire il file col blocco macro (il classico trucchetto con lo Shift premuto) ed avviare il programma direttamente da codice facendo run sul form "frm1_Title". Così il codice dovrebbe essere fruibile senza problemi. Aperto il form1, seguite i passaggi che ho elencato in cima ed il problema dovrebbe essere chiaro.

                #29973 Score: 0 | Risposta

                albatros54
                Moderatore
                  89 pts

                  Giulio ha scritto:

                  Nessuno vuole aiutarmi a capire questo problema??

                  Ciao@Giulio

                  il problema che si presenta è causato dalla chiamata a questa " Sub pagOff(ByRef pagina As Object)", difatti , se tu commenti nel codie la chiamata  questa sub , il tutto funziona.

                  Per risolvere il problema, se ho capito, bisognerebbe memorizzare in una variabile il nome del braccio attivo,e dirgli di non eseguire la sun pagoff su quella pagina.

                  Domanda: ma perche vuoi rendere nascoste le pagine?

                   

                   

                   

                  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 )
                  #29982 Score: 0 | Risposta

                  Giulio
                  Partecipante

                    Ciao Albatros, mi serve un metodo che disabiliti i controlli delle pagine inattive perchè poi questa sarà la scrematura per salvare i dati che realmente mi serviranno in caso di revisione (funzione che sarà prevista). Inoltre, nascondere le pagine lo avevo mantenuto perchè il metodo PagOff dovrebbe servirmi anche successivamente per altri multipage che invece vengono gestiti da tab. In ogni caso ti segnalo che anche togliendo la sub PagOff (o la riga interna alla sub .Visible=false, che è quella che dà i problemi) il problema persiste, perchè deve necessariamente essere eliminata (o commentata) anche la riga: "if cmbBraccio.Listindex>n-1 then cmbBraccio.ListIndex=0". Infatti se questa riga di codice rimane, noterai che l'errore si genera anche se elimini "Pagoff".

                    A seguito dell'obiezione di Marius comunque rinoltro il file corretto anche per apertura e chiusura.

                    Grazie per il riscontro

                    Allegati:
                    You must be logged in to view attached files.
                    #29985 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      @giulio

                      mi chiarisci perchè il "NAME" delle varie pagine della "multipage" sono nominate tutte con "pagBR00,pagBR01,...." mentre le pagine  6 e 5  hanno per "NAME" "cmdCopia14,cmdCopia15"?

                       

                      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 )
                      #29996 Score: 0 | Risposta

                      Giulio
                      Partecipante

                        albatros54 ha scritto:

                        @giulio

                        mi chiarisci perchè il "NAME" delle varie pagine della "multipage" sono nominate tutte con "pagBR00,pagBR01,...." mentre le pagine  6 e 5  hanno per "NAME" "cmdCopia14,cmdCopia15"?

                        Un errore di cui non mi ero accorto. La nomenclatura giusta sarebbe "PagBrXX", il "cmd" dovrebbero essere i pulsanti interni alle pagine. In realtà però non sfrutto da nessuna parte l'attributo Name delle pagine, quindi credo sia un peccato veniale.

                        #29998 Score: 0 | Risposta

                        albatros54
                        Moderatore
                          89 pts

                          Giulio ha scritto:

                          Un errore di cui non mi ero accorto

                          Allora,cerchiamo di mettere ordine, vai nelle schede o pagine, 6 e 5,

                          se selezioni il pulsante copia, vedi che questi portano il NAME "CommandButton" rinominali con"cmdcopia13 e cmdcopia14" mentre nel "NAME" della pagina rinominali con "pagBR14 e pagBR15",i numeri non hanno importanza , perche quando si "Initialize" la userform "frm1_title" ci pensa il codice a numerarli.

                          Chiarimento: perchè hai rinominato la txtbox della "Frm1_title" con lo stesso "NAME" della Textbox delle varie "pagine"?

                          Poi vorrei  capire la logica del codice, tu dalla "Frm1_title" inserendo il numero dici di creare delle "page" del controllo"Multipage" uguale al numero inserito.

                          Una volta inserito il numero(nell'esempio che hai postato 13), nella combobox in alto a DX mi ritrovo le pagine create rinominate"Braccio...", con lo stesso valore (13)nella textbox in alto a SX , che porta lo stesso "NAME" della Textbox della Frm1_title.

                          Ora selezionado dalla combobox un braccio( nel nostro caso Braccio6) e seleziono la pagina, se non cambio il valore della textbox il tutto funziona.

                          Punto critico: appena cambio il valore della textbox,  e faccio click in qualsiasi punto della pagina, il sistema si"blocca", da notare che nella combobox si seleziona il "braccio3" e non il "braccio6" che avevo seleziona.

                          Non riesco a venine a capo.

                           

                           

                           

                           

                          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 )
                          #30004 Score: 0 | Risposta

                          Giulio
                          Partecipante

                            Allora, le due txt del form 1 e 2 hanno lo stesso nome perchè fondamentalmente fanno la stessa cosa. Il sistema è pensato perchè all'inizio l'utente inserisca il numero di elementi, da cui vengono comandate le pagine del form successivo; però in funzione dei parametri inseriti l'utente potrebbe rendersi conto anche in un secondo momento di volere aumentare o ridurre il numero di elementi quindi ho permesso anche posteriormente la modifica del numero. Siccome la numerazione degli elementi va da n a 1 e non viceversa, se n viene cambiato i valori associati ai listIndex della combo per la scelta del braccio vengono cambiati di conseguenza, ma fondamentalmente le pagine (come oggetti) rimangono sempre le stesse, solo che nella combo hanno un numero diverso. Quindi può succedere che cambiando la txt la pagina corrente assuma un valore diverso (in realtà la pagina è sempre quella perchè il ListIndex della combo non è cambiato). 

                            Il problema nasce quando vengono ridotti gli elementi abbassando il numero della textbox, nel caso in cui ci si trovi in una pagina che dovrà essere disabilitata (ricordo che l'attributo Value del Multipage va da 0 a n-1, non da n a 1 come per i nomi assegnati agli elementi). In questo caso il codice dovrebbe spostare innanzitutto il listindex della combo di scelta degli elementi a 0, puntando quindi alla prima pagina (e questa è la prima riga di codice critica), dopodichè disattivare le pagine non più presenti (e questa è la seconda riga critica).

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: Problema userform multipagina
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: