Condividi:        

Bottoni flottanti

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Bottoni flottanti

Postdi Ricky0185 » 08/11/20 10:04

Buongiorno, come posso nel file allegato avere i 3 bottoni (che attivano altrettante macro) non dipendenti dall'altezza riga e soprattutto che non scompaiano eliminando le rispettive righe. Probabilmente invece che combutton usare shapes, ma non ci riesco.
Se poi esiste altro metodo per averli sempre a disposizione anche quando scendo alla riga 2000....benvenga.
Ringrazio per l'attenzione
R
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Sponsor
 

Re: Bottoni flottanti

Postdi Zer0Kelvin » 08/11/20 11:30

Ciao.
Il mio consiglio è di mettere i tre pulsanti (ma perchè continuano a chiamarli bottoni? :-? ) in linea nella prima riga del foglio e bloccare quella riga.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: Bottoni flottanti

Postdi Ricky0185 » 08/11/20 14:05

Prova a bloccare la riga sotto i pulsanti e vedrai che si spostano sempre nella parte del foglio "sbloccata".
Penso che se invece dei pulsanti inserissi 3 shapes....
Dimenticavo XP + Office2003
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Re: Bottoni flottanti

Postdi Ricky0185 » 08/11/20 15:01

Tipo questo che si attiva però quando clicchi nella parte del foglio che ti interessa e resta visibile anche quando elimini la riga su cui si trova
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Re: Bottoni flottanti

Postdi Anthony47 » 08/11/20 16:44

Per "bloccare" i pulsanti dovresti impostare, in FormatoForme, “Non spostare ne’ ridimensionare con le celle”

Per tenerle sempre visibili, anche per me la cosa piu’ semplice e’ che le posizioni in alto sulla prima riga e poi usi “Blocca riquadri” per bloccare le righe superiori della finestra.

Oppure potresti usare una macro di SelectionChange che riposiziona le forme in testa rispetto alla ActiveWindow.VisibleRange, come fatto nel secondo file pubblicato. Il mio suggerimento:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cFW As Single, cFH As Single, cfOff As Single
Dim fGap As Single, I As Long
'
fGap = 2        '<<< Spaziatura tra i buttons
For I = 1 To 3
    With Me.Shapes(I)
        cFW = .Width
        cFH = .Height
        .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


Ma se vai sulla macro, allora potresti anche ignorare il set di FormatoForme e impostare anche le dimesioni nella macro; tipo:
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cFW As Single, cFH As Single, cfOff As Single
Dim fGap As Single, I As Long
'
cFW = 55        '<<< Larghezza
cFH = 18        '<<< Altezza
fGap = 2        '<<< Spaziatura tra i button
For I = 1 To 3
    With Me.Shapes(I)
'        cFW = .Width
'        cFH = .Height
        .LockAspectRatio = msoFalse
        .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


Sono codici piu' complessi di quello usato sul secondo file che hai pubblicato perche' il mio codice considera le vere dimensioni della finestra, cioe' tenendo conto sia della risoluzione dello schermo che eventualmente del ridimensionamento della finestra.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Bottoni flottanti

Postdi Ricky0185 » 08/11/20 17:52

Anche se li sposto nella prima riga e poi la blocco i pulsanti saltano nella parte del foglio "sbloccata" appena scelgo una qualsiasi cella.
Ho provato le tue macro ed ambedue funzionano, maaa.... vorrei avere i pulsanti come nel mio secondo file Move1 (ovvio che ne debbo creare ancora 2, no problem), cioè che se nascondo o elimino la/le righe ove sono posizionati, non scompaiono come invece succede nel primo file Move ed anche con le tue ottime macro. Il pulsante che vedi è un CommandButton da Strumenti di Controllo in modalità progettazione (Move1), ma compare solo quando clicco nell'area d'interesse sia essa riga 10 o 1000, mentre vorrei che "viaggiasse" con le scrllbars, come in Move. Cioè riga 10 o 1000 il pulsante appare automaticamente e resta anche se elimino le righe che lo contengono.
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Re: Bottoni flottanti

Postdi Anthony47 » 08/11/20 19:02

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 FloatButtons

C) Infine nella Sub StartTimedRefresh sostituisci la riga Call ScreenRefresh con Call FloatButtons

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Bottoni flottanti

Postdi Ricky0185 » 09/11/20 08:33

Funziona perfettamente, i pulsanti non scompaiono mai e ti seguono come un ombra.
Grazie
R
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Re: Bottoni flottanti

Postdi Ricky0185 » 09/11/20 14:35

Ahi, ahi, ahi. Ho rimesso tutti i dati nel Foglio1 e l'ho ritrasportato nel Workbook di pertinenza. Mbè, se sto nel Foglio1 tutto OK, ma appena cambio foglio appare il messaggio Errore 1004-Metodo OnTime dell'oggetto_Application non riuscito e mi evidenzia in giallo Application.OnTime eTime, "StartTimedRefresh", , False con un nuovo messaggio Impossibile eseguire il codice in modalità interruzione.
Risolto (ma chiedo conferma). Cancello il False nella Sub
StopTimer
Application.OnTime eTime, "StartTimedRefresh" ', , False
End Sub
e scompare l'intoppo.
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38

Re: Bottoni flottanti

Postdi Anthony47 » 11/11/20 15:09

Mi ero perduto questo messaggio…

Quel messaggio di errore compare all’interno della Sub StopTimer:
Codice: Seleziona tutto
Sub StopTimer()
    Application.OnTime eTime, "StartTimedRefresh", , False
End Sub

StopTimer la inneschi quando disattivi Foglio1 (quello che contiene i Pulsanti) e dovrebbe servire per fermare la rischedulazione ogni secondo della Sub StartTimedRefresh

Il problema nasce perche’ non hai dichiarato IN TESTA AL MODULO che contiene sia la Sub StopTimer che la Sub StartTimedRefresh la variabile eTime.
Insomma la Sub StopTimer cerca di fermare una schedulazione che non esiste, da qui il messaggio di RunTime Error #1004 e quel che ne consegue.

Come detto tra le righe, devi inserire la dichiarazione di eTime in testa al modulo standard che ospita le due macro:
Codice: Seleziona tutto
Dim eTime As Date   '<<< RIGOROSAMENTE IN TESTA AL MODULO

Dichiarata in testa al modulo la variabile eTime sara’ visibile sia alla Sub StartTimedRefresh (che la compila) che alla Sub StopTimer (che la usa)

Pensandoci bene, potrebbe essere utile modificare anche la Sub StopTimer come segue:
Codice: Seleziona tutto
Sub StopTimer()
If eTime >= Now Then
    Application.OnTime eTime, "StartTimedRefresh", , False
End If
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Bottoni flottanti

Postdi Ricky0185 » 12/11/20 10:12

Adesso funziona bene. Eliminando il False nella Sub StopTimer funzionava, ma c'era un "sussulto" nel foglio che mi faceva sembrare ci fosse qualcosa all'interno che voleva uscire. Come nei film di fantascienza, quel vermone da sotto terra...ricordi?
Sempre grazie, ora è tutto a posto.
Ciao R
Ricky0185
Utente Senior
 
Post: 305
Iscritto il: 10/12/19 20:38


Torna a Applicazioni Office Windows


Topic correlati a "Bottoni flottanti":

Bottoni IE 7
Autore: luigi99
Forum: Sistemi Operativi Windows
Risposte: 2

Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti