Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Selezionare range

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Selezionare range

Postdi ricky53 » 05/02/14 21:26

Ciao,
come si utilizza?

Non farcelo scoprire.

Dicci quali passi fare per riprodurre l'errore !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Sponsor
 

Re: Selezionare range

Postdi Anthony47 » 06/02/14 01:13

Mi permetto di dire che la gestione di quella userform e' un casino, con eventi che si susseguono senza alcuna logica apparente; ad esempio:
-se seleziono una voce in listbox1 parte ovviamente l' evento ListBox1_Change e relativa macro
-all' interno della macro viene modificata la selezione in listbox2, cosa che scatena il suo evento ListBox2_Change e relativa macro.
-questa macro tocca la selezione in listbox1; fortunatamente conferma quella preesistente, quindi non scatta un nuovo evento ListBox1_Change.
-aver cambiato il valore scelto per il listbox2 fa scattare l' evento ListBox2_Click... E qui succede che il rowsource di Listbox2 si disallinea con quello di Listbox1, grazie (o per colpa) della riga
NewPubbliForm.ListBox2.RowSource = ws.Name & etc etc
Il nuovo rowsource settato contiene 4-5 voci (nelle prove che ho fatto), invece delle 20 originali.
-a fine macro di ListBox1_Change parte l' evento ListBox1_Click e relativa macro; che ha un comportamento simile a quanto fa ListBox2_Click, salvo che manipola il rowsource di ListBox3.

Almeno pero' la sequenza di eventi e' interrotta.

Da questo momento, pero', fintanto che in listbox1 si seleziona un valore nella parte alta va tutto liscio (non so se va anche "bene"); ma appena si supera il limite delle voci ora contenute in ListBox2 esce l' errore di "run time 380. Impossibile impostare la proprieta'. Valore non valido".

Sinceramente non so se' la modifica del rowsource di listbox2 all' interno della ListBox2_Click e' voluto o e' un errore; solo chi sa che cosa significano quei controlli lo puo' sapere.

Da parte mia mi sento di suggerire di usare qualche flag per impedire l' esecuzione di routine di eventi non desiderati.
Ad esempio, si potrebbe dichiarare una LB1C As Boolean in testa al modulo (quindi variabile condivisa nel modulo del codice della userform), e compilare /usare subito in testa e in coda alla ListBox1_Change questa variabile, con un codice del tipo
Codice: Seleziona tutto
Private Sub ListBox1_Change()
If LB1C Then Exit Sub
LB1C = True
'
'istruzioni di evento
'
LB1C = False
End Sub

Lo stesso flag puo' poi essere usato in testa ad altre routine di evento per impedirne l' esecuzione; es:
Codice: Seleziona tutto
Private Sub ListBox2_Change()
If LB1C Then Exit Sub
'
'istruzioni di evento


Ovviamente si useranno piu' flag per poter individuare piu' fasi significative del processo, e con essi inibire in modo mirato eventi non desiderati (in questo senso, il blocco dell' evento ListBox2_Change all' interno del ListBox1_Change e' solo un esempio, non so se e' necessario invece mantenerlo abilitato).

Spero ci sia qualche spunto utile.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Selezionare range

Postdi elios66 » 06/02/14 09:23

Ciao,
innanzi tutto grazie a Ricky e Anthony per l'interesse e l'aiuto. Ora vi spiego. Quella serie di eventi scatenati nella form li ho "presi" dal web, perchè mi serviva allineare le due listbox. Io non sono in grado di fare quelle cose (sinceramente ci capisco poco) ma mi piace imparare. Il fatto è (stranissimo) che in un altro file che è una delle varie prove, quel "casino" non da errore, sono passato al file che ho postato perchè quello dava erore nell'inserimento dal foglio Maschera al foglio Elenco. Magari vi posto quell'altro file, forse è più semplice sistemare quel problema. Io non ci sono riuscito.
Il file funziona così:
Avrete notato che è una sorta di magazzino per una piccola biblioteca.
1- dal foglio Maschera si sceglie il mese, si sceglie l'articolo e e viene attivata la cella L21 e quindi L26 per inserire i dati e vengono avviate le macro Copia_Qtaindep e Copia_Qta_ricevuta del modulo4. Queste macro ricopiano nel foglio Elenco (che è l'inventario vero e proprio) il contenuto delle due celle nelle rispettive righe nelle colonne del mese selezionato in Maschera. Tutta questa parte è quella che funzionava ma non funziona più nel file con la form funzionante.

2- La form ha lo scopo di inserire/eliminare articoli e nuove categorie, a parte qualche intoppo funzionano.

3- dalla form vendono aggiornati il foglio Elenco inserendo nella rispettiva categoria l'articolo, il foglio Pubblicazioni , foglio1 che serve per l'elenco degli articoli della Maschera, e il foglio ModelloMese che serve da distribuzione per altri collaboratori affinchè abbiano l'elenco aggiornato ma senza l'inventario.

Fatemi sapere.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: Selezionare range

Postdi elios66 » 06/02/14 10:41

ricky53 ha scritto:Ciao,
come si utilizza?

Non farcelo scoprire.


ho notato che da errore quando seleziono l'ultima voce della listbox1 e poi seleziono un'altra voce. Non ho capito bene cosa volevi dire tu, ho diminuito il range del RowSource da 101 a 20, ma non funziona.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: Selezionare range

Postdi elios66 » 06/02/14 10:50

http://www.filedropper.com/s28-forum2-migliore

Posto di nuovo il file. Questo sembra che faccia tutto senza blocchi. :)

Vi chiedo un aiuto: nel foglio Maschera se nelle celle L21 e L26 non metto dei valori non si attivano le celle correttamente. A me interessava che le due celle anche se vuote passano ad attivare quella successiva. Es. la L21 ="" (invio) attivi la L26 che anche se ="" attivi la J21. Questo perche con il semplice invio possa spostarmi tra le tre celle che sia con valori o meno.
Al momento sto usando questo codice nel modulo del foglio Maschera:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Address(0, 0)
 
    Case "J17"
        Me.Range("J21").Activate
        CancellaImmissione
    Case "J21"
        Me.Range("L21").Activate
    Case "L21"
        If Target.Value <> "" Then
         Copia_Qta_ricevuta 
        End If
        Me.Range("L26").Activate
    Case "L26"
        If Target.Value <> "" Then
         Copia_Qtaindep   
        End If
 
End Select

End Sub
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Selezionare range":


Chi c’è in linea

Visitano il forum: patel e 3 ospiti