Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 2 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Errore esecuzione macro

Ultimo Aggiornamento: 11/10/2023 09:04
Post: 112
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
08/10/2023 18:23

Buongiorno, volevo un consiglio su un errore che ricevo durante l'esecuzione di una macro in excel. Si tratta di una macro che provvede a cancellare i dati in determinati intervalli di diversi fogli. Operazione che mi serve per ripristinare le condizioni di partenza di un file per un nuovo utilizzo.
Il codice (una porzione, che poi si replica per tutti i fogli contenuti nella cartella) è il seguente:

Sub CancellaAssenze()
'
' CancellaDati Macro
' Elimina tutti i dati in tutti i fogli
'
conferma = MsgBox("Sicuro di voler cancellare tutti i dati?...", vbYesNo)
If conferma = 6 Then
Application.ScreenUpdating = False
Sheets("Gennaio").Select
Range("D3:I39,O3:O76,Q3:Q76,S3:S76,U3:U76,W3:W76,Y3:Y76,AA3:AA76,AC3:AC76,AE3:AE76,AG3:AG76,AI3:AI76,AK3:AK76").Select
Selection.ClearContents
Selection.ClearComments
Range("D3").Select
.
.
.
Application.ScreenUpdating = True
End If

End Sub

I fogli sono nominati da Gennaio a Dicembre. L'esecuzione si interrompe con il messaggio "Errore di run-time '1004': Errore definito dall'applicazione o dall'oggetto" quando si arriva alla riga 'Range'.
Qualcuno può darmi un suggerimento? Grazie
Excel 2007 e 2010
Post: 4.961
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 18:42

Devi allegare il file con il codice completo con il solo codice non si fa nulla
[Modificato da alfrimpa 08/10/2023 18:47]

Alfredo
Post: 112
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
08/10/2023 18:51

Ecco il file (solo uno dei fogli, ma sono identici per tutti i mesi dell'anno).
Gli intervalli che voglio ripulire, per inserire i dati dell'anno successivo, sono quelli evidenziati in giallo (non, naturalmente, le intestazioni delle tabelle!)
Excel 2007 e 2010
Post: 790
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
08/10/2023 19:57

ma nel file la macro è sparita ?
o mi sfugge qualcosa...
Leo
[Modificato da L2018 08/10/2023 20:04]

LEO
https://t.me/LordBrum
Post: 4.962
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 20:05

E tra l’altro occorre un ciclo For che esegua le medesime istruzioni su tutti i fogli

Alfredo
Post: 791
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
08/10/2023 20:20

io non mi intendo di vba ma ho provato a scrivere, in mancanza di tua macro,


VB
Sub pulire()
Range("d3:i39").ClearContents
Range("D3:I39,O3:O76,Q3:Q76,S3:S76,U3:U76,W3:W76,Y3:Y76,AA3:AA76,AC3:AC76,AE3:AE76,AG3:AG76,AI3:AI76,AK3:AK76").ClearContents
End Sub


e questa cosuccia ha funzionato senza intoppi, quindi ? manca la macro per controllare, ma lo farà qualcun altro

Leo

LEO
https://t.me/LordBrum
Post: 113
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
08/10/2023 20:26

Scusatemi non sono proprio un esperto...
Succede qualcosa di strano. Se eseguo la macro in una cartella con un solo foglio, la macro funziona. Se la eseguo aggiungendo fogli per gli altri mesi la macro si blocca al secondo foglio (!) Non capisco perchè, dato che la stessa macro funzionava in un altro file con la stessa struttura di fogli.
Comunque allego il file con due fogli, il pulsante e la macro.
Vi ringrazio per il tempo che mi dedicate
Excel 2007 e 2010
Post: 792
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
08/10/2023 20:27

naturalmente anch'io ho commesso un errore: non ho usato la brillantina Linetti, perchè in N3:N76 ci sono delle formule, e non so l'effetto che fa, ovviamente intervenga uno bravo

Ciao

Leo

LEO
https://t.me/LordBrum
Post: 4.963
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 21:28

Un esempio

vb
Sub Pulisci()
Dim i as Integer
For i = 1 to Sheets.Count
     Sheets(i).Range(“A1:A10, C1:C10”).ClearContents 
Next i
End Sub


La macro cancella gli intervalli A1:A10 e C1:C10 di tutti i fogli della cartella.

Alfredo
Post: 3.099
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
08/10/2023 21:32

ciao
ciao Al
dimmi come ti sembra

Sub CancellaAssenze()
Dim xWs As Worksheet
Set xWs = ActiveSheet
ThisWorkbook.Worksheets.Select
Range("D3:I39,O3:O76,Q3:Q76,S3:S76,U3:U76,W3:W76,Y3:Y76,AA3:AA76,AC3:AC76,AE3:AE76,AG3:AG76,AI3:AI76,AK3:AK76").Select
Selection.ClearContents
xWs.Select

End Sub

Post: 4.964
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 21:38

Gianfranco francamente non la capisco.

Se me la spieghi.

Alfredo
Post: 3.100
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
08/10/2023 21:50

ciao
semplice
seleziona tutti i fogli e cancella il range dichiarato

semplice eh!🤣
Post: 4.965
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 21:52

Se l’hai provata e funziona va benissimo.

Non sapevo si potesse fare pure così

Alfredo
Post: 3.101
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Master
365
OFFLINE
08/10/2023 22:00

ciao
certo che funziona
anche se preferisco la tua😉

ehi!
cambia la versione nel tuo profilo tu hai il 365😛
[Modificato da federico460 08/10/2023 22:01]
Post: 4.966
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
08/10/2023 22:07

Qui non mi ricordo come si fa

Alfredo
Post: 793
Registrato il: 02/04/2018
Città: PESCARA
Età: 75
Utente Senior
EXCEL 2016 - SPREAD32
OFFLINE
08/10/2023 22:45

@Alfrimpa

lì in alto a destra clicca sul tuo username, e in basso puoi cambiare le cose

Leo

LEO
https://t.me/LordBrum
Post: 4.967
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
09/10/2023 08:25

Grazie Leo

Alfredo
Post: 114
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
09/10/2023 08:39

Grazie Alfredo, grazie Federico, le vostre routine andrebbero bene. L'unico problema è che per uno dei fogli della cartella gli intervalli differiscono. Ovvero, da D3:D39, diventa D7:D43 e tutti gli altri da O3:O76, ecc., ecc a O7:O80. In pratica le tabelle sono spostate di 4 righe in basso.
Allego file con la situazione reale. Gennaio (e tutti gli altri 10 mesi, escluso febbraio presentano gli stessi intervalli, Febbraio ha le tabelle spostate in basso di 4 righe.
Grazie ancora per l'aiuto
Excel 2007 e 2010
Post: 7.375
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
09/10/2023 09:02

Ciao vi è un errore madornale, la macro è stata inserita nel foglio del mese di Gennaio, non è stato creato un modulo per la macro che cancella i dati da tutti i fogli, è li che va messa, altrimenti va in errore.

ho creato i modulo e creata la macro eccola:

Sub Assenze()
Dim r, c, d, x, y, ar, risp, sh As Worksheet

risp = MsgBox("Attenzione Sicuro di voler cancellare i dati", vbCritical + vbYesNo, "Cancellazione dati")
If risp = 7 Then Exit Sub
ar = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
Application.ScreenUpdating = False
On Error GoTo 1 'inserito in mancanza di fogli mese se sono presenti tutti i mesi togliere
For x = 0 To 11
  d = ar(x)
  Set sh = Worksheets(d)
  sh.Activate
  With sh.Range("D3:I39")
    .ClearContents
    .ClearComments
  End With
  For y = 15 To 37 Step 2
    With sh.Range(Cells(3, y), Cells(76, y))
      .ClearContents
      .ClearComments
    End With
  Next y
1 Next x 'togliere 1 con presenza di tutti i mesi
d = "Gennaio"
Set sh = Worksheets(d)
sh.Activate
sh.Cells(1, 1).Select
Application.ScreenUpdating = True
MsgBox "Operazione terminata", vbInformation, "Cancella dati"
End Sub


ho creato anche i 12 mesi duplicando il mese di Febbraio, per vedere il funzionamento, allego anche il file, ho inserito un controllo errore nel caso manca qualche mese

clicca sulla freccia rossa in Gennaio

Gianfranco la tua macro andrebbe bene, se ci fossero solamente i 12 mesi, ma ammetti che ci siano altri fogli ti cancellerebbe lo stesso intervallo anche sul foglio che non interessa.

Ciao By Sal (8-D
[Modificato da by sal 09/10/2023 09:03]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 115
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
09/10/2023 10:45

Buongiorno Sal, fantastica la tua macro!
Data la mia scarsa esperienza in VB, non riesco a capire se la tua macro tiene conto del fatto che uno dei fogli presenta le tabelle in intervalli spostati di 4 righe in basso (nel mio file sarebbe il mese di settembre, ma questo non credo che abbia importanza ai fini della predisposizione della macro).
Grazie per sempre
Excel 2007 e 2010
Post: 7.376
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
09/10/2023 11:16

Ciao, no cambia la tua riga in genere finisce alla 76, quindi il mese di settembre dovrebbe essere 80, e cosi?, al limite solo per il mese di Settembre lo fai Manualmente.

ma se mi confermi che a Settembre la riga è 80 modifico la macro e faccio in modo che si adegui di conseguenza quando trova Settembre.

ti ho aggiustato la macro, eccola ci sono i commenti dove sono intervenuto, se la riga non è 80 aggiusta k=80 alla riga esatta

Sub Assenze()
Dim r, c, d, x, y, k, ar, risp, sh As Worksheet

risp = MsgBox("Attenzione Sicuro di voler cancellare i dati", vbCritical + vbYesNo, "Cancellazione dati")
If risp = 7 Then Exit Sub
ar = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
Application.ScreenUpdating = False
On Error GoTo 1 'inserito in mancanza di fogli mese se sono presenti tutti i mesi togliere
For x = 0 To 11
  d = ar(x)
  If d = "Settembre" Then k = 80 Else k = 76 'nuovo inserimento
  Set sh = Worksheets(d)
  sh.Activate
  With sh.Range("D3:I39")
    .ClearContents
    .ClearComments
  End With
  For y = 15 To 37 Step 2
    With sh.Range(Cells(3, y), Cells(k, y)) 'riga modificata
      .ClearContents
      .ClearComments
    End With
  Next y
1 Next x 'togliere 1 con presenza di tutti i mesi
d = "Gennaio"
Set sh = Worksheets(d)
sh.Activate
sh.Cells(1, 1).Select
Application.ScreenUpdating = True
MsgBox "Operazione terminata", vbInformation, "Cancella dati"
End Sub


Ciao By Sal (8-D
[Modificato da by sal 09/10/2023 11:56]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 116
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
09/10/2023 12:28

Grazie ancora Sal...
Perdona la mia insicurezza, dato che non riesco a decifrare del tutto la tua macro.
Con la modifica che hai fatto si considera che non solo gli intervalli O3:O76, Q3:Q76..., per Settembre, diventano O7:O80, Q7:Q80,..., ma anche l'intervallo D3:I39 diventa D7:I43?
N
Excel 2007 e 2010
Post: 7.377
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
09/10/2023 15:15

Ciao Mi dici una cosa alla volta, ecco la macro modificata anche per l'intervallo "D7:I43"

Sub Assenze()
Dim r, c, d, x, y, k, m, n, ar, risp, sh As Worksheet

risp = MsgBox("Attenzione Sicuro di voler cancellare i dati", vbCritical + vbYesNo, "Cancellazione dati")
If risp = 7 Then Exit Sub
ar = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
Application.ScreenUpdating = False
On Error GoTo 1 'inserito in mancanza di fogli mese se sono presenti tutti i mesi togliere
For x = 0 To 11
  d = ar(x)
  If d = "Settembre" Then k = 80: n = 7: m = 43 Else k = 76:: n = 3: m = 39 'nuovo inserimento
  Set sh = Worksheets(d)
  sh.Activate
  With sh.Range("D" & n & ":I" & m) 'riga modificata
    .ClearContents
    .ClearComments
  End With
  For y = 15 To 37 Step 2
    With sh.Range(Cells(3, y), Cells(k, y)) 'riga modificata
      .ClearContents
      .ClearComments
    End With
  Next y
1 Next x 'togliere 1 con presenza di tutti i mesi
d = "Gennaio"
Set sh = Worksheets(d)
sh.Activate
sh.Cells(1, 1).Select
Application.ScreenUpdating = True
MsgBox "Operazione terminata", vbInformation, "Cancella dati"
End Sub


Ciao By Sal (8-D
[Modificato da by sal 09/10/2023 15:17]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 117
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
09/10/2023 16:25

Grazie ancora Sal, ma in realtà l'avevo scritto in uno dei miei messaggi, poco sopra le tue risposte. Sorry, in ogni caso.
Excel 2007 e 2010
Post: 7.378
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
09/10/2023 16:33

Mi sono accorto di un errore nella macro, la riga

If d = "Settembre" Then k = 80: n = 7: m = 43 Else k = 76:: n = 3: m = 39 'nuovo inserimento

ci sono 2 doppi-punti consecutivi dopo 76 devi eliminarne uno, in questo modo

If d = "Settembre" Then k = 80: n = 7: m = 43 Else k = 76: n = 3: m = 39 'nuovo inserimento


Ciao By Sal (8-D
[Modificato da by sal 09/10/2023 16:34]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 118
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
09/10/2023 19:16

Grazie Sal. Corretto.
C'è però un altro problema: la macro si interrompe quando raggiunge il foglio di Ottobre.
Cancella i dati fino al foglio Settembre, ma non agisce sui restanti fogli... Che può essere?... E' come se una volta giunto al mese che fa eccezione la routine non ritorna alle impostazioni usate per i fogli precedenti...Ma io faccio solo ipotesi (probabilmente peregrine!)
Excel 2007 e 2010
Post: 7.379
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
10/10/2023 07:30

Ciao Prima che ti correggevo la macro per settembre passava tutti i mesi?
fai questa prova correggi questa riga

If d = "Settembre" Then k = 80: n = 7: m = 43 Else k = 76: n = 3: m = 39 'nuovo inserimento

in

If d = "Settembre" Then goto 1


salta il mese di settembre e vediamo se fa gli altri mesi

mi sembr strano, sicuro che i mesi di Ottobre, Novembre, Dicembre, siano scritti correttamente cioè non abbiano spazi avanti o dietro al nome.

dovrei vedere il foglio originale per rendermi conto della cosa

Ciao By Sal (8-D
[Modificato da by sal 10/10/2023 07:30]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 119
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
10/10/2023 09:18

Ho fatto tutte le prove con il file da te predisposto, quindi i nomi sono scritti bene (ho verificato). La macro non funzionava già nella prima versione; con la modifica cancellava fino al mese di settembre; ora si blocca all'istruzione che mi hai suggerito (If d = "Settembre" Then GoTo 1... ma dov'è il riferimento 1 a cui passare?). Comunque ti mando il codice completo così come mi è sembrato mi chiedessi da modificare:

Sub Assenze()
Dim r, c, d, x, y, k, m, n, ar, risp, sh As Worksheet

risp = MsgBox("Attenzione Sicuro di voler cancellare i dati", vbCritical + vbYesNo, "Cancellazione dati")
If risp = 7 Then Exit Sub
ar = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
Application.ScreenUpdating = False
' On Error GoTo 1 'inserito in mancanza di fogli mese se sono presenti tutti i mesi togliere
For x = 0 To 11
d = ar(x)
If d = "Settembre" Then GoTo 1
' If d = "Settembre" Then k = 80: n = 7: m = 43 Else k = 76: n = 3: m = 39 'nuovo inserimento
Set sh = Worksheets(d)
sh.Activate
With sh.Range("D" & n & ":I" & m) 'riga modificata
.ClearContents
.ClearComments
End With
For y = 15 To 37 Step 2
With sh.Range(Cells(3, y), Cells(k, y)) 'riga modificata
.ClearContents
.ClearComments
End With
Next y
Next x
' 1 Next x 'togliere 1 con presenza di tutti i mesi
d = "Gennaio"
Set sh = Worksheets(d)
sh.Activate
sh.Cells(1, 1).Select
Application.ScreenUpdating = True
MsgBox "Operazione terminata", vbInformation, "Cancella dati"
End Sub

Grazie di tutto
Excel 2007 e 2010
Post: 7.381
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
10/10/2023 10:35

Ciao Questa la macro da eseguire

Sub Assenze()
Dim r, c, d, x, y, k, m, n, ar, risp, sh As Worksheet
 
risp = MsgBox("Attenzione Sicuro di voler cancellare i dati", vbCritical + vbYesNo, "Cancellazione dati")
If risp = 7 Then Exit Sub
ar = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
Application.ScreenUpdating = False
On Error GoTo 1 'inserito in mancanza di fogli mese se sono presenti tutti i mesi togliere
For x = 0 To 11
  d = ar(x)
  If d = "Settembre" Then goto 1
  k = 76: n = 3: m = 39 
  Set sh = Worksheets(d)
  sh.Activate
  With sh.Range("D" & n & ":I" & m) 'riga modificata
    .ClearContents
    .ClearComments
  End With
  For y = 15 To 37 Step 2
    With sh.Range(Cells(3, y), Cells(k, y)) 'riga modificata
      .ClearContents
      .ClearComments
    End With
  Next y
1 Next x
d = "Gennaio"
Set sh = Worksheets(d)
sh.Activate
sh.Cells(1, 1).Select
Application.ScreenUpdating = True
MsgBox "Operazione terminata", vbInformation, "Cancella dati"
End Sub


questa macro salta il mese di Settembre, mi serve per capire se fa anche i mesi da Ottobre a Dicembre, oppure la macro non li fa, e quindi sarebbe un problema della macro, altrimenti sarà qualche altra cosa.

poi vediamo come fare Settembre, lo posso far fare anche singolarmente, non è un problema, l'importante che faccia da Ottobre a Dicembre, visto che fino ad Agosto li fa.

Ciao By Sal (8.D


[Modificato da by sal 10/10/2023 10:35]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 120
Registrato il: 07/03/2008
Città: MILANO
Età: 30
Utente Junior
2016 Pro Plus 2016
OFFLINE
10/10/2023 15:21

Perfetto Sal! Ora cancella tutti i mesi tranne settembre... 🍾
Excel 2007 e 2010
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 04:25. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com