| | 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 |
|
|