Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Copia di fogli in altro file Opzioni
aetio
Inviato: Saturday, January 25, 2014 9:30:34 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
devo risolvere il mio attuale problema:
-ho 4 file excel aperti (il 1^ file nominato PRIMO_FILE)
-il 4^ file è attivo
dovrei adattare questa macro

Sub colora ()
Dim ws As Worksheet
For n = 4 To Worksheets.Count
With Sheets(n)
Set Rng = .UsedRange
For Each cl In Rng
If cl.Interior.ColorIndex = 3 Then
.Tab.Color = 255
Exit For
End If
Next
End With
Set Rng = Nothing
Next
End Sub

affinché trovi se, dal 4^ foglio all’ultimo del file attivo, ce n’è uno o più con le celle colorate di rosso; in caso affermativo copi tali fogli nel PRIMO_FILE, dopo il suo 1^ foglio, e riprenda la ricerca nel 4^ file continuandola dal punto in cui era rimasto al momento della copia.

A intuito credo che si debba agire nella riga
.Tab.Color = 255
della sub, scrivendo un codice o una chiamata (Call di altra sub contenete i riferimenti) in modo che al verificarsi di tale condizione (If cl.Interior.ColorIndex = 3) il foglio che la contiene venga copiato nel 2^ foglio del PRIMO_FILE
In volgare villano, tale sub potrebbe contenere (il condizionale è obbligatorio) un codice come questo:
Activesheet.Copy After:=Workbooks( _
"PRIMO_FILE.xlsm").Sheets(1)

che ovviamente andrebbe scritto in modo esatto.
Sicuramente la soluzione è assai più elegante, ma non riesco proprio a scriverla :-))
Grazie assai, buona giornata
eZio
Sponsor
Inviato: Saturday, January 25, 2014 9:30:34 AM

 
a10n11
Inviato: Saturday, January 25, 2014 10:25:53 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
prova questa (Macro nel 4 File)

Sub CopiaColori()
Dim WB1 As Workbook
Dim WB As Workbook
Set WB1 = ActiveWorkbook
Set WB = Workbooks("PRIMO_FILE.xlsx")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
If .Tab.Color = 255 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
End If
End With
Next
Set WB = Nothing
Set WB1 = Nothing
End Sub

saluti
Giap

aetio
Inviato: Saturday, January 25, 2014 11:20:06 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
la tua velocità nel dare la soluzione è sorprendente...!!
la macro lavora senza dare errori, ma non copia il foglio nel PRIMO_FILE.
Empiricamente ho colorato di rosso (che nella sub è definito 255) la linguetta del foglio (nel 4^ file) che dovrebbe copiare nel PRIMO_FILE, col risultato che l'ha copiato.
Forse nel gruppo di istruzioni
With WB1.Sheets(n)
If .Tab.Color = 255 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
End If
End With
si dovrebbe cambiare l'istruzione della riga
If .Tab.Color = 255 Then
che era nella macro di apertura del 3d (che si riferiva alla colorazione della liguetta del foglio)?
Grazie assai,
eZio
a10n11
Inviato: Saturday, January 25, 2014 11:34:10 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
la tua velocità nel dare la soluzione è sorprendente...!!
la macro lavora senza dare errori, ma non copia il foglio nel PRIMO_FILE.
Empiricamente ho colorato di rosso (che nella sub è definito 255) la linguetta del foglio (nel 4^ file) che dovrebbe copiare nel PRIMO_FILE, col risultato che l'ha copiato.
Forse nel gruppo di istruzioni
With WB1.Sheets(n)
If .Tab.Color = 255 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
End If
End With
si dovrebbe cambiare l'istruzione della riga
If .Tab.Color = 255 Then
che era nella macro di apertura del 3d (che si riferiva alla colorazione della liguetta del foglio)?
Grazie assai,
eZio


salve
con il foglio che ha la Tab colorata attivo, attiva la finestra immediata in vba (menù visualizza>finestra mimmediata)
digita nell'area "immediata" : ?ActiveSheet.Tab.Color
e dai invio

guarda il valoreche restituisce
saluti
Giap

aetio
Inviato: Saturday, January 25, 2014 1:46:00 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:

con il foglio che ha la Tab colorata attivo, attiva la finestra immediata in vba (menù visualizza>finestra mimmediata)
digita nell'area "immediata" : ?ActiveSheet.Tab.Color
e dai invio

guarda il valoreche restituisce


restituisce
Falso




Grazie assai,
eZio
a10n11
Inviato: Saturday, January 25, 2014 5:02:49 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,

restituisce
Falso




Grazie assai,
eZio


salve
se restituisce Falso significa che il foglio attivo non ha la linguetta colorata
saluti
Giap

aetio
Inviato: Saturday, January 25, 2014 6:40:05 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:

se restituisce Falso significa che il foglio attivo non ha la linguetta colorata

E' giusto che il foglio attivo non abbia la linguetta colorata.
La macro deve trovare nei fogli del 4^ file (dal 4^ foglio all'ultimo) se ve n'è uno con celle colorate di rosso (255). Se lo trova copia quel foglio (o quei fogli se ne trova più di uno) nel file PRIMO_FILE e si riposiziona nel 4^ file nel punto in cui ha effettuato l'operazione per continuare il suo lavoro.
Grazie assai, anche per la tua immensa pazienza. Buona serata.
eZio
a10n11
Inviato: Sunday, January 26, 2014 10:51:43 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,
a10n11 ha scritto:

se restituisce Falso significa che il foglio attivo non ha la linguetta colorata

E' giusto che il foglio attivo non abbia la linguetta colorata.
La macro deve trovare nei fogli del 4^ file (dal 4^ foglio all'ultimo) se ve n'è uno con celle colorate di rosso (255). Se lo trova copia quel foglio (o quei fogli se ne trova più di uno) nel file PRIMO_FILE e si riposiziona nel 4^ file nel punto in cui ha effettuato l'operazione per continuare il suo lavoro.
Grazie assai, anche per la tua immensa pazienza. Buona serata.
eZio


salve
quello che ti avevo suggerito, serviva per capire quale colore fosse assegnato alla linguetta del foglio, quindi devi ripetere l'operazione
rendendo attivo il foglio che ha la linguetta colorata.
saluti
Giap

aetio
Inviato: Sunday, January 26, 2014 11:34:37 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:

quello che ti avevo suggerito, serviva per capire quale colore fosse assegnato alla linguetta del foglio, quindi devi ripetere l'operazione
rendendo attivo il foglio che ha la linguetta colorata.

chiedo scusa, forse mi sono espresso male, ma in questi file non ho fogli con linguette colorate; ho fogli con celle colorate di rosso che la macro individua, copiando tali fogli nel file PRIMO_FILE.
Credo che nella macro

Sub CopiaColori()
Dim WB1 As Workbook
Dim WB As Workbook
Set WB1 = ActiveWorkbook
Set WB = Workbooks("PRIMO_FILE.xlsx")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
If .Tab.Color = 255 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
End If
End With
Next
Set WB = Nothing
Set WB1 = Nothing
End Sub

l'errore risieda nella riga
If .Tab.Color = 255 Then
che dà come condizione la linguetta colorata, mentre dovrebbe dare la presenza, nel foglio, di celle colorate di rosso seguendo la logica
With WB1.Sheets(n)
Set Rng = .UsedRange
For Each cl In Rng
If cl.Interior.ColorIndex = 3 Then
.Copy After:=WB.Sheets(cnt)


Ho provato a scrivere questa macro adattando i codici
Sub zCopia_Foglio()
Dim WB1 As Workbook
Dim WB As Workbook
Dim ws As Worksheet
Set WB1 = ActiveWorkbook
Set WB = Workbooks("STUDIO_2-REGIA.xlsm")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
Set rng = .UsedRange
For Each cl In rng
If cl.Interior.ColorIndex = 3 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
Exit For
End If
Next
End With
Set rng = Nothing
Set WB = Nothing
Set WB1 = Nothing
Next
End Sub

ma restituisce Errore di run-time '91' : Variabile oggetto o variabile del bolcco With non impostata
la riga colorata di giallo è
With WB1.Sheets(n)

Grazie assai,
eZio
a10n11
Inviato: Sunday, January 26, 2014 5:02:17 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
aetio ha scritto:
Ciao,

chiedo scusa, forse mi sono espresso male, ma in questi file non ho fogli con linguette colorate; ho fogli con celle colorate di rosso che la macro individua, copiando tali fogli nel file PRIMO_FILE.
Credo che nella macro

Sub CopiaColori()
Dim WB1 As Workbook
Dim WB As Workbook
Set WB1 = ActiveWorkbook
Set WB = Workbooks("PRIMO_FILE.xlsx")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
If .Tab.Color = 255 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
End If
End With
Next
Set WB = Nothing
Set WB1 = Nothing
End Sub

l'errore risieda nella riga
If .Tab.Color = 255 Then
che dà come condizione la linguetta colorata, mentre dovrebbe dare la presenza, nel foglio, di celle colorate di rosso seguendo la logica
With WB1.Sheets(n)
Set Rng = .UsedRange
For Each cl In Rng
If cl.Interior.ColorIndex = 3 Then
.Copy After:=WB.Sheets(cnt)


Ho provato a scrivere questa macro adattando i codici
Sub zCopia_Foglio()
Dim WB1 As Workbook
Dim WB As Workbook
Dim ws As Worksheet
Set WB1 = ActiveWorkbook
Set WB = Workbooks("STUDIO_2-REGIA.xlsm")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
Set rng = .UsedRange
For Each cl In rng
If cl.Interior.ColorIndex = 3 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
Exit For
End If
Next
End With
Set rng = Nothing
Set WB = Nothing
Set WB1 = Nothing
Next
End Sub

ma restituisce Errore di run-time '91' : Variabile oggetto o variabile del bolcco With non impostata
la riga colorata di giallo è
With WB1.Sheets(n)

Grazie assai,
eZio



Salve
forse non riusciamo a focalizzare il problema allo stesso modo. Se mi mostri la macro che controlla il colore della linguetta, io presumo che sia il colore della, linguetta che determini la condizione. Con quest'ultimo chiarimento la situazione cambia. La macro che hai scritto è corretta
se non fosse che scarichi dalla memoria le variabili oggetto al primo giro del ciclo For.
sposta le seguenti righe:
Set rng = Nothing
Set WB = Nothing
Set WB1 = Nothing
dopo la riga con l'istruzione Next
saluti
Giap


aetio
Inviato: Sunday, January 26, 2014 6:56:03 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
a10n11 ha scritto:

forse non riusciamo a focalizzare il problema allo stesso modo.

alla fine l'obiettivo è stato SEMPRE raggiunto in modo perfetto. ;-))

Riassumendo:
-ho 4 file excel aperti (il 1^ file nominato PRIMO_FILE)
-il 4^ file è attivo

La macro deve:
-trovare se, dal 4^ foglio all’ultimo del file attivo, ce n’è uno o più con le celle colorate di rosso
-in caso affermativo copia tali fogli nel PRIMO_FILE, dopo il suo 1^ foglio, e riprende la ricerca nel 4^ file continuandola dal punto in cui era rimasto al momento della copia.

Con le ultime correzioni, la macro "finale" è:
Sub zCopia_Foglio()
Dim WB1 As Workbook
Dim WB As Workbook
Dim ws As Worksheet
Set WB1 = ActiveWorkbook
Set WB = Workbooks("STUDIO_2-REGIA.xlsm")
cnt = 1
For n = 4 To WB1.Worksheets.Count
With WB1.Sheets(n)
Set rng = .UsedRange
For Each cl In rng
If cl.Interior.ColorIndex = 3 Then
.Copy After:=WB.Sheets(cnt)
cnt = cnt + 1
Exit For
End If
Next
End With
Next
Set rng = Nothing
Set WB = Nothing
Set WB1 = Nothing
End Sub

Esito: gira perfettamente ;-))
Grazie assai, buona serata
eZio

.
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.