PDA

Visualizza versione completa : VB/VB.NET VB su Excel, mostrare/nascondere righe e creare maschera inserimento dati



ARAGORN II
24-09-10, 20: 26
Ciao a tutti! :hap

Dunque non sapevo se postare direttamente qua o in Software data la banalità (suppongo) del quesito.

Detto questo il primo problema che ho incontrato è stato quello di creare due pulsanti, uno che permettesse di nascondere delle righe (nella cella B3), e uno che permettesse di mostrarle (nella cella A3), come si può vedere nelle 2 immagini.

http://lh6.ggpht.com/_CWL6skp8Efs/TJzpPndXMeI/AAAAAAAAAwg/7WryYjGPm94/nascondi.png

http://lh3.ggpht.com/_CWL6skp8Efs/TJzpPrSYv5I/AAAAAAAAAwc/Oyy46Zvu8gY/mostra.png

In realtà quello che volevo ottenere l'ho ottenuto attraverso "Registra macro", poi sono andato a vedere il codice per vedere se potevo migliorare qualcosa, ma sapendo veramente pochi comandi e non sapendo che cercare di specifico su Google (di guide ne ho trovate un'enormità) ho pensato di chiedere qua.

Questo è il codice utilizzato per nascondere le righe=


Only registered members can view code.

Questo per mostrarle:


Only registered members can view code.

Qui ho aggiunto l'ultima riga perchè in pratica dopo aver mostrato le righe, queste mi rimanevano selezionate, quindi, così provando qualche comando, ho inserito l'ultima riga. In realtà quello che volevo era che le righe mostrate venissero semplicemente deselezionate, ma non ci sono riuscito.

Oltre a questo pensate ci possa essere qualcosa per poter migliorare un po' la faccenda?

Stavo pensando, se io dovessi inserire una riga aggiuntiva tra le righe 4 e 7, allora schiacciando il pulsante mostra o nascondi io agirei esclusivamente sulle righe da 4 a 7 e non comprenderei la 8 che ho inserito. Ci sarebbe un modo per far si che questo avvenga.

La domanda dipende anche dal secondo "problema" che ho incontrato.

Mi piacerebbe creare una maschera per l'inserimento dati (non so se si chiama così sinceramente) che mi consentisse di indicare un campo per una tappa iniziale ($F4) una per l'ora di partenza ($G4) e un per la tappa finale ($H4) e un per l'ora di arrivo ($I4), e far in modo da poter indicare a che giorno inserire questi dati (ad esempio 31 agosto) inserendo una nuova riga al di sotto della 9 (in questo caso).

Non so se sono riuscito a spiegarmi bene. :hap

Grazie in ogni caso.

:bai

Andy86
25-09-10, 15: 49
:bai, premetto che sono parecchio arruginito in basic, quindi non sono sicuro di cosa e come si possa fare; però posso rispondere al secondo quesito:

Per avere qualcosa che cambi (si aggiorni) nel corso dell'esecuzione ti serve una cosina chiamata "variabile", che guarda caso è il primo mattone della programmazione.

(Variabile = ciò che varia. Un programma senza variabili è, per forza di cose, un programma statico, che fa sempre le stesse cose).

Per avere un intervallo che cambia, dovresti averlo memorizzato in una variabile, in modo da poterlo da modificare in base a ciò che si verifica (eventi) del tuo programma.

In sostanza dovresti incrementare, o decrementare, questo valore ogni volta che viene inserita, o eliminata, una riga.

Potresti quindi creare un bottone che aggiunge le righe, e poi incrementare la variabile al click di questo bottone. Ovviamente poi dovresti chiamare la variabile al metodo select().

In sostanza dovresti fare qualcosa tipo:


Only registered members can view code.
di guide ne ho trovate un'enormitàMeglio troppe che poche, se vuoi acquisire la dimestichezza necessaria a creare macro personalizzate quando e come ti gira, male non ti farebbe leggerle tutte. :hap

:bai

ARAGORN II
25-09-10, 20: 02
Ti ringrazio Andy! :hap Dunque credo, a grandi linee, di aver capito la questione che mi hai accennato, anche leggendo il codice, quello che un attimo non mi è chiaro è che cosa significhi toSel e selEnd, immagino che non debba inserire esattamente queste termini, ma celle e/o intervalli a cui mi riferisco, giusto?

Inoltre non tutto il codice va associato ad ogni pulsante, sbaglio? Cioe ad esempio al pulsante che mi permette di inserire una nuova riga devo associare questo codice:


Only registered members can view code.

mentre per mostrare le righe questo:


Only registered members can view code.

e questo per nasconderle:


Only registered members can view code.

Però non ho capito se la prima parte


Only registered members can view code.

deve essere presente in tutti e 3 i casi?


Meglio troppe che poche, se vuoi acquisire la dimestichezza necessaria a creare macro personalizzate quando e come ti gira, male non ti farebbe leggerle tutte.

Hai ragione, in effetti oggi mi sono messo un attimo a cercare e seguendo questa guida (http://forum.html.it/forum/showthread.php?threadid=1212111) sono riuscito a creare una maschera, ora manca di vedere come inserire i dati nelle varie celle, ma per ora mi sono fermato al primo post.

:bai

Andy86
26-09-10, 10: 27
:bai


che cosa significhi toSel e selEndtoSel e selEndsono i nomi (identificativi) che ho dato alle variabili (http://it.wikipedia.org/wiki/Variabile_%28informatica%29), di cui forse non ti è chiaro il significato.
Puoi mettere il nome che vuoi, ma devi ripeterlo ogni volta che vuoi leggere e modificare il valore ivi contenuto.
Se le sostituisci con il valore "costante" da te scelto, quello sarebbe uguale per tutta la durata del programma e non modificabile se non modificando manualmente il codice.

Inoltre non tutto il codice va associato ad ogni pulsante

Esatto, in teoria quando associ una macro ad un evento click ti permette di scegliere un metodo e non un intero file, perciò ho diviso per metodi... Aspetta... Forse in basic si chiamano "funzioni" :ehmm


Però non ho capito se la prima parte

La prima parte sarebbe la dichiarazione delle variabili, che non ricordo come si faccia in basic-excel :ehmm, dovresti farla partire una volta all'inizio del programma (o tuttalpiù mettere un quarto bottone chiamato "reset").

ARAGORN II
29-09-10, 15: 55
toSel e selEndsono i nomi (identificativi) che ho dato alle variabili, di cui forse non ti è chiaro il significato.
Puoi mettere il nome che vuoi, ma devi ripeterlo ogni volta che vuoi leggere e modificare il valore ivi contenuto.

Si ok su questo ci sono, credo, prima non avevo afferrato bene la cosa. :hap

Il problema è che ho qualche difficoltà con il codice. Ho anche provato a cercare su Google, ma quello che trovo è veramente troppo complicato per me, anche cercando "vb excel add row" vengo fuori cose che non riesco proprio a capire.

Giusto per fare un attimo di chiarezza, questo è quello che ho fatto finora.

http://lh3.ggpht.com/_CWL6skp8Efs/TKNDpAQrHdI/AAAAAAAAAwo/A5r2ginBjPM/s800/vb1.png

Dunque su 'Foglio 1' ho inserito la dichiarazione delle variabili, ho provato a metterlo li pensando fosse a monte di tutto, come mi dicevi.
Tuttavia quando scrivo il ";" dopo il "7" mi da "errore di compilazione", forse ci va qualcos'altro?

Il 'Modulo 1' contiene il codice che dovrebbe servire a mostrare/nascondere le righe, ancora è "statico", non l'ho modificato con le variabili perchè volevo vedere se il tutto funzionava per l'aggiunta di una riga.

Proprio a questo proposito, ho creato un nuovo pulsante al quale ho assegnato il 'Modulo 3' per aggiungere appunto una riga, ma quando vado a cliccare (il pulsante) mi da "errore di runtime" e mi seleziona in giallo quella riga.

Per quanto riguarda il 'Modulo 2' serve a far mostrare la UserForm1 per l'inserimento dei dati, ma è solo un abbozzo.

:bai

Andy86
29-09-10, 20: 58
:bai


Tuttavia quando scrivo il ";" dopo il "7" mi da "errore di compilazione", forse ci va qualcos'altro?

:ghgh In basic non ci va il punto e virgola come negli altri linguaggi... :sisi Non lo hai notato nelle altre istruzioni? :eye

Immagino che l'errore di runtime che dici sia dato dalla variabile che non esiste (in quanto non compilata). :sisi

Purtroppo finché non ritrovo quell'estensione per usare le macro vba in openoffice non posso provare realmente, ma solo "tirare"... :ehmm

ARAGORN II
30-09-10, 20: 19
In basic non ci va il punto e virgola come negli altri linguaggi... Non lo hai notato nelle altre istruzioni?

Sisi l'avevo notato, l'ho inserito solo perchè avevo visto che era scritto nel codice che mi avevi postato. :hap In ogni caso il problema sembra risolto, ma ancora non va il codice per inserire la riga.


Only registered members can view code.

Mi da un errore di sintassi su "selEnd += 1" da quello che mi sembra di capire effettuando il debug, dice che dopo il "+" si aspetterebbe un'espressione. Inoltre non mi è chiara una cosa. Con questo codice:


Only registered members can view code.

abbiamo definito 2 variabili selEnd è fissa e toSel invece variabile in funzione di selEnd, giusto? Non capisco però perchè selEnd valga 7?

Non dovrebbe essere la variabile "di fine selezione" selEnd ad essere appunto variabile incrementandosi di una unità ogni qualvolta che inserisco una riga?

:bai

Andy86
30-09-10, 20: 38
dice che dopo il "+" si aspetterebbe un'espressione.:m: Prova con
Only registered members can view code.


Non dovrebbe essere la variabile "di fine selezione" selEnd ad essere appunto variabile incrementandosi di una unità ogni qualvolta che inserisco una riga?Esatto. Prima ho messo '7' per "inizializzarla", altrimenti se viene chiamata vuota da errore, ma puoi mettere quello che vuoi.
toSel aggiunge a metà stringa già pronta il valore di selEnd per dire: seleziona da "4" a "selEnd", "4:selEnd" è l'intervallo da selezionare. (su quest'ultima frase non sono sicuro al 100% che funzioni :ehmm).

ARAGORN II
30-09-10, 21: 42
Grazie ancora Andy! :hap Però non mi è chiaro il "7" che hai messo tu per inizializzarla, a cosa si riferisce? Alla riga?

Inoltre c'è qualcosa che ancora non va sull'inserimento della riga ora mi da errore di runtime.


Only registered members can view code.

e mi seleziona in giallo "Rows(selEnd).Select", c'è qualcosa che non gli piace li credo... comunque il "selEnd = selEnd +1" va ora! :hap Scusa per le domande, ma ho anche provato a cercare, ma trovo poco niente (di comprensibile per me).

:bai

Andy86
04-10-10, 14: 37
:bai


a cosa si riferisce? Alla riga?Esatto.


(di comprensibile per me).Prova a vedere se questo (http://remigueudelot.free.fr/cours%20VBA%20Excel/Enregistreur%20macro.php) è abbastanza semplice; forse non c'è proprio tutto, ma per cominciare va bene.

--------------------------------------------------------------------------------------------------

Comunque ho finalmente trovato il modo di scrivere le macro vba in openoffice, ed ho potuto testare quel codice.
Questa è la versione funzionante:


Only registered members can view code.Ogni macro, indicata da sub, va ovviamente messa al tasto corrispondente.

:bai

ARAGORN II
04-10-10, 21: 02
Grazie ancora Andy, perfetto ora l'inserimento della riga e il mostra/nascondi funziona a dovere! :hap

Nel frattempo mi sono un po' spassato a creare un metodo di inserimento attraverso un form, solo credo sia meglio che faccia qualche ulteriore prova da solo altrimenti tempesto la discussione di domande! ;)

:bai