RIDIMENSIONAMENTO USER FORM



  • RIDIMENSIONAMENTO USER FORM
    di ARTLAB (utente non iscritto) data: 21/11/2013 13:00:40

    Salve a tutti,
    premetto che mi sono appena iscritto al forum e sono alle prime armi con la programmazione VBA.
    Vengo subito al problema... in pratica quello che mi occorre sapere, è se esiste un sistema per adattare una UserForm
    (lavorando sempre in ambiente Excel) alla risoluzione dello schermo. Dato che in azienda abbiamo monitor con risoluzioni diverse e utilizziamo a volte gli stessi file, sto creando un programmino con delle UserForm e evorrei creare diverse UserForm che si adattano a tutti i monitor dell'ufficio.
    Diciamo che in parte ci sono riuscito utilizzando questo codice che ho trovato sul WEB:

    Tutto sembrava funzionare alla grande, ma andando avanti con il lavoro, ho notato alcune anomalie.
    Ad esempio, se all'interno della UserForm "adattata", apro una nuova UserForm che si trova ad una posizione ben precisa (ho modificato nelle proprietà del form Top e Left), sul mio monitor la vedo nel punto in cui volevo, su un monitor più piccolo ad esempio, la trovo parecchio più in basso e più a destra. Spero di essermi spiegato.
    Oltre a questo problema, ho riscontrato altri problemi di adattamento.

    In pratica quello che vorrei è un codice VBA (sempre che esista) che mi adatta perfettamente tutto (UserForm e il suo contenuto) come avviene aprendo un normale Programma ( Se apro ad esemio AutoCad su un monitor piccolo, l'interfaccia si adatta perfettamente allo schermo. La stessa cosa accade aprendo AutoCad su un monitor grande. tutto si adatta perfettamente).

    Esiste qualcosa del genere? Spero di essere stato chiaro nella descrizione e spero anche di ricevere qualche risposta.
    Grazie...


     
    L = Application.Width
     H = Application.Height
    
     ' Dimensioni del form "PRIMA" dell'adattamento alla risoluzione del video
     L1 = UserForm1.Width
     H1 = UserForm1.Height
    
     ' Adatta il form alle dimensioni del video (utilizza un fattore correttivo di diminuzione)
     ' con alcuni monitor può essere necessario utilizzarlo altrimenti il form viene tagliato
     With UserForm1
     .Width = Application.Width * 0.98    ' Fattore corretivo di diminuzione dimensioni
     .Height = Application.Height * 0.98
     End With
    
     ' Dimensioni del form "DOPO" dell'adattamento alla risoluzione del video
     L2 = UserForm1.Width
     H2 = UserForm1.Height
    
     ' Adatta i "controlli" presenti nel form alle dimensioni del video
     For Each controllo In UserForm1.Controls
     controllo.Width = controllo.Width * L2 / L1
     controllo.Height = controllo.Height * H2 / H1
     controllo.Left = controllo.Left * L2 / L1
     controllo.Top = controllo.Top * H2 / H1
     Next
    
     UserForm1.Show



  • di nichicanta (utente non iscritto) data: 21/11/2013 14:18:27

    Ciao ARTLAB, benvenuto in questo bellissimo forum, se ti può essere di aiuto ti allego un foglio scaricato da internet che fa quello che tu chiedi.
    Saluti.



  • di ARTLAB (utente non iscritto) data: 21/11/2013 14:23:11

    Grazie 1000 nichicanta per la risposta. Vado subito a vedermi il link, poi faccio un po' di prove e ti dico.
    Ciao..



  • di ARTLAB (utente non iscritto) data: 21/11/2013 14:26:16

    Scusami nichicanta, avevo letto male...pensavo mi avessi inserito un link a qualche pagina WEB. Ma non vedo comunque l'allegato. O si scarica da qualche parte? Non sono molto pratico dei forum.



  • di nichicanta (utente non iscritto) data: 21/11/2013 14:30:00

    il file l'ho allegato, cmq il sito è ennius. altervista .org



  • di ARTLAB (utente non iscritto) data: 21/11/2013 14:35:46

    OK, Grazie...



  • di ARTLAB (utente non iscritto) data: 22/11/2013 10:37:57

    ciao nichicanta...
    allora, ho utilizzato il codice VBA che ho trovato nel tuo allegato.
    Sembra che funzioni (devo fare ancora un po' di prove), ma se inserisco un oggetto "immagine" nella userform, mi da errore alla stringa "ctr.Font.Size = ctr.Font.Size * xa"...
    non riesco a capire il perché. Se elimino quella stringa, il form si apre ma non mi ridimensiona il testo in genere e le label.
    Qualcuna può aiutarmi??? Grazie...
     
    Sub UserForm_Activate()
    '
    ' UserForm_Activate Macro
    '
    
    '
    x = Application.UsableWidth
     h = Application.UsableHeight
     If x > 597 Then
     xa = x / 597
     ha = h / 309
     With UserForm1
     .Top = 1 'impostiamo il bordo superiore della userform ad inizio videata dall'alto
     .Left = 1  'impostiamo il bordo sinistro della userform ad inizio videata da sinistra
     .Height = Application.UsableHeight + 142  'per quanto riguarda la nuova altezza, aggiungiamo il 'valore di 130 punti che corrisponde grosso modo alla differenza tra l'altezza della window e 'l'altezza della finestra di Excel. Variando questo valore ognuno potrà ottimizzare le proprie misure
     .Width = Application.UsableWidth
     End With
    For Each ctr In UserForm1.Controls
     ctr.Width = ctr.Width * xa
     ctr.Height = ctr.Height * ha
     ctr.Font.Size = ctr.Font.Size * xa
     ctr.Top = ctr.Top * ha
     ctr.Left = ctr.Left * xa
     Next
     End If
    UserForm1.Show
    End Sub