Condividi:        

[EXCEL-VBA] Contatore associato ad evento

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

[EXCEL-VBA] Contatore associato ad evento

Postdi flakmask » 06/08/10 15:30

Salve a tutti, primo post e complimenti doverosi,
la mia richiesta di aiuto nasce dall’esigenza di avere un contatore associato all’evento click di un cmd posto all’interno di una form, il quale contatore al verificarsi del doppio evento click sul pulsante “Stampa”, quindi seconda stampa, mi attiva il cmd “Registra”, anch’esso all’interno della form, finora su Enabed.

Riepilogo:
1° Click cmd “Stampa” 1^ stampa
cmd “Registra” Enabled = False

2° Click cmd “Stampa” 2^ stampa
Cmd “Regitra” Enabled = True

Grazie a tutti per l'aiuto!
flakmask
Utente Junior
 
Post: 10
Iscritto il: 06/08/10 14:49

Sponsor
 

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi Anthony47 » 06/08/10 21:20

Ciao flakmask e benvenuto nel forum.
Non sono certo i aver afferrato, comunque se a ogni click incrementi un contatore, controlli il Modulo e se e' "zero" esegui le operazioni che ti servono;
Codice: Seleziona tutto
If Contatore Mod 2 = 0 then
'le tue istruzioni
End If
Contatore deve essere definita di tipo Public, per essere disponibile e accessibile dalle varie routine di evento.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi flakmask » 07/08/10 14:12

Anthony47 ti ringrazio per la tempestività, e provo a spiegarmi meglio per darti la possibilità di aiutarmi.
Ho una form per caricare un foglio “Fattura”, nella form ci sono diverse txt, lbl e cmd, tra cui uno “Riporta in Fattura” uno “Stampa Fattura” e un terzo “Registra” , le operazioni di fatturazione, ossia carico foglio, stampa e registrazione avvengono con una sequenza obbligata, per via di cmd che ho reso inattivi, quindi ti elenco in successione cosa succede e di conseguenza cosa mi serve;
1. Riempio le txt della form con nominativo importi ecc. e attraverso il cmb “Riporta in Fattura” mi carico il foglio fattura, il cmd “Stampa Fattura” da inattivo (Enabled = False), che era, mi diventa attivo (Enabled = True) per permettermi di procedere con il passo successivo, ossia la stampa, mentre l’altro cmd “Registra” rimane ancora inattivo (Enabled = False).
2. Ora che il foglio fattura è carico procedo con la stampa, che deve avvenire con un foglio alla volta, ossia alla pressione del cmd “Stampa” deve corrispondere la stampa di una fattura, dato che le copie devono essere 2, gli invii si devono ripetere due volte, se ti chiedi perché una alla volta?, semplicemente perché la fattura avviene su un prestampato (Buffetti)e dato la stampante, i fogli vanno inseriti uno alla volta, quindi tornando alla stampa, pressione cmd “Stampa” invio 1^stampa il cmd “Registra”deve rimanere ancora inattivo (Enabled = False), seconda pressione cmd “Stampa” invio 2^ stampa, il cmd “Registra”da inattivo che era deve diventare attivo, quindi (Enabled = True) per proseguire con la fase finale della sequenza di cui parlavo all’inizio e cioè la registrazione .
E’ proprio nell’ultimo pezzo che mi sono perso e non riesco a trovare una soluzione, complice la mia scarsa conoscenza del VBA, ossia come fare ad avere il cmd “Registra” attivo solo dopo l’invio della 2^ stampa e non prima, come purtroppo mi succede, per questo avevo pensato a un contatore, ma non saprei come applicarlo all’evento.
Spero di essere stato più chiaro e Grazie di nuovo!
flakmask
Utente Junior
 
Post: 10
Iscritto il: 06/08/10 14:49

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi Anthony47 » 07/08/10 23:32

La descrizione conferma la mia interpretazione precedente e quindi anche il suggerimento; incrementa Contatore all' inizio del ciclo di Stampa e metti subito dopo il codice suggerito nel messaggio precedente.
Non ho invece capito se quanto hai scritto sono "specifiche funzionali" di qualcosa tutta da realizzare o "specifiche tecniche" di qualcosa quasi tutto fatto.

Un' altra opzione forse piu' semplice potrebbe essere prevedere due bottoni: Stampa-prima-copia e Stampa-seconda-copia.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi flakmask » 08/08/10 21:37

Non avevo dubbi sull’interpretazione giusta o meno da parte tua, ho semplicemente cercato di darti più notizie sperando di averne di più io, perche come ti ho già detto la mia conoscenza è molto scarsa, tutto ciò che faccio o riesco a realizzare è frutto di tanto girovagare tra i vari siti con pezzi di codice presi qua e là per poi essere assemblati, le “specifiche funzionali” di cui ho bisogno è di qualcosa già realizzato e funzionante ma siccome sono molto esigente nei miei confronti speravo di aggiungere un ulteriore tassello al mio lavoro, l’opzione del doppio bottone, a cui non avevo pensato va già bene e ti ringrazio, anche se non ti nascondo che, in considerazione di quando ci sono stato su, la cosa mi scocca notevolmente, ma a volte bisogna riconoscere i propri limiti e mestamente abbassare il capo.
Scusami sto divagando dal problema e venendo meno ai principi del forum, ma è dettato dal rammarico della resa, comunque ti allego un pezzo di codice se ti và di darci uno sguardo, lo scritto e riscritto tante di quelle volte che ci capisco ancora meno di prima.
Codice: Seleziona tutto
   Private Sub CommandButton2_Click() 'stampa la fattura
     Contatore = zonastampa
If Contatore = 0 Then
a = Contatore
a = a + 1
End If
Set zonastampa = ActiveSheet.Range("$A$1:$U$45")
ActiveSheet.PageSetup.PrintArea = zonastampa.Address
zonastampa.PrintOut Copies:=1, Collate:=True
If Contatore Mod 2 = 0 Then
CommandButton3.Enabled = True
End If
End Sub


Grazie, Ciao!
flakmask
Utente Junior
 
Post: 10
Iscritto il: 06/08/10 14:49

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi Flash30005 » 09/08/10 00:29

Benvenuto anche da parte mia nel Forum
sono solo di passaggio e non so se ho afferrato bene il problema
ho testato un pulsante "CommandButton2"
in questa maniera e sembra funzionare
Codice: Seleziona tutto
Private Sub CommandButton2_Click()
Set zonastampa = ActiveSheet.Range("$A$1:$U$45")
ActiveSheet.PageSetup.PrintArea = zonastampa.Address
zonastampa.PrintOut Copies:=1, Collate:=True
contatore = contatore + 1
'MsgBox contatore
If contatore = 2 Then
'MsgBox contatore
CommandButton3.Enabled = True
' oppure
'Cmd “Regitra” Enabled = True
contatore = 0
End If

End Sub

Però devi definire in un modulo la variabile contatore di tipo public come ti ha suggerito Anthony
Codice: Seleziona tutto
Public contatore As Integer


Come vedi sono un po' confuso su cosa vorresti fare in quanto
Codice: Seleziona tutto
CommandButton3.Enabled = True
non significa nulla
magari funziona meglio con
Codice: Seleziona tutto
Call CommandButton3_Click

se con quel comando hai un'altra routine da far "girare" appositamente altrimenti è sufficiente una macro senza utilizzare il CommandButton3, mentre se vuoi rendere "True" il comando "Registra" togli il commento che ho inserito nella macro

In ogni caso non dovresti avere alcun problema nemmeno con la macro consigliata giustamente da Anthony

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi flakmask » 09/08/10 08:00

Buongiorno Flash30005, (data l’ora della risposta) ho corretto il mio codice con il tuo e tutto funziona nella giusta maniera, ossia come mi serviva, e ho capito l’errore che facevo interpretando male la risposta di Anthony, ma seguendo l’altro suo consiglio, ossia il doppio bottone, ho raggiunto comunque lo scopo, in maniera sicuramente articolata, ma efficace.
Per non modificare la grafica della form ho messo un bottone sopra all’altro rendendo visibile, ma inattivo il primo, e nascosto il secondo, e…. forse e meglio che vi faccio vedere il codice, sicuramente per voi più intuitivo rispetto alle mie spiegazioni,

Codice: Seleziona tutto
Private Sub CommandButton1_Click() 'riporta in fattura
If interruttore = True Then
dimmi = MsgBox("Manca il Nominativo!  e allore scrivemicele !!", vbExclamation, "Attenzione")
Exit Sub
End If
If TextBox6 = "" Then
dimmi = MsgBox("Manca il Numero!", vbExclamation, "Attenzione")
TextBox2.SetFocus
Exit Sub
End If
If TextBox7 = "" Then
dimmi = MsgBox("Manca la Data !", vbExclamation, "Attenzione")
Exit Sub
End If
If TextBox8 = "" Then
dimmi = MsgBox("Manca l’Aliquota", vbExclamation, "Attenzione")
TextBox15.SetFocus
Exit Sub
End If

If Mid(TextBox7, 3, 1) + Mid(TextBox7, 6, 1) <> "/" = "" Then
Exit Sub
End If
'si copia in fattura: dati cliente,data,aliquota,servizi e quantità

[X11].Value = Val(TextBox6) 'n.fatt
[B10].Value = TextBox1  'rag. sociale
[B11].Value = TextBox2  'indirizzo
[B12].Value = TextBox3  'città
[I12].Value = TextBox4  'p.iva
[X7].Value = TextBox5  'codice cliente
[L8].Value = Mid(TextBox7, 1, 1) 'data,giorno
[M8].Value = Mid(TextBox7, 2, 1) 'data,giorno
[O8].Value = Mid(TextBox7, 4, 1) 'data,mese
[P8].Value = Mid(TextBox7, 5, 1) 'data,mese
[R8].Value = Mid(TextBox7, 7, 1) 'data,anno
[S8].Value = Mid(TextBox7, 8, 1) 'data,anno
[T8].Value = Mid(TextBox7, 9, 1) 'data,anno
[U8].Value = Mid(TextBox7, 10, 1) 'data,anno
[X17].Value = Val(TextBox8)        'aliquota IVA
[B15].Value = TextBox9 'quantità
[D15].Value = TextBox10  'servizi
[B16].Value = TextBox12 'quantità
[D16].Value = TextBox13  'servizi
[B17].Value = TextBox15 'quantità
[D17].Value = TextBox16  'servizi
[B18].Value = TextBox18 'quantità
[D18].Value = TextBox19  'servizi
[B19].Value = TextBox21 'quantità
[D19].Value = TextBox22  'servizi
[B20].Value = TextBox24 'quantità
[D20].Value = TextBox25  'servizi
[B21].Value = TextBox27 'quantità
[D21].Value = TextBox28  'servizi
[B22].Value = TextBox30 'quantità
[D22].Value = TextBox31  'servizi
[B23].Value = TextBox33 'quantità
[D23].Value = TextBox34  'servizi
[B24].Value = TextBox36 'quantità
[D24].Value = TextBox37  'servizi
CommandButton8.Enabled = True
CommandButton14.Enabled = True
CommandButton1.Enabled = False
End Sub 

Private Sub CommandButton14_Click() 'stampa 1^ copia fattura
Set zonastampa = ActiveSheet.Range("$A$1:$U$45")
ActiveSheet.PageSetup.PrintArea = zonastampa.Address
zonastampa.PrintOut Copies:=1, Collate:=True
CommandButton3.Enabled = False
CommandButton2.Visible = False
CommandButton14.Visible = False
CommandButton2.Visible = True
End Sub

Private Sub CommandButton2_Click() 'stampa 2^ copia fattura
Set zonastampa = ActiveSheet.Range("$A$1:$U$45")
ActiveSheet.PageSetup.PrintArea = zonastampa.Address
zonastampa.PrintOut Copies:=1, Collate:=True
CommandButton3.Enabled = True
CommandButton14.Enabled = False
CommandButton2.Enabled = False
End Sub

Sheets("Fattura").Activate
ComboBox1.RowSource = "Clienti!clienti"
If ActiveSheet.Name = ("Fattura") Then
Label63.Caption = Sheets("Fattura").[Y8] 'inserisce nella UserForm il giorno della settimana
Label48.Caption = Sheets("Fattura").[X8] 'inserisce nella UserForm la data
Label62.Caption = WorksheetFunction.Max(Range("nfatt")) ' numero fattura + 1
CommandButton8.Enabled = False 'ritenuta
CommandButton2.Visible = False 'stampa 2^ copia
CommandButton14.Visible = True 'stampa 1^ copia
CommandButton14.Enabled = False 'stampa 1^ copia
CommandButton3.Enabled = False 'registra
CommandButton1.Enabled = True
CommandButton11.Visible = True ' nuovo cliente
interruttore = True
End If
End Sub

Sicuramente molto articolato, ma comunque funzionante e di aspetto gradevole, secondo il mio modo di vedere.
Vi ringrazio tantissimo per l’aiuto che mi avete dato, e per il tempo che dedicate a questo interessantissimo forum, con risposte precise e immediate.
Ciao, Grandi!!
flakmask
Utente Junior
 
Post: 10
Iscritto il: 06/08/10 14:49

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi Anthony47 » 09/08/10 14:30

L' ipotesi del secondo Pulsante l' avevo fatta anche per dare all' utente l' idea di quale era il flusso di lavoro; quindi io avrei lasciato i due pulsanti visibili, al limite avrei usato .Enabled = False.

Comunque complimenti per la caparbieta' dimostrata (che e' sempre una cosa buona)

Ricorda anche di "taggare" opportunamente il codice (selezioni, premi Code), per rendere piu' leggibile il messaggio.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL-VBA] Contatore associato ad evento

Postdi flakmask » 09/08/10 19:15

Ciao Anthony.
La scelta di nascondere il pulsante deriva dalla form che ho, ossia bella piena di txt, lbl e con i vari cmd dentro le numerose cornici, il tutto allineato e con le giuste proporzioni.
Quindi lasciare i pulsanti visibili sarebbe stato sicuramente più giusto e funzionale, ma trovare uno spazio per come è concepita la form sarebbe stato più difficile perché bisognava modificare tutto, quindi ho preferito con il codice, anche perché con i suggerimenti tuoi e quelli di Flash ho due macro che fanno esattamente quello che volevo.
Per quanto riguarda “taggare” il codice non sapevo proprio come fare, ma al prossimo messaggio non lo scorderò certamente.
Ciao e grazie di nuovo.
flakmask
Utente Junior
 
Post: 10
Iscritto il: 06/08/10 14:49


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL-VBA] Contatore associato ad evento":


Chi c’è in linea

Visitano il forum: papiriof e 58 ospiti