Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

progetto spese

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

progetto spese

Postdi miko » 07/06/17 19:12

saluti a tutti gli utenti del forum, spero di trovarvi bene.

dopo anni di assenza torno a visitarvi.

sto realizzando un piccolo progettino, ma purtroppo ho completamente dimenticato excel ed il vba.

tuttavia, rivedendo alcune macro, sono riuscito ad elaborare qualcosa che necessita di correzione e/o modifica, e forse di eliminare parti di codice inutile.
Immagine
allego il file che ho realizzato
http://www.filedropper.com/spese_1
come nella immagine ho inserito una form con 4 textbox, numero, data, importo e numero pagina;

all'apertura di excel viene selezionata la prima cella, cella B6-blue, ed il focus è nel textbox numero.

dopo aver inserito il numero e la parentesi nel textbox, premendo invio, il valore viene riportato nella relativa cella B6, ed il focus si sposta sulla textbox successiva per la data, e selezionata la cella relativa D6.

inserita la data, come semplice numero, esempio 12102017, senza premere alcun tasto, il contenuto della textbox viene trasformato in formato data 12-10-2017 ed inserito nella cella D6, ed il focus si sposta sull textbox importo.

in questo box inserendo un numero ed il punto per i decimali, il valore del textbox, premendo invio, viene inserito in F6 nel formato come in fig.
il focus si sposta sull'ultima box e selezionata la relativa cella H6.
dopo aver inserito il numero nel box il valore viene inserito nella cella H6.

raggiunta l'ultima cella-colonna utile, H6, devo passare alla cella B7, spostare il focus sul box numero e ripetere le operazioni precedenti fino a raggiungere l'ultima riga.

come dicevo inizialmente qualcosa funziona, ma ho problemi;

1) nel box numero, è consentito solo l'inserimento dei numeri e della parentesi, ma vorrei utilizzare il backspace;
dopo aver inserito la parentesi, automaticamente, senza premere invio, il contenuto del box deve essere inserito nella cella ed il focus spostato sul box successivo.

2) se le textbox sono vuote, cioè non inserisco alcun valore, e premendo invio per raggiungere la cella che devo modificare si cancellano i contenuti delle celle;

3) raggiunta la cella H6 devo passare alla cella B7, ma la selezione si sposta sulla stessa riga, alla cella L7;

la macro Sub RIGA_COLONNA, adatta allo scopo, funziona bene se avviata isolata, ma se collegata al textbox numero pagina non seleziona la cella desiderata, B7, ma un'altra cella.

4) selezionando una qualunque cella utile delle colonne B-D-F-H devo poter incominciare da questa per inserire i dati,

5) nel box importo dopo aver inserito i 2 decimali, automaticamente, senza premere invio, il contenuto del box deve essere inserito nella cella ed il focus spostato sul box successivo.

fino ad ora sono riuscito ad inserire i dati nel formato desiderato, ma per i punti descritti sto incontrando notevoli difficoltà.
attualmente uso win 10 ed office 2013
grazie, saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 467
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: progetto spese

Postdi miko » 07/06/17 19:43

scusate ma non riuscivo ad inserire l'immagine, veniva tagliata

Immagine

ciao
windows 10 - office 2013
miko
Utente Senior
 
Post: 467
Iscritto il: 29/12/09 10:44

Re: progetto spese

Postdi Anthony47 » 08/06/17 02:08

Bentornato.
Mi permetto di giudicare poco intuitiva l'interfaccia che hai descritto; che tra l'altro non aggiunge nulla ma toglie qualcosa alla semplice e conosciuta interfaccia Excel (vedasi la mancata "Convalida" di quanto deve essere inputato, o alla difficolta' di controllare la cella di destinazione di quanto scritto nella form).

Il mio suggerimento e' di creare una "tabella" (Menu /Inserisci /Tabella) e poi usi la tabulazione per muoversi da una cella all'altra e tornare automaticamente sulla prima colonna quando sei arrivato all'ultima. La tabella si allunga da sola quando sei all'ultima riga; se ci sono colonne con Convalide o formattazione o formule queste si propagano automaticamente. Usa una macro di Selection_Change per inserire automaticamente il "numero" della spesa (ma a che serve, visto che le righe hanno gia' la loro numerazione? Comunque non chiedere all'utente di contare 1-2-3-etc). Usa la Convalida per ricordare all'utente cosa deve inserire e controllare quel che inserisce

Se vuoi andare sulla form, questa deve "aggiungere" qualcosa all'interfaccia di Excel; comunque il mio suggerimento e' di caricare tutte le informazioni sulla userform e solo alla fine, tramite pulsante "Ok, Inserisci", popolare le celle sul foglio di lavoro.
I campi ad "autocompletamento" sono di dubbia utilita', perche' tolgono il controllo degli eventi all'utente.
Usa "ordine di tabulazione" per fare in modo di passare da un controllo al successivo in modo affidabile (per impostare la sequenza di tabulazione: selezioni la form, tasto dx, scegli "Ordine di tabulazione"); il SetFocus non e' affidabile.
Esamina e valida il contenuto di un controllo prima di passare al successivo (usa l'evento Exit del Controllo).
Usa la proprieta' ControlTipText per mostrare un messaggio di Informazione /Suggerimento d'uso quando entri in un Controllo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17439
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: progetto spese

Postdi miko » 10/06/17 09:42

buongiorno,
ho accettato il tuo consiglio, per cui ho dirottato verso l'uso della tabella, alla quale non avevo pensato, mai usata in passato, e che trovo più semplice per il mio scopo.
tuttavia se mi consenti, dopo aver ultimato questo lavoro vorrei tornare sulla form per chiarimenti, almeno a titolo di informazione, su alcuni aspetti deficitari della form che hai sottolineato nel tuo post.
tornando alla tabella, ho preparato alcune macro che vorrei sottoporre al tuo/vostro giudizio, che a mio modesto parere necessitano di modifiche, anche se funzionano.
la tabella contiene in riga 7 le intestazioni, per cui la prima cella utile è la B8, e termina in colonna H.
il numero in colonna B mi serve in fase di stampa per contare il numero dei valori, righe, importi.
le colonne da usare per l'inserimento dati sono B-D-F-H
se inserisco in cella B8, ad esempio il valore numerico 12, premendo il tasto freccia destra, ottengo il risultato 12 ), viene aggiunta la parentesi, e si seleziona la cella D8.
il tasto fraccia mi sposta la selezione dopo 2 colonne, e quando si giunge all'ultima colonna, H,
mi riporta alla riga successiva, 9, e colonna B.
fin qui è il risultato che volevo ottenere.
ma se uso il tasto tab in colonna H, mi riporta in cella C9 e non in B9 come vorrei;
se uso il tasto fraccia giù e sono in cella B8, mi seleziona la cella C9,e non B9 come vorrei;
se uso il tasto tab e mi trovo nell'ultima cella della tabella ad esempio H3, mi aggiunge un altra riga
ma prima viene selezionata la cella in colonna C e poi selezionata la cella B.
la macro relativa è questa:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo MESSAGGIO

    Application.EnableEvents = False
   
    If Not Intersect(Target, Me.Range("B8:B" & Rows.Count)) Is Nothing Then
        'SE INSERIAMO UN TESTO INVECE DI UN NUMERO ALLORA CANCELLIAMO IL VALORE INSERITO E
        'RISELEZIONIAMO LA STESSA CELLA
           If Not IsNumeric(Target.Value) And Target.Value <> "" Then
            MsgBox "VALORE NON VALIDO"
            Application.Undo
            GoTo CONTINUA
        End If
        'INSERIAMO NELLA CELLA B IL VALORE NELLA FORMA 12 )
          Target.Value = Format(Target.Value, "0 )")
    End If

    'CON L'USO DEI TASTI FRECCIA SELEZIONIAMO LA SUCCESSIVA
    'CELLA DOPO 2 COLONNE
    'QUANDO SI RAGGIUNGE L'ULTIMA COLONNA UTILE, COLONNA H,
    'SI PASSA ALLA RIGA SUCCESSIVA E PRIMA COLONNA UTILE, COLONNA B
ActiveCell.Offset(0, 1).Select   ???<<<<<<<<<<<<<<<<
Call RIGA_COLONNA   ????<<<<<<<<<<<<<<<
CONTINUA:
    Application.EnableEvents = True
    Exit Sub

MESSAGGIO:
    'MsgBox Err.Description
    Resume CONTINUA
End Sub

la sub RIGA_COLONNA richiamata è invece questa:
Codice: Seleziona tutto
Sub RIGA_COLONNA()
RIGA = ActiveCell.Row
COLONNA = ActiveCell.Column

If COLONNA = 10 Then
RIGA = RIGA + 1
COLONNA = 2
Cells(RIGA, COLONNA).Select
Else
Cells(RIGA, COLONNA).Select
End If

End Sub

anche se raggiungo l'intento, tuttavia presenta gli inconvenienti descritti, ed in particolare ho dei dubbi sulle righe di codice evidenziate;
se uso queste 2 righe insieme ottengo il risultato voluto, commentando una delle 2 non produce effetto.
nella colonna D devo inserire le date.
se in D8 inserisco il valore numerico 12102014 ottengo come risultato 10-10-2014, che è quello che intendo ottenere, ma purtroppo in un altra cella.
la macro relativa è la seguente:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo esci:
Application.EnableEvents = False
 If Not Intersect(Target, Me.Range("D1:D" & Rows.Count)) Is Nothing Then
    With Target
        If .Value <> "" Then
       .Offset(0, -3).NumberFormat = "DD-MM-YYYY"
        .Offset(0, -3).Value = DateSerial(Right(Target, 4), Mid(Target, 3, 2), Left(Target, 2))
        End If
    End With
End If
esci:
Application.EnableEvents = True

End Sub

anche modificando i parametri degli offset non ottengo il risultato voluto oppure ho errore.
dovendo pure creare le macro per la colonna importi e colonna numero di pagina come si procede
per inserire più eventi change per uno stesso foglio?
ho provato anche per questo problema varie soluzioni ma con risultati disastrevoli.
ciao, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 467
Iscritto il: 29/12/09 10:44

Re: progetto spese

Postdi Anthony47 » 13/06/17 00:17

Continuo a pensare che chiedere all'utente di un foglio di numerare le righe sia abbastanza avvilente per l'utente. Ci sono 10 modi diversi per inserire automaticamente il numero in una cella; il piu' semplice e' inserire in B8 la formula
Codice: Seleziona tutto
=SE(C8<>"";CONTA.VALORI($C$8:$C8)&")";"")

(in una tabella, se B8 e' la prima riga dati allora la formula si propaga fino in fondo automaticamente; se non succede copiala tu)

Le anomalie sulla cella selezionata sono il risultato della logica inserita nella tua Sub Worksheet_Change e la richiamata Sub RIGA_COLONNA; se lavori con una tabella e come ti ho appena detto di quelle macro non ne hai piu' bisogno.
Vedo pero' che tu usi XL2003, che ha una gestione diversa (rispetto a versioni piu' recenti); intanto la struttura dati equivalente alla Tabella si chiama "Elenco" (Menu /Dati /Elenco -Crea elenco); poi il tasto Enter consente di scansionare la tabella per colonna (dalla prima riga della prima colonna alla seconda riga, terza,... ultima riga; prima riga della seconda colonna, seconda riga, etc etc), mentre il tasto Tab ti fa scansionare la tabella per colonna; le frecce non hanno un comportamento particolare, quindi si comportano da frecce.

Vedo inoltre che usi sempre il codice nella Worksheet_Change per fare la convalida; ma se lo puoi fare con Convalida, perche' farlo con codice vba?
Se vuoi insistere con la Worksheet_Change per controllare la posizione della prossima cella selezionata allora la mia raccomandazione e' che non usi ActiveCell ma esclusivamente Target, che fa riferimento alla cella modificata non a quella che viene successivamente selezionata.
Es
Codice: Seleziona tutto
If Target.Column = 10 then
   Cells(Target.Row +1, 2).Select      'Seleziona colonna B della riga successiva
Else
   Target.Offset(0, 1).Select          'Colonna successiva della stessa riga
End If


Idem per l'inserimento delle date come sequenza di numeri: se Excel ha una sua sintassi per l'inserimento delle date perche' vuoi inventarne uno tuo? Ed e' inutile ricordare che esiste una Convalida che puo' controllare che nelle celle vengano inserite "Date" valide.

Insomma sappi che se hai Excel, anche se una versione oramai vecchiotta, hai a disposizione delle prestazioni che ti aiutano piu' di quello che (mi pare) immagini.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17439
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: progetto spese

Postdi Flash30005 » 14/06/17 01:18

Bentornato Miko :)
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8501
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: progetto spese

Postdi Flash30005 » 25/06/17 01:11

Malsparito Miki :cry:

Fatti sentire e manda un Feedback alla soluzione di Antony
:D
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8501
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: progetto spese

Postdi miko » 06/07/17 09:02

buongiorno,
perdonate il ritardo della mia risposta, sono stato assente per molto tempo.
le soluzioni ed i suggerimenti esaustivi di Anthony sono più che sufficienti sia per adottare la tabella, efficace soluzione a questo semplice progetto, sia per quanto riguarda le correzioni al codice delle macro.
tutto funziona perfettamente.
tuttavia per chi preferisce, come me, analizzare il codice, ho realizzato delle sub che, per una migliore ricerca, le sottopongo al vostro giudizio in un altro topic.
grazie, saluti
windows 10 - office 2013
miko
Utente Senior
 
Post: 467
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "progetto spese":

il vostro progetto
Autore: davide72
Forum: Discussioni
Risposte: 20
Progetto FLEX E BISON
Autore: Sdado
Forum: Programmazione
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti