Celle selezionate in macro

Salve a tutti. Mi presento, sono Alessandro, neofita di vba.

Ho creato questa macro ma vorrei farla funzionare per tutte le celle selezionate anziché per la cella singola, ma non riesco a capire come scrivere la sintasi esatta. Inoltre vorrei associare la macro ad un pulsante sulla barra degli strumenti diretta senza che mi apra la finestra delle macro. Grazie

Sub Incrementa()
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Doc.CurrentSelection.value = Doc.CurrentSelection.value +1
End sub

.
Prova il file …
.


.
Test - Macro - IncrementaDelMedesimoValoreTuttoRangeSelezionato.ods (15.4 KB)
.

Sub Incrementa()
ThisComponent.CurrentSelection.value = ThisComponent.CurrentSelection.value +1
End sub

Buongiorno Lucky63. Mi da questo errore,“Errore di runtime BASIC.
Proprietà o metodo non trovato: RangeAddress.”

Buongiorno Schiavinatto. Mi da questo errore "Errore dello Scripting Framework durante l’esecuzione dello script Basic vnd.sun.star.script:Standard.Module1.IncrementaDelMedesimoValoreTuttoRangeSelezionato?language=Basic&location=document.

Messaggio: The following Basic script could not be found:
library: ‘Standard’
module: ‘Module1’
method: ‘IncrementaDelMedesimoValoreTuttoRangeSelezionato’
location: ‘document’

.
La macro era stata ideata per “Incrementare” una singola cella oppure tutte le celle presenti in un rettangolo di selezione.
La segnalazione di errore “RangeAddreses” che hai ricevuto è perché hai forse fatto una selezione celle in modo diverso.
La macro è stata modificata in modo che intercetti un errore e visualizzi il seguente MsgBox:

Test - Macro - IncrementaDelMedesimoValoreTuttoRangeSelezionato - 01
.
.
Test - Macro - IncrementaDelMedesimoValoreTuttoRangeSelezionato.ods (16.0 KB)
.
L’altra segnalazione di errore (a @schiavinato) è perché:
Messaggio: The following Basic script could not be found:
Messaggio: Impossibile trovare il seguente script Basic

Hai usato il mio file … per provare il codice di @schiavinato … rinominando il nome della mia sub o cancellandola … il pulsante “Incrementa la Selezione” non trova più la sub a cui è associato.

Grazie Luchy63. Mi occorre che possa funzionare su selezioni multiple non continue, sulla stessa colonna andrebbe anche bene, ma non adiacenti.
Mentre la soluzione di @schiavinato in un nuovo file mi da questo errore"Errore di runtime BASIC.
Proprietà o metodo non trovato: value."

Per la selezione della cella individuale…

Test - Macro - IncrementaDelMedesimoValoreTuttoRangeSelezionato_GS.ods (15,1,KB)

Grazie @schiavinato. Come deto mi occorre con selezioni multiple non adiacenti.

Prova il file allegato
Incrementa_multi_selezione.ods (10.5 KB)

1 Like

Un buon anno a tutti. Grande gaetanopr. Grazie mille, già così va benissimo, ma credi sarebbe possibile averlo con un pulsante sulla barra degli strumenti anziché sul foglio? Sarebbe perfetto. E approffitto ancora, per incrementare di un valore diverso è sufficiente sostituire al numero 1 un altro numero?

Si è sufficiente sostituire il numero puoi vederlo facendo dei test.
Per l’altra domanda… si è possibile, ti basta andare su Strumenti > Personalizza > Barra degli strumenti e da lì poi è molto intuitivo, se non riesci puoi fare una ricerca sul forum o sul web altrimenti aprire un nuovo topic specifico con titolo appropriato.
Saluti

HO fatto copia e incolla con la tua macro e ho cambiato 1 con 3. Ma il nuovo pulsante non funziona con le celle multiple non adiacenti. Dove sbaglio?
Sub Main
Dim Selezioni As Object
Dim I as Long
Selezioni = ThisComponent.currentSelection
If Selezioni.SupportsService(“com.sun.star.sheet.SheetCellRanges”) Then
For I = 0 To Selezioni.Count-3
Selezioni(I).setDataArray (Compila(Selezioni(I)))
Next
ElseIf Selezioni.SupportsService(“com.sun.star.table.Cell”) Then
Selezioni.Value = Selezioni.Value + 3
ElseIf Selezioni.SupportsService(“com.sun.star.table.CellRange”) Then
Selezioni.setDataArray(Compila(Selezioni))
End If
End Sub

Function Compila(Zona as Object)
Dim Valori

Valori = Zona.getDataArray
for y1 = LBound(Valori) to UBound(Valori)
righe = Valori(y1)
for x1 = LBound(righe) to UBound(righe)
righe(x1) = Cdbl(righe(x1)) + 3
next
Valori(y1) = righe
next
Compila = Valori
End Function

Questo è un ciclo, che attraversa la\le selezioni correnti non ha a che vedere con il valore 1 o 3 da incrementare, deve rimanere 1.

Perfetto. Grazie mille