Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Lanciare macro da UserForm

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Lanciare macro da UserForm

Postdi loccostocco » 24/11/14 08:27

Buongiorno a tutti, in un modulo ho scritto il codice seguente che mi inserisce un pulsante per creare l'anteprima di stampa nel Foglio1; se lancio la macro attraverso il comando esagui, il tutto gira alla perfezione ma se associo la macro ad un pulsante inserito in una UserForm non va; non compare nessun messaggio di errore ma semplicimente non mi inserisce alcun pulsante.
Ho provato anche ad inserire il codice nella modulo della UserForm ma niente, il codice viene ignorato.
Qualcuno mi saprebbe indicare come fare per associare il codice al pulsante sulla UserForm?
Grazie in anticipo e buona giornata.

Codice: Seleziona tutto
Private Sub Inserisci_Anteprima()

Dim btn As Button, t As Range, Ur as Long

' Macro per inserire pulsante anteprima nel Foglio1

On Error Resume Next

Worksheets("Foglio1").Unprotect ""
     

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Ur = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row

   Set t = Worksheets("Foglio1").Range(Cells(Ur + 4, 9), Cells(Ur + 5, 11))
   Set btn = Worksheets("Foglio1").Buttons.Add(t.Left, t.Top, t.Width, t.Height)
   With btn
     .OnAction = "Anteprima_stampa"
   End With
   With btn.Font
        .Name = "Bookman Old Style"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
    End With
    btn.Font.Bold = True
    btn.Characters.Text = "Anteprima_di_stampa"
    With btn.Characters(Start:=1, Length:=19).Font
        .Name = "Bookman Old Style"
        .FontStyle = "Grassetto"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
    With btn
        .Locked = True
        .LockedText = True
    End With
    With btn
        .Placement = xlMove
        .PrintObject = False
    End With
   
Worksheets("Foglio1").Protect ""
   
Resume

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

End Sub
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Sponsor
 

Re: Lanciare macro da UserForm

Postdi Zer0Kelvin » 24/11/14 15:25

Ciao.
Così, tanto per bighellonare :diavolo: :
1) come pensi che la macro possa andare in errore dopo che hai (o hanno) inserito il bellissimo
Codice: Seleziona tutto
    On Error Resume Next

a inizio macro?
2) quell'istruzione
Codice: Seleziona tutto
    Resume

verso la fine, è lì apposta per mandare in loop il codice o sta lì "tanto per"?

Il mio consiglio è di eliminare quelle due istruzioni, trovare l'errore e correggere il codice.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: Lanciare macro da UserForm

Postdi loccostocco » 24/11/14 17:41

Ciao Zer0Kelvin,
grazie della risposta ma ho già provato in precedenza in tuo suggerimento e la cosa strana è che non mi da alcun errore; semplicimente non inserisce il pulsante nel foglio.
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Re: Lanciare macro da UserForm

Postdi Zer0Kelvin » 24/11/14 20:20

Mi sembra di capire che forse non hai mai usato un commandbutton in una userform.
Nell'editor VBA, quando è visibile la tua userform, fai doppio clisk sul commandbutton desiderato; oppure click destro sul commandbutton e selezioni "visualizza codice".
Verrà visualizzato qualcosa di molto simile a
Codice: Seleziona tutto
Private Sub CommandButton1_Click (  )

End sub
E' lì che devi inserire le istruzioni che devi eseguire quando si clicca il pulsante.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: Lanciare macro da UserForm

Postdi loccostocco » 25/11/14 08:21

Ciao ZerOKelvin, mi scuso per non essere stato chiaro nell'illustrare la questione; la macro che ho postato sopra viene appunto richiamata da un pulsante sulla userform attraverso questo codice:

Codice: Seleziona tutto
Private Sub CommandButton1_Click()

Application.Run "Inserisci_Pulsante"  'questa è la macro che ho postato sopra e che è inserita nel modulo 3.

End Sub


Però sembra che il comando Application.Run non richiami affatto la macro e allo stesso tempo non mi da alcun errore che mi aiuti a correggere il codice.
Ho provato a richimare la macro da un command button inserito in un foglio ma il risultato è lo stesso: non succede niente!!!
Spero di essere stato chiaro.
Grazie
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Re: Lanciare macro da UserForm

Postdi Zer0Kelvin » 25/11/14 11:23

A questo punto sarebbe meglio se allegassi un file di esempio.

Vedo che con Application.Run cerchi di eseguire una subroutine di nome Inserisci_Pulsante, mentre la subroutine che hai allegato prima si chiama Inserisci_Anteprima.
Comunque, in generale, per poter richiamare una sub da una userform, la sub deve trovarsi o all'interno di una userform, o in un modulo standard ed essere dichiarata Public e non hai motivo di usare Application.Run.
Per esempio: nella userform
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
     Inserisci_Pulsante
End Sub
e nel modulo
Codice: Seleziona tutto
Public Sub Inserisci_Pulsante ()
'... eccetera
'...
End Sub
E' comunque strano che non si verifichi un errore di esecuzione ma, ripeto, senza vedere tutto il codice è impossibile capire il motivo.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: Lanciare macro da UserForm

Postdi Anthony47 » 25/11/14 12:37

Guarda il messaggio di Zer0K, sopra.

Tralasciamo la domanda "che senso ha creare un pulsante tramite un altro pulsante, premendo il quale si effettua l' anteprima di stampa", che non ti pongo :D ; il mio sospetto e' che il codice coinvolto sia piu' complesso di quello pubblicato, se non altro perche' nel primo messaggio la macro si chiamava Inserisci_Anteprima e nell' ultima si chiama Inserisci_pulsante… Ci sara' un altro On Error Resume Next in giro?
Quindi pubblica il codice completo del CommandButton1_Click cosi' guardiamo anche li'.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Lanciare macro da UserForm

Postdi loccostocco » 25/11/14 14:54

Ciao, il codice completo che dovrebbe inserire il pulsante nel Foglio1 è il seguente:

Codice: Seleziona tutto
Private Sub Inserisci_Anteprima()

Dim btn As Button, t As Range, Ur As Long

' Macro per inserire pulsante anteprima nel foglio1

On Error Resume Next

Worksheets("Foglio1").Unprotect "noproblem9"
     

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

Ur = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row

   Set t = Worksheets("Foglio1").Range(Cells(Ur + 4, 9), Cells(Ur + 5, 11))
   Set btn = Worksheets("Foglio1").Buttons.Add(t.Left, t.Top, t.Width, t.Height)
   With btn
     .OnAction = "Anteprima_Foglio1"
   End With
   With btn.Font
        .Name = "Bookman Old Style"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
    End With
    btn.Font.Bold = True
    btn.Characters.Text = "Anteprima_di_Foglio1"
    With btn.Characters(Start:=1, Length:=19).Font
        .Name = "Bookman Old Style"
        .FontStyle = "Grassetto"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
    With btn
        .Locked = True
        .LockedText = True
    End With
    With btn
        .Placement = xlMove
        .PrintObject = False
    End With
   
Worksheets("Foglio1").Protect ""
   
Resume

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

End Sub


mentre il codice abbinato al bottone nella UserForm è il seguente:

Codice: Seleziona tutto
Private Sub CommandButton1.Click()

Application.Run "Inserisci_Anteprima"

UserForm3.Hide ' Userform nella quale è inserito il bottone

Application.ScreenUpdating = True

Worksheets("Foglio1").Cells.EntireColumn.AutoFit
Worksheets("Foglio1").Cells(1, 1).EntireColumn.Hidden = True
Worksheets("Foglio1").Columns("F").ColumnWidth = 14.45
Worksheets("Foglio1").Columns("D").ColumnWidth = 14.56
Worksheets("Foglio1").Columns("E").ColumnWidth = 12.22
Worksheets("Foglio1").Columns("G").ColumnWidth = 13#

Worksheets("Foglio1").Rows("1:1").AutoFit

Application.ScreenUpdating = False

MsgBox "Foglio1 creato!!!"

Worksheets("Foglio1").Select

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

End Sub


Ho provato a far girare la macro sia senza le istruzioni 'On Error Resume Next' e 'Resume' sia dichiarando la macro 'Inserisci_Anteprima' 'Public' sia inserendola nella UserForm ma niente; la macro gira solo se la lancio dal modulo nel quale è inserita.
Non riesco proprio a capire quale sia l'errore.

Per caso si potrebbero creare dei conflitti con delle listbox e/o delle checkbox inserite nella stessa UserForm?

Grazie dell'aiuto.
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Re: Lanciare macro da UserForm

Postdi loccostocco » 25/11/14 15:02

Scusate, nel codice associato alla UserForm che ho inserito poco fa ho dimenticato di inserire le istruzioni:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

quindi il codice corretto è:

Codice: Seleziona tutto
    Private Sub CommandButton1.Click()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    Application.Run "Inserisci_Anteprima"

    UserForm3.Hide ' Userform nella quale è inserito il bottone

    Application.ScreenUpdating = True

    Worksheets("Foglio1").Cells.EntireColumn.AutoFit
    Worksheets("Foglio1").Cells(1, 1).EntireColumn.Hidden = True
    Worksheets("Foglio1").Columns("F").ColumnWidth = 14.45
    Worksheets("Foglio1").Columns("D").ColumnWidth = 14.56
    Worksheets("Foglio1").Columns("E").ColumnWidth = 12.22
    Worksheets("Foglio1").Columns("G").ColumnWidth = 13#

    Worksheets("Foglio1").Rows("1:1").AutoFit

    Application.ScreenUpdating = False

    MsgBox "Foglio1 creato!!!"

    Worksheets("Foglio1").Select

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

    End Sub


Grazie e buona giornata.
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Re: Lanciare macro da UserForm

Postdi loccostocco » 25/11/14 15:03

Se serve, allegherò il file di esempio quanto prima.
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56

Re: Lanciare macro da UserForm

Postdi Zer0Kelvin » 25/11/14 22:50

loccostocco ha scritto:Se serve, allegherò il file di esempio quanto prima.

Sarebbe preferibile, altrimenti non la risolviamo, temo.
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 303
Iscritto il: 08/04/12 11:23

Re: Lanciare macro da UserForm

Postdi loccostocco » 27/11/14 13:45

Ciao ragazzi, credo di aver risolto. Ho spostato l'istruzione 'Application.Run "Inserisci_Anteprima"' alla fine del codice prima di End Sub e mi sono accorto che c'era una cella piena nel Foglio1 che 'sballava' la variabile Ur; ora sembra che tutto funzioni...:)
Grazie dell'aiuto, alla prossima;)
loccostocco
Utente Junior
 
Post: 14
Iscritto il: 26/06/14 03:56


Torna a Applicazioni Office Windows


Topic correlati a "Lanciare macro da UserForm":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti

cron