Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Access 2010] Codice VBA che non svolge quanto richiesto

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

[Access 2010] Codice VBA che non svolge quanto richiesto

Postdi KITT » 13/11/13 18:38

Ciao a tutti, ho una userform di access 2010 che contiene una certa label.
A questa label ho assegnato l'esecuzione di una macro mediante "event on click".
Visto che questa macro impiega un paio di minuti circa volevo fare in modo che questa label (che ha come caption "avvia procedura"), visualizzasse la dicitura "Processo in corso attendere prego" durante l'esecuzione della macro per poi tornare alla caption originale.
Per realizzare cio' ho scritto questo codice che pero' esegue solo la macro , ignorando completamente le altre istruzioni:

Codice: Seleziona tutto
EtichettaPulsante = Me.quiHoMessoNomePulsante.Caption
Me.quiHoMessoNomePulsante.Caption = "Attendere prego..."
stDocName = "NomeDellaMacro"
DoCmd.RunMacro stDocName
Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante
Msgbox "Procedura terminata"
 

Sono perplesso in quanto in un altro db 2010 avevo utilizzato lo stesso ragionamento e funzionava tutto perfettamente, l'unica differenza e' che che l'evento on clik apriva una query:

Codice: Seleziona tutto
stDocName = " NomeDellaQuery "
DoCmd.OpenQuery stDocName, acViewNormal, acReadOnly

Pensate che sia per quello o sto trascurando qualcos'altro?
Grazie per l'aiuto o gli spunti in merito.
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Sponsor
 

Re: Codice VBA che non svolge quanto richiesto

Postdi Flash30005 » 14/11/13 11:26

Devi rendere pubblica la variabile (stringa) di EtichettaPulsante altrimenti quando esegui la macro perde il "valore" della stringa
che, quindi risulterà "vuota"
ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Codice VBA che non svolge quanto richiesto

Postdi KITT » 14/11/13 13:46

Ciao Flash30005, e grazie per il tuo interessamento.

Perdona l'ignoranza in merito ma intendi che devo utilizzare all'inizio della sub le istruzioni dim in questo modo:

Codice: Seleziona tutto
Private Sub LabelX_Click()

   Dim stDocName As String
   Dim EtichettaPulsante  as String

   EtichettaPulsante = Me.quiHoMessoNomePulsante.Caption
   Me.quiHoMessoNomePulsante.Caption = "Attendere prego..."
   stDocName = "NomeDellaMacro"
   DoCmd.RunMacro stDocName
   Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante
   Msgbox "Procedura terminata"

End Sub

o devo dichiararle in qualche altro modulo?

Ancora grazie per la tua disponibilita'.
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Re: Codice VBA che non svolge quanto richiesto

Postdi Flash30005 » 14/11/13 23:41

Codice: Seleziona tutto
'<<< codice in testa al modulo
Public EtichettaPulsante, stDocName As String
'----------------------------
Private Sub LabelX_Click()

   'Dim stDocName As String '<<<<<<< elimina
   'Dim EtichettaPulsante  as String  '<<<<< elimina

   EtichettaPulsante = Me.quiHoMessoNomePulsante.Caption
   Me.quiHoMessoNomePulsante.Caption = "Attendere prego..."
   stDocName = "NomeDellaMacro"
   DoCmd.RunMacro stDocName
   Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante
   Msgbox "Procedura terminata"

End Sub


Prova così

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Codice VBA che non svolge quanto richiesto

Postdi KITT » 15/11/13 14:29

Ciao Flash30005 e ancora grazie per il tuo interessamento.

ho provato quanto suggerito, ho provato anche a metterlo all'inizio del codice del form a cui si riferisce la label, ma non funziona.
ha provato a mettere un breack point ad ogni riga di comando e poi ho provato ad eseguire step by step e ho visto che in questo modo funziona.
quindi deduco che le istruzioni vengono eseguite ma non aggiornate sulla form.
ho provato in questo modo e funziona, ho messo un do event prima e dopo l'unica istruzione che eseguiva:

Codice: Seleziona tutto
Private Sub LabelX_Click()

   EtichettaPulsante = Me.quiHoMessoNomePulsante.Caption
   Me.quiHoMessoNomePulsante.Caption = "Attendere prego..."
Do event
   stDocName = "NomeDellaMacro"
   DoCmd.RunMacro stDocName
Do event
   Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante
   Msgbox "Procedura terminata"

End Sub

Provero' a testarlo intensivamente... speriamo in bene.

Ti ringrazio ancora tantissimo per i tuoi spunti e la tua disponibilita'.
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Re: Codice VBA che non svolge quanto richiesto

Postdi Flash30005 » 16/11/13 02:46

I do event non occorrono
devi mettere un punto di interruzione a questa riga
Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante

avviare la macro e verificare se posizionandoti con il mouse sulla variabile "EtichettaPulsante" ti fornisce la stringa corretta


prova e fai sapere

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Codice VBA che non svolge quanto richiesto

Postdi KITT » 16/11/13 09:09

Ciao Flash30005, grazie per il tuo supporto.

ho provato, se posiziono il mouse sul nome della variabile mi esce la nuvoletta con il valore corretto. il problema e' che questo valore non viene "trasferito" nell'etichetta.

Mettendo un punto di interruzione ad ogni riga ed eseguendo il codice verificandone step by step i valori delle variabili mediante la nuvoletta ottenuta con il posizionamento del mouse queste assumono di volta in volta il valore che dovrebbero assumere.

In sostanza il codice che avevo previsto in origine richede che avvengano questi eventi a seguito del click:
1 - memorizzazione della caption relativa all'etichetta cliccata nella variabile "EtichettaPulsante"
2 - la caption dell'etichetta deve diventare "Attendere prego..."
3 - esecuzione della macro
4 - la caption dell'etichetta deve assumere il valore che avevo memorizzato nella variabile "EtichettaPulsante" (punto 1)
5 - si deve visualizzare un messaggio con su scritto "Procedura terminata".

tuttavia al click accade:
il punto 1 viene eseguito poiche' con il break point ho verificato che il valore di "EtichettaPulsante" era corretto
il punto 2 viene eseguito solo se sono in modalita' break point, altrimenti non la modifica
il punto 3 viene eseguito sempre sia con che senza break point
il punto 4 viene eseguito solo se sono in modalita' break point altimenti non lo modifica
il punto 5 viene eseguito sempre sia con che senza break point.

Quindi queste osservazioni lasciano intuire che il vba "legge" tutte le istruzioni, ma per un motivo che non mi e' chiaro, non restituise il risultato di quei comandi che interessano gli "oggetti interni al form", mentre quei comandi che interessano "oggetti esterni al form" vengono eseguiti regolarmente.

Ho usato il do event come escamotage per riportare in qualche modo "l'attenzione del vba" sul form che doveva aggiornare.

Al di fuori di questo trucchetto non so come ottenere lo stesso tipo di risultato.

Ti ringrazio ancora per la tua gentile pazienza. :)
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Re: Codice VBA che non svolge quanto richiesto

Postdi Flash30005 » 17/11/13 00:49

Ma se invece di
Codice: Seleziona tutto
Me.quiHoMessoNomePulsante.Caption = EtichettaPulsante

usi questo codice
Codice: Seleziona tutto
Me.quiHoMessoNomePulsante.Caption = "Pippo"

cosa accade?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Access 2010] Codice VBA che non svolge quanto richiesto

Postdi KITT » 17/11/13 12:39

Ciao flash30005 e grazie per la tua risposta.
Se eseguo passo passo con i punti di interruzione vedo la scritta Pippo altrimenti vedo il nome originale.

... molto strano...
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Re: [Access 2010] Codice VBA che non svolge quanto richiesto

Postdi Anthony47 » 18/11/13 00:29

Ma in Access si scrive Do event e non DoEvents??
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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Access 2010] Codice VBA che non svolge quanto richiesto

Postdi KITT » 18/11/13 07:44

Ciao Anthony47 e grazie per la tua risposta e interessamento, in access si scrive nello stesso modo: DoEvents.
Io ho digitato male solo nei post in quanto non ho fatto il copi/incolla dal codice, ma nell'editor e' scritto correttamente.
E questo e' molto strano...
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20

Re: Codice VBA che non svolge quanto richiesto

Postdi Flash30005 » 18/11/13 08:01

Se la Label "Pippo" viene visualizzato nel comando allora non hai messo in testa al modulo quanto detto nel precedente post
Flash30005 ha scritto:
Codice: Seleziona tutto
'<<< codice in testa al modulo
Public EtichettaPulsante, stDocName As String
'----------------------------
Private Sub LabelX_Click()
...
...
  End Sub


Prova così

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Access 2010] Codice VBA che non svolge quanto richiesto

Postdi KITT » 19/11/13 07:35

Ciao Flash30005, e ancora molte grazie.
Avevo provato:
Ciao Flash30005 e ancora grazie per il tuo interessamento.

ho provato quanto suggerito, ho provato anche a metterlo all'inizio del codice del form a cui si riferisce la label, ma non funziona.
ha provato a mettere un breack point ad ogni riga di comando e poi ho provato ad eseguire step by step e ho visto che in questo modo funziona.
quindi deduco che le istruzioni vengono eseguite ma non aggiornate sulla form.


L'avevo messo sia all'inizio del codice relativo al form, sia creando un modulo nel vba e mettendo la tua stringa in cima.

Perdonami non riesco a capire dove sbaglio :oops:
KITT
XP - OFFICE 2003 - ENG
WIN 7 - OFFICE 2010 - ENG
Avatar utente
KITT
Utente Junior
 
Post: 71
Iscritto il: 16/05/11 08:20


Torna a Applicazioni Office Windows


Topic correlati a "[Access 2010] Codice VBA che non svolge quanto richiesto":


Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti

cron