Creazione Userform su file excel già esistente e strutturato con diverse macro

Anonimo
2015-05-07T14:45:59+00:00

Buongiorno a tutti.

Sono praticamente inesperto sulla creazione di userform.

Chiedo gentilmente una mano per creare sul mio file excel già strutturato con diverse macro una userform ad hoc.

Se mi spiegate come fare allego volentieri sia il file excel e sia un esempio della struttura della userform che mi servirebbe.

Ultima cosa: la userform dovrebbe partira all'apertura del file excel.

Grazie mille in anticipo a tutti.

Massimo

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
2015-05-14T18:03:15+00:00

Ciao Massimo,

Sostituisci

 Private Sub UserForm_Initialize()

Dim rng As Excel.Range

con:

Private Sub UserForm_Initialize()

    Dim rng As Excel.Range

    Call deleteCaption(Me)

Se non riesci ancora di integrare il mio codice, carica un file di esempio che include la userform - i dati hanno poca importanza e possono essere cancellati - e posta un link al file qui.

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-05-12T20:43:23+00:00

Ciao Massimo,

no, il metodo Quit non prevede argomenti. Te ne puoi accorgere da solo se, quando digiti l'istruzione, arrivato a scrivere Application.Quit<spazio> non compaiono argomenti. Invece quando scrivi ThisWorkbook.Close<spazio> appare il suggerimento: Close([SaveChanges], [Filename], [RouteWorkbook]) a indicare che gli argomenti possibili di quel metodo sono tre e tutti facoltativi (perché racchiusi in parentesi quadra).

Quindi potresti scrivere:

Private Sub cmdClose_Click()

    ThisWorkbook.Close SaveChanges:=True

    Application.Quit

End Sub

In questo modo chiudi, salvando, la Cartella di lavoro nel cui Progetto VBA sta lo UserForm in cui viene eseguito quel codice e esci da Excel; così se ci sono altre Cartelle di lavoro aperte e non salvate ti viene proposto il solito messaggio: [Salva] [Non salvare] [Annulla].

Però, però... Non va mica bene fare così. È come se allo UserForm gli togliessimo la sedia mentre sta per sedersi.

Meglio fare così:

  • Aggiungi la variabile booleana a livello di modulo mblnQuitOnClose. Ovvero la scrivi subito dopo la lista delle costanti a livello di modulo:

Private Const mcstrColDat As String = "H"

Private mblnQuitOnClose   As Boolean

  • Nella routine-evento del pulsante cmdQuit scrivi:

Private Sub cmdQuit_Click()

    mblnQuitOnClose = True

    Unload Me

End Sub

  • E, per finire, la routine-evento che viene eseguita per ultima allo scaricamento dello UserForm:

Private Sub UserForm_Terminate()

    If mblnQuitOnClose Then

      With ThisWorkbook

        If Not .Saved Then .Save

        .Application.Quit

      End With

    End If

End Sub

La risposta è stata utile?

0 commenti Nessun commento

60 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-05-14T15:32:56+00:00

    Ciao Pedmas,

    Ti ringrazio, ma è simile a quanto ho potuto trovare su altri forum...il problema è che non so come integrare il codice della mia userform con i codici di cui parlano...vabbè dai non è un problema di vita o di morte mi terrò la barra del titolo (la x l'ho disabilitata, è che proprio non vorrei vedere la barra intera)...

    Per mostrare la userform senza la barra del titolo, prova qualcosa del genere:

    Nel modulo di codice della userform. incolla il seguente codice:

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

    Option Explicit

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

    Private Sub CommandButton1_Click()

        MsgBox Prompt:="Goodbye, fare thee well!"

        Unload Me

    End Sub

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

    Private Sub UserForm_Initialize()

        Call RemoveCaption(Me)

        Me.CommandButton1.Caption = "Chiudi!"

    End Sub

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

    Private Sub UserForm_Activate()

        With UserForm1

            .Top = 125

            .Left = 25

        End With

    End Sub

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

    In un modulo standard, incolla il seguente codice:

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

    Option Explicit

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

    Private Declare Function FindWindow Lib "User32" _

                                        Alias "FindWindowA" ( _

                                        ByVal lpClassName As String, _

                                        ByVal lpWindowName As String) As Long

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

    Private Declare Function GetWindowLong Lib "User32" _

                                           Alias "GetWindowLongA" ( _

                                           ByVal hwnd As Long, _

                                           ByVal nIndex As Long) As Long

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

    Private Declare Function SetWindowLong Lib "User32" _

                                           Alias "SetWindowLongA" _

                                           (ByVal hwnd As Long, _

                                            ByVal nIndex As Long, _

                                            ByVal dwNewLong As Long) As Long

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

    Private Declare Function DrawMenuBar Lib "User32" ( _

                                         ByVal hwnd As Long) As Long

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

    Public Sub deleteCaption(objForm As Object)

        Dim lStyle As Long

        Dim hMenu As Long

        Dim mhWndForm As Long

        If Val(Application.Version) < 9 Then

            mhWndForm = FindWindow("ThunderXFrame", objForm.Caption)    'XL97

        Else

            mhWndForm = FindWindow("ThunderDFrame", objForm.Caption)    'XL2000+

        End If

        lStyle = GetWindowLong(mhWndForm, -16)

        lStyle = lStyle And Not &HC00000

        SetWindowLong mhWndForm, -16, lStyle

        DrawMenuBar mhWndForm

    End Sub

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

    Public Sub ShowForm()

        UserForm1.Show vbModeless

    End Sub

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

    Potresti scaricare il mio file di prova Pedmas20150514.xlsm a: **http://1drv.ms/1bSfmAr**

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-05-14T11:50:28+00:00

    Ti ringrazio, ma è simile a quanto ho potuto trovare su altri forum...il problema è che non so come integrare il codice della mia userform con i codici di cui parlano...vabbè dai non è un problema di vita o di morte mi terrò la barra del titolo (la x l'ho disabilitata, è che proprio non vorrei vedere la barra intera)...

    Grazie mille

    Massimo P.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-05-14T11:35:54+00:00

    Ciao Massimo,

    a proposito della X rossa, visto che insisti (in altro thread) qui c'è tutto quello che c'è da sapere:

    **Hide close \[X\] button on excel vba userform for my progress bar**

    La risposta è stata utile?

    0 commenti Nessun commento