Condividi:        

[Excel] Creazione di un file Indice

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

[Excel] Creazione di un file Indice

Postdi usciof1 » 26/11/06 11:03

ciao a tutti
ho fatto un modello, dove vengono inseriti tutti i dati relativi ad una commessa di lavoro, che salvo ogni volta dandogli come nome un numero progressivo dall'inizio dell'anno.
Vorrei creare un foglio dove vengono riportati per ogni riga alcuni dati della commessa (num. della commessa, data presa in carico, data consegna, cliente, quantità, descrizione) e che si aggiorni automaticamente tutte le volte che creo una nuova commessa.
Premesso che di VBA non conosco niente, trovo qualche buonanima che mi possa dare una mano per risolvere il problema?
grazie
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Sponsor
 

Postdi Anthony47 » 26/11/06 19:53

Quindi ogni file e’ una commessa, giusto?
Propongo questo:

1) Su file delle commesse (o meglio: sul modello delle commesse), in un foglio libero crei una riga di sintesi, con formule che attingono le informazioni dal foglio analitico (es: =Analitico!A1); dai a questo foglio il nome FoglioSint

Poi apri il vba editor con Alt-F11, inserisci un modulo vuoto di codice con Inserisci ->Modulo, e nel frame di dx del modulo incolli la seguente macro:
Codice: Seleziona tutto
Sub usciof1()
CelleSint = "A1:G1"     '<<<<<<---- Modificare

Sheets("FoglioSint").Select
Range(CelleSint).Copy
FileComm = ActiveWorkbook.Name
Windows("Indice.xls").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = FileComm
Selection.Offset(0, 1).Select
'ActiveCell.Value = Now
'Selection.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Windows(FileComm).Activate

End Sub


MODIFICA subito la definizione di CelleSint affinche’ l’ area sia quella che tu hai creato su FoglioSint.
INOLTRE, se vuoi inserire sull’ indice, in colonna B, la data/ora dell’ operazione allora elimina l’ apostrofo sulle 2 istruzioni nel corpo macro.

Torni sul file excel e assegni a questa macro un tasto di scelta rapida: Strumenti ->Macro ->Macro; selezioni usciof1 nell’ elenco, premi Opzioni, e nella casella “Tasto di scelta rapida” inserisci I (I come Indice, maiuscolo); completa con Ok e chiudi con la X.

2) A parte ti crei un file che chiami Indice.xls, e nel suo Foglio1, in riga 1, da B1 in poi (o da C1, se decidi di mettere anche data/ora) metti le intestazioni di colonna, nello stesso ordine in cui sono riportate sul foglio FoglioSint, in A1 invece scrivi “Nome File”.
Poi inseriamo la seguente formattazione condizionata in colonna A:
-seleziona tutta la colonna A
-Formato ->Formattazione condizionale; nella finestra che si apre scegli “la formula e’ ” e nello spazio accanto scrivi la seguente formula:
Codice: Seleziona tutto
=CONTA.SE(A:A;A1)>1
Poi premi “Formato”, scegli il tab Motivo, e selezioni il colore rosso o arancione; confermi con Ok e chiudi con Ok.


Fatto.
Come si usa:
Apri il file Indice.
Sul modello inserisci i tuoi dati e Salvi con il nuovo nome file. Premi su tastiera Contr-Maiusc-I e i dati vengono accodati sul file Indice.

La formattazione condizionale che abbiamo messo su colonna A di Indice serve per evidenziare eventuali doppi inserimenti; le righe inserite per errore possono essere cancellate.
Le righe vengono accodate una dopo l’ altra; eventualmente si puo’ inserire un Ordinamento se si vogliono in un ordine particolare.

Se vuoi rimanere sul foglio Indice al completamento della macro, basta mettere un “apostrofo (') prima dell’ istruzione Windows(FileComm).Activate in fondo alla macro.

Puo’ andare cosi’?

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi usciof1 » 26/11/06 22:19

Antony, come al solito sei grande: funziona benissimo. Grazie 1000!!!

ti chiedo un'altro favore: è possibile all'apertura del modello in questione, inserire automaticamente l'ultimo numero registrato sull'Indice, che sarà poi il nome con cui salverò il file?
ti ringrazio della preziosa collaborazione
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi Anthony47 » 27/11/06 03:13

usciof1 ha scritto:ti chiedo un'altro favore: è possibile all'apertura del modello in questione, inserire automaticamente l'ultimo numero registrato sull'Indice, che sarà poi il nome con cui salverò il file?

Aggiungi la seguente macro, a cui assegni come tasto breve S (S come Salva, Maiuscolo):
Codice: Seleziona tutto
Sub SalvaComm()
Direct = "C:"              '<<<<<-- Modificare a piacere
Radice = "A6_COMMESSE-"     '<<<<<-- Modificare a piacere

FileNum = Application.WorksheetFunction.Subtotal(3, Range("A:A"))
NomeFile = Direct & Radice & FileNum

    ActiveWorkbook.SaveAs Filename:=NomeFile, _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

End Sub


Modifica la variabile Direct perche’ punti alla directory preferita; ad esempio
Direct = "C:\Documents and Settings\NomeDellUtente\Documenti"
E modifica eventualmente la variabile Radice, dove metterai la radice del nome che vuoi assegnare.

In questo modo potrai usare Contr-Maiusc-S per salvare il file col suo nome calcolato automaticamente E POI Contr-Maiusc-I per aggiornare l’ indice.
Se preferisci puoi inserire la vecchia macro (senza il titolo e senza l' End) in coda a questa macro, in modo da avere Save e Indice in un unico comando; lascerei comunque la vecchia macro per poter fare all' occorrenza solo l' inserimento nell' indice e il salvataggio manuale, ad esempio in caso di aggiornamento dei dati di commessa.

Puo’ andare?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi usciof1 » 27/11/06 17:39

Ciao Anthony
Ho modificato la variabile Direct e come Radice ho messo "" in quanto non mi serve.
Quando faccio Contr-Maiusc-S mi salva nella posizione giusta, ma restituisce sempre un file chiamato 25.xls.
Se salvo con F12 e inserisco il nome (numero) giusto e faccio Contr-Maiusc-I funziona bene, ma mi lascia aperto FoglioSint.
Se è un grosso problema lascia perdere. Quello che hai fatto è più che sufficiente.

ti ringrazio ancora

Ciao
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi sax » 27/11/06 23:20

Il File funziona anche a me ed è molto utile
il nome del file registrato viene trascritto nella colonna A del file Indice.xls può creare automaticamente un collegamento ipertestuale in modo tale che clikkando sul nome file si apra il file originale?
Spero di essere stato chiaro
Grazie
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi usciof1 » 27/11/06 23:31

ciao sax
clicchi con il destro, sul menu che ti appare vai in fondo su "collegamento ipertestuale", selezioni, poi vai in "cerca in" e ricerchi il file che vuoi aprire, dai oK e sull'Indice trovi il nome del file con il collegamento ipertestuale.
A me è utilissimo!

ciao
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi Anthony47 » 28/11/06 02:05

ERRORE nella mia macro Sub SalvaComm():
Sostituire l’ istruzione singola
FileNum = Application.WorksheetFunction.Subtotal(3, Range("A:A"))

Con queste
Codice: Seleziona tutto
StWb = ActiveWorkbook.Name
Windows("Indice.xls").Activate
FileNum = Application.WorksheetFunction.Subtotal(3, Range("A:A"))
Windows(StWb).Activate


In questo modo il “numero” del file e’ calcolato (come deve essere) sulla base del contenuto del foglio Indice.xls.

Se sul file commessa vuoi aprire un foglio diverso da FoglioSint, dopo Windows(FileComm).Activate inserisci:
Codice: Seleziona tutto
Sheets("IlNomeDelFoglio").Select

Ovviamente tra virgolette metterai il nome reale del foglio che vuoi aprire.

Infine, anche per Sax, se volete inserire automaticamente un hyperlink, sostituite questa
ActiveCell.Value = FileComm

con questa
Codice: Seleziona tutto
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        (NomeFile & ".xls"), TextToDisplay:=FileComm


Fate sapere..
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi usciof1 » 28/11/06 08:29

Funziona alla grande
l'unica cosa da sistemare è il collegamento ipertestuale sul foglio Indice.xls che punta sulla directory dove è salvato il modello e non in quella dove ha salvato il nuovo file.
Se volessi riportare sulla commessa in cella B1 il numero del file attribuito automaticamente che istruzione devo dare?
Grazie della tua pazienza
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi sax » 28/11/06 09:57

Il Collegamento ipertestuale non va bene in quanto i file sono inseriti in cartelle diverse

il file INDICE.XlS da me si chiama "Protocollo 2006" e vi sono diversi Fogli all'interno nel mio caso "Fax in Uscita" è inserito nella cartella "Protocolli";

mentre i File "commessa" Sono Tutti nella cartella Commessa 2006 quindi il collegamento ipertestuale non funzione perche lo cerca nella cartella Protocolli

inoltre volevo sapere se il file "indice/Protocollo 2006" puo rimanere chiuso o lo devo attivare in quanto lo utilizziamo su diversi pc e tenerlo aperto su un PC significa che l'altro lo vede di sola lettura

Ciao e Grazie
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 28/11/06 11:02

Mi dite con quale macro state lavorando, in quale directory mettete i file, e in quale directory punta l‘ hyperlink?

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sax » 28/11/06 12:03

Attualmente sto cercando di usare questa applicazione per i fax in uscita ma sicuramente la adattero per risolvere altre problematiche

i miei file si trovano

F:\UFFICIO 2006\02 Fax Generali Inviati\fx 000 06 Intestazione.xls"
F:\UFFICIO 2006\11 PROTOCOLLI\PROTOCOLLO 2006.XLS(foglio"Fax in Uscita"

Sicuramente abbiamo delle esigenze un po' diverse con usciof1 e probabilmente ti sto complicando la soluzione del problema

Grazie Per l'aiuto
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi usciof1 » 28/11/06 13:16

Ciao Anthony
ho lasciato le due macro divise come mi avevi consigliato e cioè: usciof1 (che ho rinominato "presaincarico") e "SalvaCom").

il modello della commessa si trova in:
C:\Documents and Settings\Produzione\Dati applicazioni\Microsoft\Modelli
e si chiama "00commacro.xlt"

il file Indice.xls (che ho rinominato "Presa in Carico.xls") si trova in:
C:\Documents and Settings\Documenti\Produzione\MODULI

la destinazione delle commesse salvate si trova in:
C:\Documents and Settings\Documenti\Produzione\Comm2006

grazie
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi Anthony47 » 28/11/06 15:11

Ok, e’ chiaro..
I miei ultimi suggerimenti erano basati su una unica macro che fa SALVA-e-AGGIORNA l’ Indice.

Per mantenerle separate:
Salva il file, da lanciare con il MODELLO attivo
Codice: Seleziona tutto
Sub SalvaComm()
Direct = "C:\Documents and Settings\UserName1\Desktop\DA_PC-FACILE\Testing\" '<<<<<-- Modificare a piacere
Radice = "A6_COMMESSE-"     '<<<<<-- Modificare a piacere

StWb = ActiveWorkbook.Name
Windows("Indice.xls").Activate
FileNum = Application.WorksheetFunction.Subtotal(3, Range("A:A"))
Windows(StWb).Activate

NomeFile = Direct & Radice & FileNum

ActiveWorkbook.SaveAs Filename:=NomeFile, _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False

End Sub



Aggiorna l’ indice
Codice: Seleziona tutto
Sub Presaincarico()
CelleSint = "A1:G1"     '<<<<<<---- Modificare
Direct = "C:\Documents and Settings\UserName1\Desktop\DA_PC-FACILE\Testing\"              '<<<<<-- Modificare a piacere
'
StWb = ActiveWorkbook.Name
NomeFile = Direct & StWb
Sheets("FoglioSint").Select
Range(CelleSint).Copy
FileComm = ActiveWorkbook.Name
Windows("Indice.xls").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        (NomeFile), TextToDisplay:=FileComm
Selection.Offset(0, 1).Select
ActiveCell.Value = Now
Selection.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Windows(FileComm).Activate
'Sheets("IlNomeDelFoglioPreferito").Select     '<<<<< CORREGGERE e Scommentare

End Sub



Per Sax: il file Indice deve essere in stato Aperto al momento di lanciare la macro di Aggiorna Indice; se vuoi si puo’ inserire Apri File all’ inizio della macro e Salva e chiudi alla fine, ma mi sembra che cosi’ si operi alla cieca senza controllo sul risultato. Dimmi se vuoi una versione personalizzata.

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi usciof1 » 28/11/06 16:39

funziona tutto benissimo
ti ringrazio molto

ciao
usciof1
Utente Junior
 
Post: 25
Iscritto il: 11/01/06 22:13
Località: Pavia

Postdi sax » 29/11/06 08:42

Per la serie Non riesco ad andare avanti...
Adesso Ho Modificato il codice che mi hai dato sel seguente modo
Codice: Seleziona tutto
Sub Archivia_Fax()
CelleSint = "A2:m2"     '<<<<<<---- Modificare
Direct = "F:\UFFICIO 2006\02 Fax Generali Inviati\"              '<<<<<-- Modificare a piacere
'
StWb = ActiveWorkbook.Name
NomeFile = Direct & StWb
Sheets("FoglioSint").Select
Range(CelleSint).Copy
FileComm = ActiveWorkbook.Name

ChDir "F:\UFFICIO 2006\11 Protocolli"
    Workbooks.Open Filename:="F:\UFFICIO 2006\11 Protocolli\Protocollo 2006.xls"
    Sheets("Fax in Uscita").Select
    Windows(FileComm).Activate
    Range("B9").Select

Windows("Protocollo 2006.xls").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        (NomeFile), TextToDisplay:=FileComm
Selection.Offset(0, 1).Select
ActiveCell.Value = Now
Selection.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Windows(FileComm).Activate

Windows("Protocollo 2006.xls").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close
    Range("B9").Select

Sheets("Analitico").Select     '<<<<< CORREGGERE e Scommentare

End Sub
Sub SalvaComm()
Direct = "F:\UFFICIO 2006\02 Fax Generali Inviati\" '<<<<<-- Modificare a piacere
Radice = "Fx "     '<<<<<-- Modificare a piacere

StWb = ActiveWorkbook.Name
ChDir "F:\UFFICIO 2006\11 Protocolli"
    Workbooks.Open Filename:="F:\UFFICIO 2006\11 Protocolli\Protocollo 2006.xls"
    Sheets("Fax in Uscita").Select
'Windows("Protocollo 2006.xls").Activate
FileNum = Application.WorksheetFunction.Subtotal(3, Range("A:A"))
Windows(StWb).Activate

NomeFile = Direct & Radice & FileNum

ActiveWorkbook.SaveAs Filename:=NomeFile, _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
    ReadOnlyRecommended:=False, CreateBackup:=False

End Sub



ho creato l'apertura e la chiusura del file protocollo 2006 con il registratore di macro in questo modo se il file è chiuso lo apre,seleziona il foglio "fax in Uscita", archivia e richiude, (normalmente il file deve rimanere chiuso si apre solo per controllo ma in ogni caso il tempo di apertura e chiusura fa si che ho un minimo di tempo per visionarlo) ma se è aperto mi da errore,

il problema lo da nel salva

ecco la mia procedura

Apertura file(Foglio Analitico) inserimento Nuovi Dati
Archivio Macro "Archivio Fax" apertura protocollo 2006 e chiusura
Salva Macro "salvacomm" Creazione nuovo File con numero progressivo archiviato nel file "Protocollo 2006""foglio "Fax in uscita"
e si deve creare il nome file FX (cella "D488") - data(cella"C488" - intestazione (cella"F488")

a proposito mi da un debug ma sicuramente ho scritto qualcosa che non dovevo

Ciao e grazie ancora
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Postdi Anthony47 » 29/11/06 11:26

Sax ha scritto:ho creato l'apertura e la chiusura del file protocollo 2006 con il registratore di macro in questo modo se il file è chiuso lo apre

Non vedo traccia di queste istruzioni nelle macro che hai postato; dove sono?

il problema lo da nel salva

Il salva di quale file, fatto con quale istruzione?

e si deve creare il nome file FX (cella "D488") - data(cella"C488" - intestazione (cella"F488")

Se il nome file viene calcolato con l' istruzione "NomeFile = Direct & Radice & FileNum", questo calcolo a cosa si riferisce e con quali istruzioni viene effettuato?

a proposito mi da un debug ma sicuramente ho scritto qualcosa che non dovevo

Pero', se non mi dici quale istruzione va in debug, con quale messaggio, e non mi fai vedere tutto il codice con cui lavori (quello pertinente al problema, intendo) posso fare poco.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Creazione di un file Indice":


Chi c’è in linea

Visitano il forum: Ricky0185 e 33 ospiti