Posizione sullo schermo di un Userform

Anonimo
2018-04-27T14:14:38+00:00

Buonasera,

mi sono cimentato a fare un calendario PopUp ed è praticamente finito, anche con l'aiuto

del grande Norman.

Ora se il form è chiamato da una cella riesco ad agganciare il calendario alla cella con queste due istruzioni:

in Useform_Initialize()

Me.Top = ActiveCell.Top + 184

Me.Left = ActiveCell.Left + 21

e funziona perfettamente. Ma se il calendario è chiamato da un'altra userform, il calendario si aggancia sempre ovviamente

all'ultima cella attiva. C'è un modo per capire invece che è stato chiamato da una userform ed agganciarla ad essa o 

al centro dello schermo?

Forse non si può fare...non lo so.

Grazie in anticipo,

Marco

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-04-27T16:38:30+00:00

Ciao Marco,

Grazie Norman.......

sei geniale..... ;-)

Mi fa piacere che tu abbia risolto il problema e ti ringrazio per il cortese riscontro.

Per chiudere questo thread ed aiutare altri utenti, vorrei chiederti gentilmente di contrassegnare la mia risposta come Risposta.

A proposito del calendario, approfitto per suggerire che il tu modo di riempire il controllo, ossia

    With Me.cmbMese

        .AddItem "Gennaio"

        .AddItem "Febbraio"

        .AddItem "Marzo"

        .AddItem "Aprile"

        .AddItem "Maggio"

        .AddItem "Giugno"

        .AddItem "Luglio"

        .AddItem "Agosto"

        .AddItem "Settembre"

        .AddItem "Ottobre"

        .AddItem "Novembre"

        .AddItem "Dicembre"

    End With

possa essere semplificata così:

    Me.cmbMese.List = Application.GetCustomListContents(4)

Inoltre, in questo modo il calendario diventerebbe internazionale in quanto i mesi elencati nella ComboBox saranno sempre nella lingua dell'utente o, meglio, la lingua imposta nel Pannello di controllo di Windows.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-04-27T15:32:25+00:00

    Ciao Marco,

    mi sono cimentato a fare un calendario PopUp ed è praticamente finito, anche con l'aiuto

    del grande Norman.

    Ora se il form è chiamato da una cella riesco ad agganciare il calendario alla cella con queste due istruzioni:

    in Useform_Initialize()

    Me.Top = ActiveCell.Top + 184

    Me.Left = ActiveCell.Left + 21

    e funziona perfettamente. Ma se il calendario è chiamato da un'altra userform, il calendario si aggancia sempre ovviamente

    all'ultima cella attiva. C'è un modo per capire invece che è stato chiamato da una userform ed agganciarla ad essa o 

    al centro dello schermo?

    Forse non si può fare...non lo so.

    Prova quanto segue:

    In cima ad un modulo standard, incolla:

    '=========>>

    Option Explicit

    Public myTop As Double

    Public myLeft As Double

    magari qui:

    '=========>>

    Option Explicit

    Public rDate As Range

    Public bDateEntryMode As Boolean

    Public myTop As Double

    Public myLeft As Double

    Nella procedura UserForm_Initialize nel modulo di codice  della Userform frmCalendario, cancella:

            Me.Top = ActiveCell.Top + 184

            Me.Left = ActiveCell.Left + 21

    In cima alla procedura, incolla:

        Me.StartUpPosition = 0

          If myTop = 0 Then

            Me.Top = ActiveCell.Top + 184

            Me.Left = ActiveCell.Left + 21

        Else

            Me.Top = myTop

            Me.Left = myLeft

        End If

    Nello stesso modulo di codice, incolla la seguente procedura:

    '--------->>

    Private Sub UserForm_Terminate()

        myTop = 0

        myLeft = 0

    End Sub

    '<<=========

    Ponendo che ci sia un controllo CommandButton sull'altra Userform, nel modulo di codice di quella Userform, incolla qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub UserForm_Initialize()

        With Me

            .StartUpPosition = 0

            .Top = Application.Top + 100

            .Left = (Application.Width - .Width) / 2

        End With

    End Sub

    '--------->>

    Private Sub CommandButton1_Click()

        Unload frmCalendario

        With Me

            myTop = .Top + .Height + 10

            myLeft = .Left

            frmCalendario.Show vbModeless

        End With

    End Sub

    '<<=========

    Nota che,  come è scritto il codice, dopo l'eventuale spostamento dell'altra Userform, ricliccando il controllo CommandButton, il calendario si spostera nella nuova posizione sotto l'altra Userform.

    Potresti scaricare il mio file di prova Marco20180427.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2018-04-28T07:59:10+00:00

    Ciao Marco.

    vedo di comprare il primo libro.

    Anche se è in inglese, spero sia di "facile" comprensione....

    John Walkenbach ha il dono di essere capace di spiegare temi difficili in modo semplice ed illuminante. 

    Poi. in caso di difficolta, non dimenticare che siamo sempre qui per aiutarti con i tuoi studi!

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2018-04-27T17:17:04+00:00

    Questa proprio non la sapevo......

    ma dove posso trovare tutte queste informazioni?

    Puoi elencarmi uno o due libri VBE che parli di tutte queste cose?

    Grazie Norman....

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-04-27T16:27:57+00:00

    Grazie Norman.......

    sei geniale..... ;-)

    La risposta è stata utile?

    0 commenti Nessun commento