Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Semplificazione di una macro

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

Semplificazione di una macro

Postdi Rossi Vincenzo » 13/10/09 09:40

Ho realizzato questa macro, funziona bene.E segue un calendario perpetuo.
Volevo gentilmente chiedervi se fosse possibile semplificare l'istruzione
per alcune giornate.Infatti il lavoro è simile e quindi inserendo nella
macro questa istruzione a=b=c=X la macro non va, e sono costretto
ad elencare nonstante sia uguale il lavoro da realizzare tutta la settimana

Quindi cerco una forma corretta fare per quei giorni???? Grazie

Sub GiornataDiLavoro()

'Prima Giornata
Sheets("Foglio1").Select
Application.ScreenUpdating = False 'serve per evitare i saltellamenti a schermo

Dim CEL As Object 'dichiariamo CEL come "Oggetto"
Set zona = Range("B10") 'campo entro cui ricercare la giornata
'assegnazioni delle variabili in questo caso le giornate
a = "lun" '
b = "mar" '
c = "mer" '
D = "gio" '
e = "ven" '
f = "sab" '
g = "dom" '

'a=b=c=X 'qui inserivo l'istruzione e sostituivo If CEL=X Then ma non va

For Each CEL In zona 'per ogni CEL( Oggetto cella) nel Range "zona"
If CEL = a Then 'Lunedì
Range("BC10:BI12").Select 'si selezionano l'intervallo da copiare
Selection.Copy 'si copia in memoria la selezione
Range("D10").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

ElseIf CEL.value = b Then 'Martedì
Range("BC10:BI12").Select 'si selezionano l'intervallo da copiare
Selection.Copy 'si copia in memoria la selezione
Range("D10").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False



ElseIf CEL.value = f Then 'Sabato
Range("BC10:BI12").Select 'si selezionano l'intervallo da copiare
Selection.Copy 'si copia in memoria la selezione
Range("D10").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
CEL.Font.ColorIndex = 21

ElseIf CEL.value = g Then 'Domenica
Range("BC13:BI13").Select 'si selezionano tutte le celle della stessa riga che
'vanno dalla CEL attiva, cioè A1 fino alla cella dodicesima AB1
Selection.Copy 'si copia in memoria la selezione
Range("D13").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
CEL.Font.ColorIndex = 3
End If

Next 'e si continua il ciclo sulla cella successiva fino alla fine di "zona"
Application.CutCopyMode = False 'elimina il tratteggio intorno alle celle copiate

'Application.Run "GiornataDiLavoro2"
Rossi Vincenzo
Utente Junior
 
Post: 35
Iscritto il: 28/04/09 14:11

Sponsor
 

Re: Semplificazione di una macro

Postdi pietrol » 13/10/09 15:03

Ciao Rossi Vincenzo
se ho ben capito, tutto uguale da lunedi a venerdi e sabato in più solo il colore del font, potrebbe essere così:
Codice: Seleziona tutto
Sub GiornataDiLavoro()

'Prima Giornata
Sheets("Foglio1").Select
Application.ScreenUpdating = False 'serve per evitare i saltellamenti a schermo

Dim CEL As Object 'dichiariamo CEL come "Oggetto"
Set zona = Range("B10") 'campo entro cui ricercare la giornata
'assegnazioni delle variabili in questo caso le giornate
a = "lun" '
b = "mar" '
c = "mer" '
D = "gio" '
e = "ven" '
f = "sab" '
g = "dom" '

'a=b=c=X 'qui inserivo l'istruzione e sostituivo If CEL=X Then ma non va

For Each CEL In zona 'per ogni CEL( Oggetto cella) nel Range "zona"
    If CEL <> g Then 'non Domenica
        Range("BC10:BI12").Select 'si selezionano l'intervallo da copiare
        Selection.Copy 'si copia in memoria la selezione
        Range("D10").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
        If CEL.Value = f Then 'Sabato
            CEL.Font.ColorIndex = 21
        End If
   
    ElseIf  'Domenica
        Range("BC13:BI13").Select 'si selezionano tutte le celle della stessa riga che
        'vanno dalla CEL attiva, cioè A1 fino alla cella dodicesima AB1
        Selection.Copy 'si copia in memoria la selezione
        Range("D13").Select 'la selezioniamo ed incolliamo ciò che è stato copiato
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        CEL.Font.ColorIndex = 3
    End If
   
    Next 'e si continua il ciclo sulla cella successiva fino alla fine di "zona"
    Application.CutCopyMode = False 'elimina il tratteggio intorno alle celle copiate
   
    'Application.Run "GiornataDiLavoro2"
Next
End Sub

Non ho però capito perchè usi un ciclo FOR quando il range "zona" è di una sola cella, anche se non hai pubblicato tutta la macro credo si possa evitare.

Fai sapere

ciao
pietrol
il lupo ululà, il castello ululì
pietrol
Utente Senior
 
Post: 270
Iscritto il: 07/01/09 14:34

Re: Semplificazione di una macro

Postdi Anthony47 » 13/10/09 17:39

Ciao Vincenzo e benvenuto nel forum.
Leggi il messaggio di pietrol sopra questo con delle domande che condivido; come ulteriore semplificazione dovrebbe andare bene anche questa:
Codice: Seleziona tutto
If CEL.value = g Then 'Domenica
MyRan="BC13:BI13"
MyDest="D13"
Else
MyRan="BC10:BI10"
MyDest="D10"
End if
Range(MyRan).copy
Range(MyDest).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
If CEL.value=g then CEL.Font.ColorIndex = 3
If CEL.value=f then CEL.Font.ColorIndex = 21

E se non hanno altro uso, eviterei le variabili a-g scrivendo direttamente "dom" e "sab" all' interno delle istruzioni che usano tali variabili.

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: Semplificazione di una macro

Postdi Rossi Vincenzo » 14/10/09 17:26

Mi scuso con l'intera comunità per il mancato saluto.
Sono un autodidatta, pertanto non ho ancora raggiunto un
sufficiente grado di preparazione.Mi avvalgo di quello che
riesco a carpire dai vostri elaborati.
Siamo 66 agenti e disposti in 66gg diversi e il sabato
e la domenica ci sono delle variazioni, che le evidenzio
in verde e in rosso per i festivi.
Ho usato il ciclo for perchè applico quello che fin ora sono
riuscito a mettere insieme di mio.
Sono curioso adesso per l'istruzione fornitami da Anthony provo ad applicarla.
Siete fantastici e molto umili.Ho appreso molto da voi spero di continuare.
Altre istruzioni non li conosco ancora bene.
Rossi Vincenzo
Utente Junior
 
Post: 35
Iscritto il: 28/04/09 14:11

Re: Semplificazione di una macro

Postdi Rossi Vincenzo » 14/10/09 17:56

Ho applicato l'istruzione fornitami da Pietrol gira benissimo.

Mentre quella di Anthony mi causa errore di Run time 91 "variabile
oggetto o variabile del blocco with non impostata"

Grazie comunque siete formidabili

P.S. se avete qualche altro consiglio in merito ne sarei tantissimo grato.

A presto
Rossi Vincenzo
Utente Junior
 
Post: 35
Iscritto il: 28/04/09 14:11


Torna a Applicazioni Office Windows


Topic correlati a "Semplificazione di una macro":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti