Pagina 1 di 2
[Risolto] Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 16:05
da LUGIUDANI
Ciao a tutti. Qualcuno mi sa indicare qualche progetto che lavora con finestre di dialogo e calc?
Ho fatto una finestra di dialogo per inserire dei dati in un foglio calc e all'interno della finestra ho inserito una barra di scorrimento per poter visualizzare direttamente nei campi i dati inseriti nel foglio senza dover chiudere la finestra di dialogo. Non riesco a far funzionare la barra di scorrimento... qualcuno mi puo' aiutare?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 16:13
da patel
per l'ennesima volta tu, che sei molto avanzata rispetto a noi sulle finestre di dialogo, proponi domande difficili senza allegare niente, perché ? ti piace perdere tempo ?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 17:13
da LUGIUDANI
Scusa patel, lo sto facendo ora. Intanto che lo preparavo aspettavo di sapere qualche indirizzo dove trovare un progetto con Calc e finestre di dialogo dove andare a spulciare le macro
Appena pronto lo allego.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 17:19
da patel
non è facile trovare progetti su calc ai livelli sui quali sei tu, però prova questo
http://www.softin.altervista.org/ufficio2.html
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 18:11
da LUGIUDANI
Ok, allego il file... spero sia comprensibile!
All'apertura del file, entrate nel foglio "Giornale" e dopo la tabella riepilogativa dei movimenti, troverete un pulsante "INSERISCI NUOVO MOVIMENTO". Si aprirà la finestra di dialogo dove si andrà ad inserire il movimento del giorno. Nell'originale le combo si popolano tramite i dati presi da un database che al momento non ho allegato perchè non indispensabile. Nella finestra di dialogo trovate una casella di riepilogo sulla destra, una barra di scorrimento e due pulsanti ("SUCC" e "PREC"); sto cercando la soluzione più comoda per scorrere i dati dal foglio, alla finestra di dialogo e non so ancora quale dei tre elementi di controllo utilizzare.
Opzione 1 Casella di riepilogo: pensavo di visualizzare tutti i movimenti dalla data e alla selezione di una data la macro deve compilarmi i campi prendendo i dati del foglio relativi alla data scelta;
Opzione2 Pulsanti SUCC e PREC: inserire una macro che mi scorra i dati del foglio nei campi della finestra di dialogo tramite la digitazione dei pulsanti, partendo dalla riga 10 (dove appunto iniziano i movimenti);
Opzione3 Barra di scorrimento: al posto dei pulsanti, scorrere i dati con una barra di scorrimento.
Ho preso come riferimento alcune macro trovate nell'estensione "DataForm" ( vedi url
http://www.lffl.org/2010/08/openoffice- ... zione.html
solo che faccio fatica ad adattarlo al mio lavoro.
Spero di avervi spiegato al meglio quanto sto cercando di fare e che il mio file sia comprensibile.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 19:37
da patel
Controlla l'allegato, da errore, non ho capito perché
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 23 gennaio 2014, 21:41
da Gaetanopr
LUGIUDANI ha scritto:
Opzione2 Pulsanti SUCC e PREC: inserire una macro che mi scorra i dati del foglio nei campi della finestra di dialogo tramite la digitazione dei pulsanti, partendo dalla riga 10 (dove appunto iniziano i movimenti);
Non ho capito in quali campi della finestra di dialogo devi far scorrere i record!!I dati iniziano dalla colonna A e terminano alla colonna R ma i campi invece quali sono?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: venerdì 24 gennaio 2014, 16:01
da LUGIUDANI
Ciao patel, che errore ti da? Perchè a me funziona.
Ciao Gaetanopr, i dati iniziano dalla Colonna C (IDMOV) alla R, perchè l'anno e il mese non mi interessa visualizzare nella finestra di dialogo.
I nomi dei campi (nella finestra di dialogo) li ho messi in ordine di colonna, quindi il campo IDMOV è denominato txtCampo2, il campo Movimento è denominato txtCampo3 e così via. Ti allego l'immagine del dialogo con indicato i nomi dei campi.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: venerdì 24 gennaio 2014, 20:59
da Gaetanopr
Ciao, io per scorrere i record userei una finestra di dialogo diversa da quella che usi per l'inserimento, magari una finestra a più pagine, anche se i controlli li hai chiamati tutti txtCampo questo non facilita le cose in quanto sono tutti di diverso tipo(campodata, currency, textbox, combobox, checkbox) quindi con proprietà diverse, non puoi usare un ciclo for next per popolarli(si potrebbe verificare il tipo di controllo e comportarsi di conseguenza)
Ho usato lo scrollbar, come da titolo, nella macro ho inserito solo pochi controlli dal n.2 al n.7(ne rimangono altri 10) da popolare
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 10:27
da LUGIUDANI
Grazie Gaetanopr funziona perfettamente! Per quanto guarda la barra di scorrimento direi che il problema è risolto. Se volessi adattare la tua macro "scrollbar" con i pulsanti SUCC e PREC devo solamente modificare il nome del controllo e impostare i valori a seconda del pulsante che vado a digitare, giusto?
e poi mi rimane la selezione all'interno della casella riepilogo per visualizzare il dato che mi interessa. Nel mio esempio ho impostato la data come valore di riferimento, ma essendoci troppi valori per una stessa data, forse è meglio optare per il numero identificativo (ID); così se mi interessa modificare un determinato numero identificativo, invece di scorrere tutti i record con la barra di scorrimento, potrei selezionarlo nella casella di riepilogo e accelerare la ricerca.
Oppure impostare un inputbox dove inserire il numero ID che mi interessa ed eliminare così la casella di riepilogo.
Credo proprio che opterò per l'inputbox abbinato ad un pulsante! Che cosa suggerisci tu Gaetanopr?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 14:11
da Gaetanopr
LUGIUDANI ha scritto:Grazie Gaetanopr funziona perfettamente! Per quanto guarda la barra di scorrimento direi che il problema è risolto. Se volessi adattare la tua macro "scrollbar" con i pulsanti SUCC e PREC devo solamente modificare il nome del controllo e impostare i valori a seconda del pulsante che vado a digitare, giusto?
Ti allego la versione con pulsanti, ho dichiarato la variabile "Riga" globale che viene inizializzata a 9 all'apertura del dialogo e aumentata o diminuita a seconda del pulsante scelto, infine richiamiamo la macro "Pulsanti" che serve a visualizzare i record.
Per l'altra domanda io userei la listbox
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 15:23
da LUGIUDANI
Ottimo, ti ringrazio Gaetanopr. Accetto il suggerimento per la listbox, potresti vedere allora la macro che segue, perchè non mi funziona:
Codice: Seleziona tutto
sub loadMovimentodaID()
oDoc = ThisComponent
oSheets = oDoc.Sheets.getByname("Giornale")
iMov = LastCellUsed(oSheets, 0,10)
iMovCor = MioMovimenti.getControl( "ListBox1" ).selectedItemPos + 1
if iMov = oSheets.getCellByPosition(2,iMovCor).text then
MioMovimenti.getControl("txtCampo2").text = oSheets.getCellByPosition(2,iMov).String
MioMovimenti.getControl("txtCampo3").Text = oSheets.getCellByPosition(3,iMov).String
MioMovimenti.getControl("txtCampo4" ).state = oSheets.getCellByPosition(4,iMov).value
MioMovimenti.getControl("txtCampo5").state = oSheets.getCellByPosition(5,iMov).value
MioMovimenti.getControl("txtCampo6").Text = CDate(oSheets.getCellByPosition(6,iMov).String)
MioMovimenti.getControl("txtCampo7").value = oSheets.getCellByPosition(7,iMov).value
MioMovimenti.getControl("txtCampo8").Text = oSheets.getCellByPosition(8,iMov).String
MioMovimenti.getControl("txtCampo9").Text = oSheets.getCellByPosition(9,iMov).value
MioMovimenti.getControl("txtCampo10").Text = oSheets.getCellByPosition(10,iMov).value
MioMovimenti.getControl("txtCampo11").Text = oSheets.getCellByPosition(11,iMov).String
MioMovimenti.getControl("txtCampo12").Text = oSheets.getCellByPosition(12,iMov).String
MioMovimenti.getControl("txtCampo13").Text = oSheets.getCellByPosition(13,iMov).String
MioMovimenti.getControl("txtCampo14").Text = oSheets.getCellByPosition(14,iMov).String
MioMovimenti.getControl("txtCampo15").text = oSheets.getCellByPosition(15,iMov).String
MioMovimenti.getControl("txtCampo16").text = oSheets.getCellByPosition(16,iMov).String
MioMovimenti.getControl("txtCampo17").text = oSheets.getCellByPosition(17,iMov).String
End if
End Sub
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 15:40
da Gaetanopr
Ci sono alcuni errori prova così
Codice: Seleziona tutto
sub loadMovimentodaID()
oDoc = ThisComponent
oSheets = oDoc.Sheets.getByname("Giornale")
iMov = LastCellUsed(oSheets, 0,10)
iMovCor = MioMovimenti.getControl( "ListBox1" ).selectedItemPos + 1
MioMovimenti.getControl("txtCampo2").text = oSheets.getCellByPosition(2,iMovCor + 9).String
MioMovimenti.getControl("txtCampo3").Text = oSheets.getCellByPosition(3,iMovCor + 9).String
MioMovimenti.getControl("txtCampo4" ).state = oSheets.getCellByPosition(4,iMovCor + 9).value
MioMovimenti.getControl("txtCampo5").state = oSheets.getCellByPosition(5,iMovCor + 9).value
MioMovimenti.getControl("txtCampo6").Text = CDate(oSheets.getCellByPosition(6,iMovCor + 9).String)
MioMovimenti.getControl("txtCampo7").value = oSheets.getCellByPosition(7,iMovCor + 9).value
MioMovimenti.getControl("txtCampo8").Text = oSheets.getCellByPosition(8,iMovCor + 9).String
MioMovimenti.getControl("txtCampo9").Text = oSheets.getCellByPosition(9,iMovCor + 9).value
MioMovimenti.getControl("txtCampo10").Text = oSheets.getCellByPosition(10,iMovCor + 9).value
MioMovimenti.getControl("txtCampo11").Text = oSheets.getCellByPosition(11,iMovCor + 9).String
MioMovimenti.getControl("txtCampo12").Text = oSheets.getCellByPosition(12,iMovCor + 9).String
MioMovimenti.getControl("txtCampo13").Text = oSheets.getCellByPosition(13,iMovCor + 9).String
MioMovimenti.getControl("txtCampo14").Text = oSheets.getCellByPosition(14,iMovCor + 9).String
MioMovimenti.getControl("txtCampo15").text = oSheets.getCellByPosition(15,iMovCor + 9).String
MioMovimenti.getControl("txtCampo16").text = oSheets.getCellByPosition(16,iMovCor + 9).String
MioMovimenti.getControl("txtCampo17").text = oSheets.getCellByPosition(17,iMovCor + 9).String
End Sub
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 16:43
da LUGIUDANI
purtroppo non funziona! Premetto che il numero ID non è ordinato per ID ma per data e all'apertura della finestra di dialogo io ho impostato che nella casella di riepilogo mi deve mostrare gli ID dei movimenti dell'anno in corso. Quindi se copio la tua macro, alla selezione del numero identificativo mi va a recuperare la riga 2 anzichè la riga dove è scritto l'ID scelto, nel mio caso i movimenti dell'anno 2014 partono dalla riga 6651.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 18:08
da LUGIUDANI
Ho trovato la soluzione:
Codice: Seleziona tutto
sub loadMovimentodaID()
dim iMovCor, iCor as integer
oDoc = ThisComponent
oSheets = oDoc.Sheets.getByname("Giornale")
iMov = LastCellUsed(oSheets, 0,10)
iCor = MioMovimenti.getControl( "ListBox1" ).selectedItem
For iMovCor = 10 to LastCellUsed(oSheet,0,iMov)
if oSheet.getCellByPosition(2,iMovCor).value = iCor then
MioMovimenti.getControl("txtCampo2").text = oSheets.getCellByPosition(2,iMovCor).String
MioMovimenti.getControl("txtCampo3").Text = oSheets.getCellByPosition(3,iMovCor).String
MioMovimenti.getControl("txtCampo4" ).state = oSheets.getCellByPosition(4,iMovCor).value
MioMovimenti.getControl("txtCampo5").state = oSheets.getCellByPosition(5,iMovCor).value
MioMovimenti.getControl("txtCampo6").Text = CDate(oSheets.getCellByPosition(6,iMovCor).String)
MioMovimenti.getControl("txtCampo7").value = oSheets.getCellByPosition(7,iMovCor).value
MioMovimenti.getControl("txtCampo8").Text = oSheets.getCellByPosition(8,iMovCor).String
MioMovimenti.getControl("txtCampo9").Text = oSheets.getCellByPosition(9,iMovCor).value
MioMovimenti.getControl("txtCampo10").Text = oSheets.getCellByPosition(10,iMovCor).value
MioMovimenti.getControl("txtCampo11").Text = oSheets.getCellByPosition(11,iMovCor).String
MioMovimenti.getControl("txtCampo12").Text = oSheets.getCellByPosition(12,iMovCor).String
MioMovimenti.getControl("txtCampo13").Text = oSheets.getCellByPosition(13,iMovCor).String
MioMovimenti.getControl("txtCampo14").Text = oSheets.getCellByPosition(14,iMovCor).String
MioMovimenti.getControl("txtCampo15").text = oSheets.getCellByPosition(15,iMovCor).String
MioMovimenti.getControl("txtCampo16").text = oSheets.getCellByPosition(16,iMovCor).String
MioMovimenti.getControl("txtCampo17").text = oSheets.getCellByPosition(17,iMovCor).String
end if
next iMovCor
End Sub
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 19:09
da LUGIUDANI
Ora vorrei che la barra di scorrimento andasse a scorrere i valori inseriti nella casella di riepilogo e non tutti quelli inseriti nel foglio.
Ad esempio se la casella di riepilogo mi mostra i numeri ID da 10 fino a 20 muovendo il cursore verso destra mi deve mostrare gl'id dall'11 al 20; mentre nel caso opposto il valore minimo deve restare 10.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 19:24
da Gaetanopr
LUGIUDANI ha scritto:purtroppo non funziona! Premetto che il numero ID non è ordinato per ID ma per data e all'apertura della finestra di dialogo io ho impostato che nella casella di riepilogo mi deve mostrare gli ID dei movimenti dell'anno in corso. Quindi se copio la tua macro, alla selezione del numero identificativo mi va a recuperare la riga 2 anzichè la riga dove è scritto l'ID scelto, nel mio caso i movimenti dell'anno 2014 partono dalla riga 6651.
Ciao la macro che ho postato è in riferimento all'esempio che hai allegato, se il tuo originale è diverso devi riallegare altrimenti non possiamo aiutarti
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 20:22
da Gaetanopr
LUGIUDANI ha scritto:Ora vorrei che la barra di scorrimento andasse a scorrere i valori inseriti nella casella di riepilogo e non tutti quelli inseriti nel foglio.
Ad esempio se la casella di riepilogo mi mostra i numeri ID da 10 fino a 20 muovendo il cursore verso destra mi deve mostrare gl'id dall'11 al 20; mentre nel caso opposto il valore minimo deve restare 10.
Questo è sempre in base all'esempio che abbiamo a disposizione, con lo scrollbar viene selezionato il record dalla listBox
Naturalmente lo devi adattare all'originale e fare scorrere solo i record visualizzati(attualmente selezionati e presenti sul foglio sono gli stessi)
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 20:26
da LUGIUDANI
Ok, ecco allegato il nuovo file. Una volta aperta la finestra di dialogo, vai a digitare il pulsante anno e nell'inputbox digita l'anno 2013. Nella casella di riepilogo ti mostrerà il numero identificativo delle due righe in riferimento all'anno digitato. Ora se vai a scorrere i dati con la barra, ripartirà sempre dalla numero 1 e non dalla numero 4.
Quello che voglio è appunto questo, che mi vada a scorrere solamente i numeri identificativi inseriti nella casella di riepilogo.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: martedì 28 gennaio 2014, 21:38
da Gaetanopr
Ora dovrebbe funzionare come dici tu, ho modificato pure la macro per la ricerca dell'anno e aggiunto un controllo in caso di ricerca di un anno non presente in archivio in modo tale da uscire dalla macro e non andare in errore
Ciao
Re: Macro per barra di scorrimento (scrollbar)
Inviato: mercoledì 29 gennaio 2014, 18:59
da LUGIUDANI
Grazie Gaetanopr, domani proverò a farlo funzionare sul mio progetto e ti farò sapere se tutto va come volevo!
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 12:52
da LUGIUDANI
Ciao Gaetanopr, non riesco a far funzionare la macro. Ti mando in allegato la finestra di errore, puoi dirmi cosa c'è di sbagliato?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 13:53
da Gaetanopr
Ciao, è come se RigaS avesse un valore superiore all'array RigaMov, hai modificato come da mio esempio anche la macro RicercaAnnoMov?
Ho riprovato il file che ho allegato e funziona regolarmente
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 14:18
da LUGIUDANI
Si l'ho fatto... Che variabile hai impostato per a e RigaS?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 14:36
da LUGIUDANI
Adesso mi da questo errore in questa macro:
Codice: Seleziona tutto
sub loadMovimentodaID()
dim iMovCor, iCor as integer
oDoc = ThisComponent
oSheets = oDoc.Sheets.getByname("Giornale")
iMov = LastCellUsed(oSheets, 0,10)
iCor = MioMovimenti.getControl( "ListBox1" ).selectedItem
For iMovCor = 0 to LastCellUsed(oSheet,0,iMov)
if oSheet.getCellByPosition(2,iMovCor).value = iCor then
MioMovimenti.getControl("txtCampo2").text = oSheets.getCellByPosition(2,iMovCor).String
MioMovimenti.getControl("txtCampo3").Text = oSheets.getCellByPosition(3,iMovCor).String
MioMovimenti.getControl("txtCampo4" ).state = oSheets.getCellByPosition(4,iMovCor).value
MioMovimenti.getControl("txtCampo5").state = oSheets.getCellByPosition(5,iMovCor).value
MioMovimenti.getControl("txtCampo6").Text = CDate(oSheets.getCellByPosition(6,iMovCor).String)
MioMovimenti.getControl("txtCampo7").value = oSheets.getCellByPosition(7,iMovCor).value
MioMovimenti.getControl("txtCampo8").Text = oSheets.getCellByPosition(8,iMovCor).String
MioMovimenti.getControl("txtCampo9").Text = oSheets.getCellByPosition(9,iMovCor).value
MioMovimenti.getControl("txtCampo10").Text = oSheets.getCellByPosition(10,iMovCor).value
MioMovimenti.getControl("txtCampo11").Text = oSheets.getCellByPosition(11,iMovCor).String
MioMovimenti.getControl("txtCampo12").Text = oSheets.getCellByPosition(12,iMovCor).String
MioMovimenti.getControl("txtCampo13").Text = oSheets.getCellByPosition(13,iMovCor).String
MioMovimenti.getControl("txtCampo14").Text = oSheets.getCellByPosition(14,iMovCor).String
MioMovimenti.getControl("txtCampo15").text = oSheets.getCellByPosition(15,iMovCor).String
MioMovimenti.getControl("txtCampo16").text = oSheets.getCellByPosition(16,iMovCor).String
MioMovimenti.getControl("txtCampo17").text = oSheets.getCellByPosition(17,iMovCor).String
end if
next iMovCor
End Sub
Ho modificato dalla tua togliendo i + 9 dopo oSheets.getCellByposition(...,iMovCor).String e ho cambiato la riga iCor = anzichè SelectedItemPos, ho messo selectedItem, altrimenti mi ripartiva dalla numero 1 anzichè dal numero selezionato nella casella di riepilogo.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 14:54
da Gaetanopr
LUGIUDANI ha scritto:Si l'ho fatto... Che variabile hai impostato per a e RigaS?
Long
così non posso capire cosa non funziona per due motivi
1: il file che ho allegato funziona
2:tu fai delle modifiche sul tuo file che non ho a disposizione, è inutile allegare file non corrispondenti.
Lo stesso errore e sulla stessa riga a me lo da se tolgo questa riga
dalla macro RicercaAnnoMov
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 15:44
da LUGIUDANI
Ok ti allego allora il file dove ho abbinato la macro come c'è l'ho nel mio progetto. Ho abbinato alla barra di scorrimento la procedura ScrollBar1 anzichè ScrollBar2.
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 17:32
da LUGIUDANI
l'errore si manifesta soltanto quando deve andare a compilare un campo booleano, se lo elimino l'errore non viene più visualizzato. Oltretutto la macro funziona solamente se vado prima a digitare il pulsante "Anno" per inserire l'anno di riferimento e solo in quel momento la barra di scorrimento mi scorre le voci nella maniera giusta. Ora vedo di capire qual'è il problema con il campo "txtCampo5" che è lo stesso del "txtCampo4" , Buh!
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 17:54
da LUGIUDANI
Ok, funziona. Ora vorrei modificare la macro per i pulsanti SUCC e PREC allo stesso modo della barra di scorrimento, puoi aiutarmi anche in questo?
Re: Macro per barra di scorrimento (scrollbar)
Inviato: giovedì 30 gennaio 2014, 18:51
da Gaetanopr
LUGIUDANI ha scritto:Oltretutto la macro funziona solamente se vado prima a digitare il pulsante "Anno" per inserire l'anno di riferimento e solo in quel momento la barra di scorrimento mi scorre le voci nella maniera giusta.
Questo è stato fatto appositamente, prima abbiamo creato la macro che li scorreva tutti poi hai detto che ti serviva scorrere solo quelli filtrati dalla listBox, se non è così devi spiegarti meglio, secondo me la migliore soluzione sarebbe quella di creare un'unica macro che vada va scorrere i record della listbox, quindi basta usare l'ultima macro e far caricare sempre la listbox, nel caso non venga scelto un anno verranno tutti visualizzati
Intanto questa è la versione per i pulsanti