Tempo fa Paolo aveva postato una soluzione per acchiappare un range
selezionato con il mouse...
Emanuele aveva "interpretato" e ne era venuto fuori un bell'aggeggio che
io ho riutilizzato in diverse occasioni.
(Quando parla Paolo ho bisogno dell'interprete...:-) )
L'unico difetto/limite era che la rotelle del mouse era inibita... poi è
sbucata una faccenda fastidiosa che cercherò di descrivere.
Apri nuovo doc calc (chiamiamolo doc1)
Infilarci dentro (nell'IDE intendo) il codice che posto in coda alla mail
Crea un pulsante su una sheet di doc1 e collegalo alla macro
copia_solo_colore_Sfondo
Apri un nuovo doc calc (chiamiamolo doc2)
Cerca & sostituisci e cerca una stringa qualsiasi...
lascia la finestra della ricerca aperta... e
seleziona doc1
colora una cella con un colore a piacere...
seleziona la cella colorata e
aziona il pulsante (macro > copia_solo_colore_sfondo....)
Seleziona un range...
La macro dovrebbe concludere con successo colorando a puntino il range
selezionato...
Ma qui succede l'evento: doc2 passa in primo piano...
(o sarebbe meglio dire che doc1 è passa in secondo piano?)
La linguetta (in basso) attiva è sempre quella di doc1, ma quella che si
vede è doc2...
Questo succede QUASI sempre!
Ed è molto fastidioso...
C'è modo di porci rimedio?
E per la rotella inibita... si può fare qualcosa?
grazie per le risposte
Bart
----------------------------------------------
Questo è il codice... spero di non aver dimenticato nulla...
REM ***** BASIC *****
Global oRangeSelectionListener As Object
Global sA as string
SUB Copia_solo_colore_Sfondo '
Dim oSheetSRC as object
Dim oSheetDest as object
Dim oRangeDest as object
Dim oCellSRC as object
Dim lSheetDest as long
Dim lcolorSRC as long
oSheetSRC = ThisComponent.Sheets.getByName(_
ThisComponent.currentcontroller.activesheet.name)
oCellSRC=ThisComponent.getCurrentSelection()
lcolorSRC = oCellSRC.Cellbackcolor
SelectedRange = getRange() ' richiama il listeners
' che restuisce un address come stringa
lSheetDest= getSheet(SelectedRange)
'numero della sheet (anche un'altra da SRC)
oSheetDest = ThisComponent.Sheets.getByIndex(lSheetDest)
' oggetto sheet
oRangeDest = oSheetDest.getCellRangeByName(SelectedRange)
' oggetto range di destinazione
oRangeDest.Cellbackcolor = lcolorSRC
end sub
function getRange() as string
sA = ""
TestRangeSelection
do
wait 100
loop while sA = ""
getRange = sA
end function
Sub TestRangeSelection()
oDocView = ThisComponent.currentController
If Not IsNull(oRangeSelectionListener) Then
oDocView.removeRangeSelectionListener(_
oRangeSelectionListener)
End If
oRangeSelectionListener = createUnoListener("oDocView_" , _
"com.sun.star.sheet.XRangeSelectionListener")
oDocView.addRangeSelectionListener (_
oRangeSelectionListener)
Dim mArgs(2) As New com.sun.star.beans.PropertyValue
mArgs(0).Name = "InitialValue"
mArgs(0).Value = "A1"
mArgs(1).Name = "Title"
mArgs(1).Value = "Click sulla destinazione........."
mArgs(2).Name = "CloseOnMouseRelease"
mArgs(2).Value = True
oDocView.startRangeSelection(mArgs())
End Sub
function getSheet(ByVal sAddress as string) as string
' dim cellRange as object
dim currentSheet as object
' dim row as object
currentSheet =_
ThisComponent.CurrentSelection.getSpreadSheet()
cellRange = currentSheet.getCellRangeByName(sAddress)
' row = cellRange.getRows()
getSheet = cellRange.RangeAddress.sheet
end function
sub oDocView_done(oEvent)
'questa routine viene chiamata dal documento
'dopo che l'utente ha finito di selezionare il range
sA = oEvent.RangeDescriptor
oEvent.source.removeRangeSelectionListener(_
oRangeSelectionListener)
End Sub
sub oDocView_aborted(oEvent)
'questa routine viene chiamata dal documento
'se l'utente non ha selezionato nessun range
oEvent.source.removeRangeSelectionListener(_
oRangeSelectionListener)
End Sub
sub oDocView_disposing(oEvent)
'questa routine viene chiamata dal documento
'in caso di dipartita del compianto listener
End Sub
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]