Condividi:        

cercare un valore in più fogli excel ed avere un output

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

Re: cercare un valore in più fogli excel ed avere un output

Postdi Tribuno » 07/10/08 20:27

Codice: Seleziona tutto
Dim Riep As Object, FLNew As Object
Dim FlNewName As String
Dim I As Integer, Rgh As Integer, CL As Integer

Sub Controlla_redvin()
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With
'Eliminazione precedente file testo e poi creazione nuovo file testo
Dim FDStamp As Date
On Error Resume Next
Kill "C:\pippo123.txt"
Shell ("c:\pippo.bat")
Application.Wait (Now + TimeValue("0:00:05"))
Attesa:
FDStamp = FileDateTime("C:\pippo123.txt")
If IsEmpty(FDStamp) Then GoTo Attesa
If DateDiff("s", FDStamp, Now) < 20 Then GoTo Attesa
On Error GoTo 0
Columns("A:I").Select
Selection.ClearContents 'Cancella dati in foglio riepilogo
'Selection.QueryTable.Delete
Range("A2").Select
'Importa dati da file pippo123.txt
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\pippo123.txt", _
        Destination:=Range("A2"))
        .Name = "pippo123"
        .FieldNames = True
         .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1)
        .TextFileFixedColumnWidths = Array(5)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft 'Elimina 1ª colonna creata
Range("A1").Select
'Elimina da foglio riepilogo file finiti
Rgh = 2
While Cells(Rgh, 1) <> ""
    If Right(Cells(Rgh, 1), 10) = "finito.xls" Then
        Rows(Rgh).Delete
    Else
        Rgh = Rgh + 1
    End If
Wend
Columns("A:A").EntireColumn.AutoFit
Range("A1") = "File": Range("B1,D1,F1,H1") = "Mese": Range("C1,E1,G1,I1") = "Valore"
Range("A1:I1").Select
Selection.HorizontalAlignment = xlCenter
Selection.Font.Bold = True
'Controlla file
Set Riep = Workbooks("Riepilogo (redvin).xls").Worksheets("Riepilogo")
Rgh = 2
While Riep.Cells(Rgh, 1) <> ""
    Workbooks.Open Filename:=Riep.Cells(Rgh, 1).Text
    FlNewName = ActiveWorkbook.Name
    CL = 2
    For I = 1 To Worksheets.Count
        If Workbooks(FlNewName).Worksheets(I).Name = "Gennaio" Or Workbooks(FlNewName).Worksheets(I).Name = "Febbraio" _
        Or Workbooks(FlNewName).Worksheets(I).Name = "Marzo" Or Workbooks(FlNewName).Worksheets(I).Name = "Aprile" Then
            Workbooks(FlNewName).Worksheets(I).Select
            If Range("J13") Or Range("J14") <> 0 Then
                Riep.Cells(Rgh, CL) = Workbooks(FlNewName).Worksheets(I).Name
                Riep.Cells(Rgh, CL + 1) = Range("G42").Value
                CL = CL + 2
            End If
        End If
    Next I
    Workbooks(FlNewName).Close SaveChanges:=False
    Rgh = Rgh + 1
Wend
'Elimina file senza valori e crea collegamenti ipertestuali
Rgh = 2
While Riep.Cells(Rgh, 1) <> ""
    If Riep.Cells(Rgh, 2) = "" Then
        Riep.Range(Cells(Rgh, 1), Cells(Rgh, 9)).Select
        Selection.Delete Shift:=xlUp
    Else
        Cells(Rgh, 1).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Cells(Rgh, 1).Text _
        , TextToDisplay:=Cells(Rgh, 1).Text
        Rgh = Rgh + 1
    End If
Wend
Cells(Rgh, 1).Select
With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With
End Sub


Questo è il codice con le ultime modifiche proposte da Anthony ed altre che ho appena effettuato.
Nell'ultima parte relativa alla creazione dei collegamenti ipertestuali ho aggiunto un controllo che mi elimina tutte i file in cui non sono evidenziati i mesi da gennaio ad aprile, in automatico, senza necessità di utilizzare il filtro automatico.

Ciao e buon lavoro
Tribuno
Avatar utente
Tribuno
Utente Senior
 
Post: 181
Iscritto il: 22/08/08 19:24

Sponsor
 

Re: cercare un valore in più fogli excel ed avere un output

Postdi redvin » 17/10/08 15:23

Ciao
finalmente ho provato la macro su i files d'origine, però non riesce ad eseguirla, mi da un errore.

"Errore run_time '1004'.
Errore definito dall'applicazione o dall'oggetto"

facendo "Debug" mi evidenzia la riga:

With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\pippo123.txt", _
Destination:=Range("A2"))


perchè da questo errore? può dipendere da qualche incompatibilità di codice con Excel 97?
Grazie,
Ciao.
redvin
redvin
Utente Junior
 
Post: 10
Iscritto il: 03/10/08 17:16

Re: cercare un valore in più fogli excel ed avere un output

Postdi Anthony47 » 19/10/08 00:56

E sulle altre versioni di excel che fa?

Per quanto riguarda excel 97, ho ritrovato un pc con win98 e quella versione excel, ma alcuni componenti mancano e i cd non sono saltati fuori; quindi non ho l' accesso ne' alla documentazione on line ne' al componente Microsoft Query.

Fai cosi:
-interrompi la macro all' errore, e controlla che il file pippo123.txt sia presente sotto C:\
-poi avvia la registrazione di una nuova macro
-esegui Menu /Dati /Importa dati esterni /Importa dati; scegli tipo file .txt e poi selezioni il file C:\pippo123, Apri
-imposta Larghezza fissa, Avanti; imposta un unico separatore davanti a C:\ (click per inserire, doppioclick per rimuovere quelli errati); Avanti, Fine
-ferma la registrazione della macro

Posta il codice che ti restituisce.
Ti anticipo che non sono nemmeno certo che su excel 97 questa prestazione esiste; la vecchia versione e' in inglese, le uniche opzioni (sotto Get external data) sono Run web query, Run database query, Create new query (e' l' opzione meno improbabile, ma e' quella che si appoggia su uno dei componenti che mi manca, Microsoft Query).

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: cercare un valore in più fogli excel ed avere un output

Postdi giubar » 18/09/16 19:16

Ciao a tutti,

sono nuovo e non se se è corretto scrivere in questo forum, perché ho come sistema operativo windows 10 ed Office 2010, lo faccio perché ho utilizzato il codice presente in questo topic ed ho avuto qualche problemino.

A dir il vero volevo prendere spunto dal codice presente qui e modificarlo per risolvere un problema abbastanza simile ad uno che ho io, ma non vado più avanti delle prime righe perché non gira il file .bat.

Mi spiego meglio, ho creato il file pippo.bat nella cartella C:\Anni dove sono salvati i file Excel contabilità_09.xlsx, contabilità_10.xlsx, contabilità_11.xlsx etc se lancio direttamente il file pippo.bat dalla cartella tutto ok, viene creato il file pippo123.txt con il percorso di tutti i file excel presenti nella cartella Anni, se faccio girare anche solo queste 2 righe della macro:

Sub Controlla()
Kill "C:\Anni\pippo123.txt"
Shell ("C:\Anni\pippo.bat")
end sub

viene generato il file pippo123.txt ma dentro non trovo la lista dei file bensì questa "Impossibile trovare il file - *.xlsx"

Cosa sbaglio?

Potete aiutarmi?

Grazie
Giubar
giubar
Newbie
 
Post: 8
Iscritto il: 18/09/16 18:53

Re: cercare un valore in più fogli excel ed avere un output

Postdi Anthony47 » 18/09/16 23:51

Ciao giubar, benvenuto nel forum.

Evidentemente la directory su cui fai la ricerca non contiene file xlsx
Quale e' il contenuto completo del file ".bat"? Hai impostato un "CD" (change Dir) per posizionarti nella directory che ti interessa?

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

Re: cercare un valore in più fogli excel ed avere un output

Postdi giubar » 19/09/16 08:37

Ciao Anthony47,

il file pippo.bat è proprio nella cartella che contiene i file .xlsx e se lo lancio direttamente dalla cartella (doppio click su pippo.bat) crea il file pippo123.txt con tutti i file .xlsx se invece richiamo il file .bat con le righe di codice dalla macro mi genera il file pippo123.txt con la scritta nessun file .xlsx trovato.

Per curiosità stamattina ho ripetuto le stesse operazioni su una macchina con Office 2010 ma OS Windows 7 e tutto funziona.

[file pippo.bat: C:\Users\Admin\Documents\Anni
ATTRIB contabilita_*.xlsx /s >C:\Users\Admin\Documents\Anni\pippo123.txt]
[righe di codice: Sub Controlla()
Kill "C:\Users\Admin\Documents\Anni\pippo123.txt"
Shell ("C:\Users\Admin\Documents\Anni\pippo.bat")
End Sub]

Considera che per evitare di sbagliare il percorso lo copio direttamente dalla barra, comunque nel pomeriggio quando avrò a disposizione la macchina con Windows10 ricontrollerò il tutto.

Grazie ancora
Giubar
giubar
Newbie
 
Post: 8
Iscritto il: 18/09/16 18:53

Re: cercare un valore in più fogli excel ed avere un output

Postdi giubar » 19/09/16 19:02

Ciao Anthony47,

per il momento sembra essere tutto risolto...mancava la parolina magica Change Directory.

Grazie

Giubar
giubar
Newbie
 
Post: 8
Iscritto il: 18/09/16 18:53

Re: cercare un valore in più fogli excel ed avere un output

Postdi giubar » 20/09/16 09:00

Ciao Anthony,

rieccomi qui, ho modificato il codice presente nel forum per i miei scopi, ma avrei una domanda, mi spiego:
ora il codice invece di fare una verifica nelle celle j13 e j14 scorre una determinata colonna alla ricerca di una parola che io immetto da tastiera con inputbox. Il codice funziona, ma trova solo le occorrenze esatte se cerco pippo ad esempio trova solo la parola pippo presente nella cella saltando eventualmente le celle che contengono Pippo o Pippo, pluto o pippo-pippo etc.

Hai qualche suggerimento? Ti allego la parte di codice che ho modificato:

.......
'Controlla file
Set Riep = Workbooks("Riepilogo.xlsm").Worksheets("Riepilogo")
Rgh = 2
While Riep.Cells(Rgh, 1) <> ""
Workbooks.Open Filename:=Riep.Cells(Rgh, 1).Text
FlNewName = ActiveWorkbook.Name
CL = 2
For I = 1 To Worksheets.Count
' Riep.Range("b1") = Workbooks(FlNewName).Worksheets(I).Name
If Workbooks(FlNewName).Worksheets(I).Name = "Gennaio" Or Workbooks(FlNewName).Worksheets(I).Name = "Febbraio" _
Or Workbooks(FlNewName).Worksheets(I).Name = "Marzo" Or Workbooks(FlNewName).Worksheets(I).Name = "Aprile" _
Or Workbooks(FlNewName).Worksheets(I).Name = "Maggio" Or Workbooks(FlNewName).Worksheets(I).Name = "Giugno" _
Or Workbooks(FlNewName).Worksheets(I).Name = "Luglio" Or Workbooks(FlNewName).Worksheets(I).Name = "Agosto" _
Or Workbooks(FlNewName).Worksheets(I).Name = "Settembre" Or Workbooks(FlNewName).Worksheets(I).Name = "Ottobre" _
Or Workbooks(FlNewName).Worksheets(I).Name = "Novembre" Or Workbooks(FlNewName).Worksheets(I).Name = "Dicembre" Then
Sheets(I).Select
Riga = 4
While Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5) <> ""
' Riep.Range("b1") = Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5)
If Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5) = Parola Then
If Riep.Cells(Rgh, CL - 1) <> Workbooks(FlNewName).Worksheets(I).Name Then
Riep.Cells(Rgh, CL) = Workbooks(FlNewName).Worksheets(I).Name
CL = CL + 1
Riga = Riga + 1
Else
Riga = Riga + 1
End If
End If
Riga = Riga + 1
Wend
End If
' Riep.Range("b1") = Workbooks(FlNewName).Worksheets(I).Name
Next I
Workbooks(FlNewName).Close SaveChanges:=False
Rgh = Rgh + 1
Wend
.........

Grazie
Giubar
giubar
Newbie
 
Post: 8
Iscritto il: 18/09/16 18:53

Re: cercare un valore in più fogli excel ed avere un output

Postdi giubar » 20/09/16 20:45

Ciao Anthony47,

forse ho trovato la soluzione al mio problema e la risposta alla mia domanda. Di seguito ti posto lo stalcio di codice che è interessato dalla modifica:
Codice: Seleziona tutto
.........
While Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5) <> ""
 '        If Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5) = Parola Then       <<<<<<<<SOSTITUITA
         sStr = Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5)
' la ricerca non sarà Case Sensitive
         If InStr(UCase(sStr), UCase(Parola)) > 0 Then      ' <<<<<<<<<<<<<AGGIUNTA
            If Riep.Cells(Rgh, CL - 1) <> Workbooks(FlNewName).Worksheets(I).Name Then
                Riep.Cells(Rgh, CL) = Workbooks(FlNewName).Worksheets(I).Name
                CL = CL + 1
                Riga = Riga + 1
            Else
                Riga = Riga + 1
            End If
        End If
       Riga = Riga + 1
    Wend
..............


Saluti
Giubar
giubar
Newbie
 
Post: 8
Iscritto il: 18/09/16 18:53

Re: cercare un valore in più fogli excel ed avere un output

Postdi Anthony47 » 20/09/16 21:13

mancava la parolina magica Change Directory
In un programma anche una Virgola ha il suo significato....

Per l'ultimo quesito, ottima la soluzione adottata; una possibile alternativa sarebbe stata l'uso dell' operatore Like invece dell' "=".

Iinfatti "=" richiede uguaglianza tra i termini del confronto, mentre "Like" consente l'uso dei caratteri jolly; quindi
Codice: Seleziona tutto
If Workbooks(FlNewName).Worksheets(I).Cells(Riga, 5) Like ("*" & Parola & "*") Then


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

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "cercare un valore in più fogli excel ed avere un output":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti