Anthony ha scritto:Devi impostare, in FormatoForme, “Non spostare ne’ ridimensionare con le celle”
[…]
Ma se vai sulla macro, allora potresti anche ignorare il set di FormatoForme e impostare sempre le dinesioni nella macro […]
Ho sbagliato a sostenere che poteva non essere necessario impostare FormatoForme su “Non spostare ne’ ridimensionare con le celle”.
Quella impostazione e' sempre necessaria.
E comunque il riposizionamento avviene tramite le selezione cella, non semplicemente scorrendo la pagina con la scrollbar, che non ha associato nessun evento cui agganciarsi.
Vedo pero' che tu hai gia' abbozzato un timer che scatta ogni secondo proprio per riposizionare il pulsanti; non ho verificato come funziona il sistema che hai pensato, io proverei con il seguente approccio:
A) inserisci il codice dell'attuale Worksheet_SelectionChange in una sub a se' stante. Es, in un Modulo standard:
- Codice: Seleziona tutto
Sub FloatButtons()
Dim cFW As Single, cFH As Single, cfOff As Single
Dim fGap As Single, I As Long
'
cFW = 55 '<<< Larghezza
cFH = 18 '<<< Altezza
fGap = 4 '<<< Spaziatura tra i button
For I = 1 To 3
With Sheets("Foglio1").Shapes(I)
' cFW = .Width
' cFH = .Height
.LockAspectRatio = msoFalse
.Visible = msoTrue
.Width = cFW
.Height = cFH
.Top = ActiveWindow.VisibleRange.Cells(1, 1).Top + cfOff + 10
.Left = ActiveWindow.VisibleRange.Cells(2, ActiveWindow.VisibleRange.Columns.Count).Left - cFW
End With
cfOff = cfOff + cFH + fGap
Next I
End Sub
B) Poi nella Sub Worksheet_SelectionChange inserisci solo l'istruzione
Call FloatButtonsC) Infine nella Sub StartTimedRefresh sostituisci la riga
Call ScreenRefresh con
Call FloatButtonsCiao