Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[vba]

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

[vba]

Postdi riskismoney » 19/04/13 13:37

Ciao,
ho centinaia di file che all'interno hanno questo codice:

Codice: Seleziona tutto
Conferma = MsgBox("ATTENZIONE" & vbCrLf & vbCrLf & "Tutti i dati archiviati nel file saranno cancellati?" & vbCrLf & vbCrLf & "Sicuro di voler proseguire?", vbYesNo)


Con un file che li richiama uno ad uno, ed un codice che attiva la macro contenente il codice sopracitato, vorrei evitare di dover pigiare manualmente "Si" ad ogni file.

Che codice dovrei inserire per fare in modo che ogni volta che appare quel codice il si venga digitato automaticamente?

Grazie a tutti.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Sponsor
 

Re: [vba]

Postdi ricky53 » 19/04/13 15:54

Ciao,
se tu digiti sempre SI a cosa serve il messaggio di avviso. Toglilo oppure c'è qualche altra informazione che non ci hai dato?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [vba]

Postdi riskismoney » 19/04/13 15:58

Ciao,
è ovvio che quei file servono anche ad altro. L'avviso mi serve per evitare di cancellare i dati per errore.
A volte però è necessario (in alcuni file) cancellare tutto e quindi se per esempio devo cancellare 50 file, devo digitare 50 volte si. Vorrei evitare questo.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi ricky53 » 19/04/13 16:07

Ciao,
e come si farebbe per sapere se su un certo file si deve rispondere SI oppure NO ?

Comunque io la vedo impossibile da realizzare ma ...
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [vba]

Postdi riskismoney » 19/04/13 16:10

La scelta dei file non è un problema... nella lista dei file da aprire/cancellare metto solo quelli che mi interessano... vuoi dire che non è possibile rispondere "automaticamente" ad un imput?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi ricky53 » 20/04/13 01:27

Ciao,
a mio avviso NON è possibile però ... non si sa mai: attendiamo qualche altro utente.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [vba]

Postdi riskismoney » 20/04/13 07:42

ricky53 ha scritto:Ciao,
a mio avviso NON è possibile però ... non si sa mai: attendiamo qualche altro utente.

Ciao ricky53 ma a tuo avviso non è possibile con quel tipo di imput o non è possibile con qualsiasi imput? Voglio dire cambiando il codice iniziale (per la conferma), sarebbe poi in qualche modo possibile?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi scossa » 20/04/13 13:28

riskismoney ha scritto:
ricky53 ha scritto:Ciao,
a mio avviso NON è possibile però ... non si sa mai: attendiamo qualche altro utente.

Ciao ricky53 ma a tuo avviso non è possibile con quel tipo di imput o non è possibile con qualsiasi imput? Voglio dire cambiando il codice iniziale (per la conferma), sarebbe poi in qualche modo possibile?


Secondo me ci sono due possibili soluzioni:
1) usare nel file che li richiama, l'istruzione SendKeys, prima dell'apertura dei singoli file, eviterebbe di modificare il codice dei singoli file, ma bisogna provarla.

2) cambiare la chiamata alla macro "contenente il codice sopracitato" passando un argomento opzionale, che se presente non faccia apparire l'inputbox.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [vba]

Postdi Anthony47 » 20/04/13 17:06

Vedi il messaggio di scossa, sopra.
Mi vien pero' da pensare che quel codice sia presente in una macro di WorkbookOpen; pertanto potresti impedirne l' esecuzione usando Application.EnableEvents=False da mettere prima della Open successiva.
Insomma, con grande schematizzazione:
Codice: Seleziona tutto
Application.enableEvents = False
For I=1 to 50
     Workbooks.open(NomiFile(I))
'     altre azioni
Next I
Application.enableEvents = True

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba]

Postdi riskismoney » 20/04/13 17:15

Riepiloghiamo un attimo:
Quel codice non è in Workbook_Open.

Il codice in cui è contenuto il pezzo il cui viene chiesta una conferma, di fatto quando lanciato cancella i dati presenti sul file (che sono tanti) e predispone il file per un nuovo utilizzo. Pertanto un imput in cui viene chiesto se effettivamente si vogliono cancellare i dati è necessario per evitare di perdere dati per un click errato.

Ciò detto, a volte mi è necessario cancellare i dati presenti su numerosi file e quindi servirebbe un modo per evitare quel pezzo di codice o per confermare la volontà di cancallere i dati in maniera automatica.

Se il problema è il messaggio di imput da cambiare va bene uguale....

Grazie ragazzi!
ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi Anthony47 » 20/04/13 17:25

Ma allora creati un altro file; in questo master file crea un elenco di file, poi una macro che li apre uno dopo l' altro, cancella i dati come fa la macro che oggi chiede una conferma, salva il file e lo chiude.

Che poi questo master file non venga lanciato a sproposito io non lo garantisco...

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba]

Postdi scossa » 20/04/13 17:28

Io ti ho proposto due possibili soluzioni.
Non avendo a disposizione i tuoi file, solo tu puoi provarle (se sei in grado di apportare le necessarie modifiche) e vedere se possono risolvere il tuo problema.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [vba]

Postdi riskismoney » 20/04/13 17:53

Antonhy, troppo complicato, seppur corretto il tuo suggerimento.
Scossa, non sono in grado di provare i tuoi suggerimenti.

Forse però non ho ben spiegato il problema, sinceramente pensavo fosse possibile una soluzione abbastanza semplice.
Provo a rispiegare, ogni singolo file contiene, semplificando, una macro di questo tipo:

Codice: Seleziona tutto
Sub Cancelladati()
Conferma = MsgBox("ATTENZIONE" & vbCrLf & vbCrLf & "Tutti i dati archiviati nel file saranno cancellati?" & vbCrLf & vbCrLf & "Sicuro di voler proseguire?", vbYesNo)
If Conferma = vbNo Then GoTo Esci

' QUI STA IL CODICE CHE CANCELLA TUTTO QUELLO CHE DEVE CANCELLARE

Esci:
End Sub


Quello che vorrei ottenere è un file che li apra uno ad uno (e che ho già) ed esegua il codice Cancelladati evitando il codice di conferma o rispondendo in modo affermativo.

Se il problema era stato ben compreso allora non sembrerebbero esserci soluzioni, nel qual caso dovrò cancellare il codice di conferma dai file.

Grazie, ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi Anthony47 » 20/04/13 18:04

Quello che vorrei ottenere è un file che li apra uno ad uno (e che ho già) ed esegua il codice Cancelladati evitando il codice di conferma o rispondendo in modo affermativo.

Allora
Codice: Seleziona tutto
Il codice che ne apre uno
QUI METTI IL CODICE CHE CANCELLA TUTTO QUELLO CHE DEVE CANCELLARE
Chiudi il file uno
Passi al prossimo file

Perche' dici "troppo complicato"?
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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [vba]

Postdi riskismoney » 20/04/13 18:10

Anthony47 ha scritto:
Quello che vorrei ottenere è un file che li apra uno ad uno (e che ho già) ed esegua il codice Cancelladati evitando il codice di conferma o rispondendo in modo affermativo.

Allora
Codice: Seleziona tutto
Il codice che ne apre uno
QUI METTI IL CODICE CHE CANCELLA TUTTO QUELLO CHE DEVE CANCELLARE
Chiudi il file uno
Passi al prossimo file

Perche' dici "troppo complicato"?

Ma si Anthony è chiaro... ma è complicata poi la gestione.
Comunque non importa, se non si può evitare quel messaggio di conferma la cosa più logica è cancellarlo.
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi scossa » 20/04/13 18:30

riskismoney ha scritto:Scossa, non sono in grado di provare i tuoi suggerimenti.


Per capire cosa intendo, prova questa sub:

Codice: Seleziona tutto
Public Sub prova()
  Dim vRet As VbMsgBoxResult
 
  vRet = MsgBox("prova", vbYesNo)
  SendKeys "S" '"{ENTER}"
  MsgBox "uno", vbYesNo
  MsgBox "due", vbYesNo
 
End Sub


oppure:
Codice: Seleziona tutto
Public Sub prova2()
  Dim vRet As VbMsgBoxResult
 
  SendKeys "S" '"{ENTER}"
  vRet = MsgBox("prova", vbYesNo)
  MsgBox "hai scelto " & vRet
  SendKeys "N" '"{ENTER}"
  vRet = MsgBox("prova", vbYesNo)
  MsgBox "hai scelto " & vRet
 
End Sub
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [vba]

Postdi riskismoney » 20/04/13 19:28

Scossa ho provato i tuoi codici di prova, ma non capisco come possono essermi utili.
Puoi spiegarmi meglio per favore?
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi scossa » 20/04/13 19:51

riskismoney ha scritto:Scossa ho provato i tuoi codici di prova, ma non capisco come possono essermi utili.
Puoi spiegarmi meglio per favore?


Hai detto:
riskismoney ha scritto:Quello che vorrei ottenere è un file che li apra uno ad uno (e che ho già) ed esegua il codice Cancelladati evitando il codice di conferma o rispondendo in modo affermativo.


Metti subito prima della chiamata di Cancelladati() l'istruzione SendKeys "S"

Non posso garantire che il tasto sia ancora nel buffer, prima che venga eseguita la chiamata del MsgBox, devi verificarlo tu.

Comunque, se non ci mostri il "... codice che attiva la macro contenente il codice sopracitato" cioè il codice che attiva la macro Cancelladati(), non so come altro aiutarti.
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: [vba]

Postdi riskismoney » 20/04/13 20:10

scossa ha scritto:
Metti subito prima della chiamata di Cancelladati() l'istruzione SendKeys "S"

Non posso garantire che il tasto sia ancora nel buffer, prima che venga eseguita la chiamata del MsgBox, devi verificarlo tu.

Comunque, se non ci mostri il "... codice che attiva la macro contenente il codice sopracitato" cioè il codice che attiva la macro Cancelladati(), non so come altro aiutarti.


Visto che era semplice :)
Siiiiiiiii... funziona alla grande, grazie scossa, grazie a tutti. :)
Ciao
riskismoney
Utente Senior
 
Post: 177
Iscritto il: 25/03/12 16:04

Re: [vba]

Postdi Anthony47 » 21/04/13 00:48

Scusa, ma tu hai un file con quel codice o centinaia di file con quel codice?
E poi: ma se puoi aggiungere l'istruzione SendKeys "S" allora puoi anche togliere la riga Conferma = MsgBox(Etc etc)...
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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti