Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Posizionamento Userform

Ultimo Aggiornamento: 08/07/2022 10:14
Post: 6.878
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/07/2022 09:34

Ciao a tutti, sto cercando di far quadrare una userform, la sposto a piacere, ma ho difficoltà a recepire l'ultima riga visibile a schermo.

in modo che l'userform nel caso si posizioni sopra l'ultima riga e non vada sotto lo schermo visibile

non so se si sono spiegato bene, il codice usato è questo al momento dove "Rr" è la Riga e "Cc" è la Colonna

With Me
   If Rr > 15 Then
    .Top = sh1.Cells(Rr - 15, Cc).Top + 140
    .Left = sh1.Cells(Rr - 15, Cc).Left - 4
  Else
    .Top = sh1.Cells(Rr, Cc).Top + 140
    .Left = sh1.Cells(Rr, Cc).Left - 4
  End If
End With


credo che Top-Left sia l'angolo superiore sinistro, penso che dovrei trovare l'angolo inferiore Destro della userform per posizionarlo sopra la riga

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.512
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
06/07/2022 10:05

ciao Salvatore,
dai un'occhiata se può esserti utile

ciao
Frank

qui



vb
Private Sub UserForm_Initialize() 

Dim lngWinState As XlWindowState 

With Application 
.ScreenUpdating = False 
lngWinState = .WindowState 
.WindowState = xlMaximized 
Me.Move 0, 0, .Width, .Height 
.WindowState = lngWinState 
.ScreenUpdating = True 
End With 

End Sub
[Modificato da tanimon 06/07/2022 10:05]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 6.878
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/07/2022 10:16

Ciao Frank ora provo, sto aggiustando il file per il calcio, un altro file aveva una posizione ferma dove visualizzare i dati dei calciatori, nell'ultimo file che ho inserito è sto modificando, i calciatori sono in una lista potrei far visualizzare centralmente il form con i dati del calciatore, ma sarebbe bello seguire la posizione del calciatore, un esempio.



Come vedi il form non si posiziona nel modo giusto, vorrei che si posizionasse sotto se ce spazio e sopra se manca spazio in basso

come detto provo il tuo codice.

Ciao By Sal (8-D
[Modificato da by sal 06/07/2022 10:18]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 3.318
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
06/07/2022 10:31

ciao Salvatore
temo tu debba utilizzare le API.

QUI le indicazioni di C_Pearson

saluti




Domenico
Win 10 - Excel 2016
Post: 1.513
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
06/07/2022 10:32

ciao Salvatore,
quanto ti ho suggerito, non va bene per quello che avevi chiesto.

Ho capito male io, la tua richiesta.

Se ho tempo cerco di fare qualcosa anch'io

Buona giornata
Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 6.879
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/07/2022 11:03

Ciao Domenico io le posizioni le ricavo dalla cella che è il mio punto 0zero se do questa posizione alla userform, si posiziona con l'angolo superiore sx con l'angolo supreriore sx della cella.

logicamente incremento dell'altezza della cella, il problema che le misure non corrispondono, nel senso che a quanto ho capito una usa Pixel e l'altra usa i punti dovrei trovare e se mi ricordo bene l'ho letto da qualche parte una conversione tra punti e pixel o viceversa.

comunque ci sto lavorando.

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.514
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
06/07/2022 12:25

ciao Salvatore
ed un saluto a Domenico 😀

trovando la giusta proporzione tra l'altezza della finestra di Excel e dove vuoi posizionare il top della Userform,

puoi fare un tentativo, non costa molto....😂

vb
Private Sub UserForm_Activate()

With Me
           If ActiveCell.Row > 15 Then
                                
            .Top = Int(Application.Height / 6)
            
          Else
           
            .Top = Int(Application.Height / 3)
            
            
          End If
  End With

End Sub



[Modificato da tanimon 06/07/2022 12:29]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 1.515
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
06/07/2022 14:42

ciao Salvatore,

oltre la proposta precedente e con le conseguenze del caso, potresti gradire un'alternativa

ciao
Frank

vb
Private Sub UserForm_Activate()


With Me
           
                Select Case ActiveCell.Row
                    Case 16 To 35
                    
                    .Top = Int(Application.Height / 3)
                    ActiveWindow.ScrollRow = ActiveCell.Row
                
                
                               
                    Case 2 To 15
                    
                        .Top = Int(Application.Height / 3)
                        ActiveWindow.ScrollRow = ActiveCell.Row
                End Select
            
          
  End With

End Sub


EDIT:

Puoi anche non usare il Select Case ed una volta chiusa la UserForm, tornare alla visualizzazione originaria con

vb
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ActiveWindow.ScrollRow = Range("a1").Row
End Sub
[Modificato da tanimon 06/07/2022 15:08]







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 6.880
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
06/07/2022 17:31

Ciao credo di aver risolto, era più semplice del previsto, invece di fare calcoli o altro ho fatto fare riferimento direttamente alla cella con:

With UserForm2
  .Caption = "Dati del Calciatore " & dd
  .Top = Cells(Rr + 2, Cc).Top + 5
  .Left = Cells(Rr + 2, Cc).Left - 5
End With


dove "Rr" è la riga e "Cc" e la colonna, ho dovuto solo aggiustare un poco il tiro con +5 e -5

però ho anche visto che una volta data la posizione la form rimane immobile anche se scorro il foglio, a questo punto ho pensato di usare glli Activex creando un gruppo "Immagine-Label" è come si può vedere ecco il risultato:



qui si vede la differenza, per il form devo chiuderlo per aprire uno nuovo, con il gruppo basta selezionare un nuovo giocatore e resta vincolato alla cella anche se scorro il foglio.

ho messo un flag =1 per vedere le due opzioni.

non ricordo una cosa però, per le "Activex" il MAC non le legge, ma il Form è lo stesso anche quello ha difficoltà a visualizzarlo, non ricordo

Cosa mi consigliate, quale adottare?

Ciao By Sal (8-D

[Modificato da by sal 06/07/2022 17:35]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 3.319
Registrato il: 06/04/2013
Utente Master
2010
OFFLINE
07/07/2022 10:12

ciao Salvatore
personalmente ho dei seri dubbi; a meno che ricordi male, il Top ed il Left fanno riferimento allo schermo, pertanto se tu avessi excel in visualizzazione ridotta, quel codice non mostrerebbe risultati corretti.

Prova a fare:
Private Sub UserForm_Initialize()
UserForm2.StartUpPosition = 0

vedrai la UF posizionata nell'angolo superiore sinistro del tuo schermo, a prescindere che excel sia visibile a pieno schermo, ridotto oppure ad icona.

Per essere sicuro che quanto dici sia veramente corretto, prova il tuo codice su un altro pc.....

saluti



Domenico
Win 10 - Excel 2016
Post: 6.884
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
07/07/2022 11:12

Ciao Domenico lo so che la posizione 0zero è in alto a sx, ma eseguendo il codice con il riferimento della cella il suo punto 0zero è l'angolo superiore sx della cella, per cui poi si sposta di riga e colonna indicata, aggiungendo quel +5 e -5 serve per aggiustare la posizione finale.

infatti se tu scrivi nel Codice "Rr" + 3" si sposta di 3 righe e non di 3 punti o pixel, perche il punto 0zero dell'userform diventa 3 righe più in basso.

Comunque ho deciso di usare gli activex al posto dell'userform, più duttili e si spostano con lo schermo.

mi dispiace per gli utenti del Mac, volevo rendere la cosa disponibile anche per loro.

non ho un altro PC per fare le prove ora vedo se qualche amico mi usa la cortesia di fare questa prova, tanto per esserne sicuro.

Ciao e Grazie By Sal (8-D
[Modificato da by sal 07/07/2022 11:14]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.006
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
07/07/2022 22:15

Salve a tutta la compagnia
Ho inserito in un foglio un Rettangolo abbastanza grande (base più piccola dell'altezza) ed ho inserito nel modulo dl Foglio questo codice

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim altezzafinestra As Double, cellaattiva As Double, altezzafigura
altezzafinestra = Application.ActiveWindow.UsableHeight
cellaattiva = ActiveCell.Top
altezzafigura = ActiveSheet.Shapes("Rettangolo 1").Height
If cellaattiva + altezzafigura > altezzafinestra Then
  ActiveSheet.Shapes("Rettangolo 1").Top = cellaattiva - altezzafigura
Else
  ActiveSheet.Shapes("Rettangolo 1").Top = cellaattiva
End If
End Sub


Mi sembra che funzioni come hai chiesto.
Se ti interessa c'è pure la proprietà Application.ActiveWindow.UsableWidth
Ciao,
Mario
[Modificato da by sal 08/07/2022 07:08]
Post: 6.888
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/07/2022 07:11

Ciao Mario bello il tuo codice che tiene conto del monitor usato, in questo modo si può scegliere a piacere dove visualizzare i dati.
la metterò nel mio Archivio.

Ciao By Sal (8.D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.516
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
08/07/2022 09:54

Ciao Salvatore,
conosco l'impegno che dedichi al Forum e concordo sul fatto che i consigli di due "mostri sacri" come Marius e Dodo47,
oltre che più eleganti ed efficaci, siano più congeniali al tuo scopo,
ma senza volere fare alcuna polemica, tanto meno con Te che nel tempo mi hai risolto un sacco di problemi,

mi sarei almeno aspettato un qualcosa del genere:
"Ti ringrazio Frank, ma il tuo suggerimento non raggiunge il mio obiettivo."

Scusami,
ma sai che con il tempo il mio carattere, invece di migliorare...

Una buona giornata.
Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 6.889
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/07/2022 10:14

Ciao Frank, lungi da me non rispondere, ma quando ho trovato il metodo, non ho più provato la tua soluzione, purtroppo l'età avanza e non sono più attento come una volta, perdonami.

sai che quando pongo io un quesito, nel frattempo cerco di trovare anche io la risposta, quindi un continuo aggiornamento, "workinginprogress" non mi piace l'inlgese non so se ho scritto bene, del problema e mano a mano che ricevo risposte le provo, ma la tua è giunta diciamo nel momento sbagliato, non che non fosse valida fare le prove, mi sono accorto della risposta quando ho scritto il post, ed infervorato dalla soluzione non ho risposto.

Ciao Salvatore (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 19:42. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com