Pagina 1 di 1

[Risolto] macro basic bottone incremento

Inviato: lunedì 14 febbraio 2011, 0:43
da Marrlowe
Ho creato dei bottoni e ogni volta che ne premo
uno si incrementa il valore di una specifica cella.
La macro in basic è questa per la cella I6 del Foglio1:

Sub incrementaI6
oSheet = ThisComponent.Sheets.getByName("Foglio1")
oCell = oSheet.getCellrangeByName("I6")
oCell.value = oCell.value + 1
end sub

Ora però il problema è che sta macro è poco flessibile perchè se ho
100 bottoni in un foglio devo scrivere 100 macro... e poi se voglio duplcare il foglio non so se le macro funzionerebbero nel foglio2...
Non so proprio niente di Basic...Come si scrive la macro che assegnata a qualsiasi bottone fa incrementare il valore della cella assegnata al bottone? (c'è anche il problema di assegnare il bottone alla cella che non saprei come risolvere...).
Vi allego il foglio su cui sto lavorando: 18 bottoni, 18 macro...

Se riuscite a risolvere sarebbe fantastico, grazie

Re: macro basic bottone incremento

Inviato: lunedì 14 febbraio 2011, 3:45
da FncZ4pp4
Puoi assegnare a 100 pulsanti la stessa macro. Ti consiglio di usare la slider (barra di scorrimento dei formulari).

Re: macro basic bottone incremento

Inviato: lunedì 14 febbraio 2011, 8:24
da Marrlowe
slider??? come posso usare la stessa macro per 100 bottoni se quella macro incrementa il valore della cella I6 nel Foglio1 quando io vorrei incrementare il valore di 100 celle diverse???

Re: macro basic bottone incremento

Inviato: lunedì 14 febbraio 2011, 13:12
da FncZ4pp4
Marrlowe ha scritto:slider??? come posso usare la stessa macro per 100 bottoni se quella macro incrementa il valore della cella I6 nel Foglio1 quando io vorrei incrementare il valore di 100 celle diverse???
Ho capito male, pensavo che la cella è sempre la stessa. La slider è una barra di scorrimento che si può legare ad una cella per aumentare o diminuire il suo valore numerico, la puoi orientale anche in verticale. vedi immagine sotto.

Comunque se proprio vuoi usare i pulsanti e le macro, sono in grado di fare tutto ciò con 1 solo pulsante semplicemente selezionando la cella interessata e aumentargli il valore numerico. Se sei interessato fammi sapere.

Re: macro basic bottone incremento

Inviato: venerdì 18 febbraio 2011, 22:59
da xergio
Il codice che segue è quello che ti interessa (derivato, con piccole modifiche, da questo post di Pitonyak http://www.oooforum.org/forum/viewtopic.phtml?t=106235 )
n.b.: è indifferente dal foglio e dalla posizione del cursore, dipende dalla cella a cui è ancorato il pulsante.

Codice: Seleziona tutto

Sub incrementa(oEvent)
  Dim oControlModel
  Dim oParent
  Dim oCell
 
  'Print oEvent.Source.Model.getName()
  oControlModel = oEvent.Source.Model
 
  oParent = oControlModel.getParent()
  Do While NOT oParent.supportsService("com.sun.star.sheet.SpreadsheetDocument")
    oParent = oParent.getParent()
  Loop
 
  oCell = FindCellWithControl(oParent.getCurrentController().getActiveSheet().getDrawPage(), oControlModel)
  If NOT IsEmpty(oCell) Then
  	oSheet = ThisComponent.Sheets(oCell.getCellAddress.Sheet)
  	oCell = oSheet.getCellrangeByName(oCell.AbsoluteName)
	oCell.value = oCell.value + 1
    'Print "Control is in cell " & oCell.AbsoluteName
  Else
    Pritn "Unable to find cell with control"
  ENd If
End Sub


Function FindCellWithControl(oDrawPage, oControl)
  Dim oShape
  Dim oAnchor
  oShape = FindShapeForControl(oDrawPage, oControl)
  If Not IsEmpty(oShape) Then
    If oShape.getAnchor().supportsService("com.sun.star.sheet.SheetCell") Then
      FindCellWithControl = oShape.getAnchor()
    End If
  End If
End Function

Function FindShapeForControl(oDrawPage, oControl)
  Dim i
  Dim oShape
  For i = 0 To oDrawPage.getCount()
    oShape = oDrawPage.getByIndex(i)
    If oShape.supportsService("com.sun.star.drawing.ControlShape") Then
      If EqualUNOObjects(oControl, oShape.Control) Then
        FindShapeForControl = oShape
        Exit Function
      End If
    End If
  Next
End Function 

Re: macro basic bottone incremento

Inviato: domenica 20 febbraio 2011, 17:17
da Marrlowe
Il codice che avete postato non mi funziona, mentre quello che ho trovato qui http://user.services.openoffice.org/en/ ... 45&t=17425 funziona e mi sembra anche più semplice da usare e customizzare (per esempio per un decremento). Grazie comunque a tutti!

Re: macro basic bottone incremento [RISOLTO]

Inviato: domenica 20 febbraio 2011, 21:51
da xergio
Allego il file con la macro funzionante.
incrementa.ods
(9.68 KiB) Scaricato 1254 volte
C'è comunque una bella differenza tra incrementare la cella attiva (che vuol dire cliccare sulla cella e quindi cliccare sul pulsante) e incrementare la cella su cui è ancorato il pulsante (che vuol dire cliccare sul pulsante e basta), che mi pareva fosse la tua richiesta.

Re: macro basic bottone incremento [RISOLTO]

Inviato: domenica 20 febbraio 2011, 22:22
da FncZ4pp4
La macro postata da Xergio funziona benissimo.

Re: macro basic bottone incremento

Inviato: martedì 20 gennaio 2015, 15:15
da aleghi
FncZ4pp4 ha scritto:
Marrlowe ha scritto:slider??? come posso usare la stessa macro per 100 bottoni se quella macro incrementa il valore della cella I6 nel Foglio1 quando io vorrei incrementare il valore di 100 celle diverse???
Ho capito male, pensavo che la cella è sempre la stessa. La slider è una barra di scorrimento che si può legare ad una cella per aumentare o diminuire il suo valore numerico, la puoi orientale anche in verticale. vedi immagine sotto.

Comunque se proprio vuoi usare i pulsanti e le macro, sono in grado di fare tutto ciò con 1 solo pulsante semplicemente selezionando la cella interessata e aumentargli il valore numerico. Se sei interessato fammi sapere.

A me interesserebbe un lavoro come questo!

Re: [Risolto] macro basic bottone incremento

Inviato: venerdì 29 maggio 2015, 22:33
da xergio
Ciao XLUPOGRIGIOX,
per mettere un valore diverso nella cella dove si clicca il pulsante, basta modificare la macro dove c'è:

Codice: Seleziona tutto

oCell.value = oCell.value + 1
cambiando il valore assegnato a oCell.value

Re: [Risolto] macro basic bottone incremento

Inviato: venerdì 29 maggio 2015, 23:46
da XLUPOGRIGIOX
Ciao xsergio,e grazie per la risposta.
Quindi volendo mettere incrementare con il valore di una cella,potrebbe essere

Codice: Seleziona tutto

oCell.value = cCell.value + (G6)
Non so se la sintassi sia giusta...
Saluti

Re: macro basic bottone incremento

Inviato: sabato 30 maggio 2015, 12:44
da charlie
xergio ha scritto:Ciao XLUPOGRIGIOX, ….
XLUPOGRIGIOX ha scritto:Ciao xsergio,e grazie per la risposta. ….
Non si capisce come vi collegate ai messaggi precedenti ….

Re: [Risolto] macro basic bottone incremento

Inviato: sabato 30 maggio 2015, 18:43
da unlucky83
Rispondo nonostante la giusta bacchettata di charlie

oCell.value = cCell.value + (G6)
Sintassi Sbagliata

Sintassi corretta

Codice: Seleziona tutto

oCell2=ThisComponent.Sheets.getByName("NOMEFOGLIO").getCellRangeByName("Indirizzocella es: A1")
oCell.value = cCell.value + oCell2.value

Re: macro basic bottone incremento

Inviato: lunedì 1 giugno 2015, 23:04
da XLUPOGRIGIOX
Scusa charlie,hai ragione!!!
Avevo chiesti a xsergio con un messaggio,per non continuare una discussione già risolta,come modificare la macro in modo che invece di incrementare di tot valore una cella,si incrementi una cella con il valore di un altra.
Chiedo ancora scusa a charlie e grazie a unlucky83 per gli aiuti utilissimi che mi sta dando :)