Macro per



  • Macro per
    di Marsar (utente non iscritto) data: 13/07/2010

    Salve a tutti, sono poco pratico di vb ed avrei un problema che devo assolutamente risolvere.
    ho dei dati di bilancio su svariati fogli excel (ad es. 50) e ho fatto una macro per prendere solo alcuni dati in un foglio.il problema è: come posso estendere il comando che valga per tutti e 50 i fogli senza compilare ogni volta i comandi col nome di ogni singolo foglio???
    ho provato con il comando range ma nn funziona...
    ringrazio chiunque mi aiuti

    riporto lo script per un foglio
     
    Sheets("Bankhaus Hallbaum AG").Select
        Cells.Find(What:="interbank ratio", After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Range("A1:D1").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Foglio2").Select
        ActiveCell.Offset(1, 0).Range("A1").Select
        ActiveSheet.Paste



  • di Enzo (utente non iscritto) data: 14/07/2010

    Riepilogando
    cinquanta fogli in un file xls- tu prendi un range uguale per tutti i cinquanta fogli?
    dove lo vuoi copiare?



  • di Marsar (utente non iscritto) data: 14/07/2010

    Ciao, innanzitutto grazie per l'interessamento.
    dunque: i dati che mi servono si trovano in ogni foglio ma in celle sempre diverse. per questo motivo ho impostato una ricerca ctrl+shift+t.
    una volta che la macro mi trova le celle, le deve copiare in un nuovo foglio (che nello script ho chiamato "foglio2").
    il problema sta nel fatto che devo impostare manualmente, nelle righe di visual basic, i nomi dei fogli su cui deve fare la ricerca.
    il mio quesito è: come posso dire a vb di fare questa ricerca per tutti i fogli, senza stare a scrivere ogni volta il nome di ogni singolo foglio??
    ps. i fogli sono più di 1000....ora capite perchè farlo manualmente mi viene un po' male ;)



  • di Big ronnie (utente non iscritto) data: 14/07/2010

    Prova uno di questi cicli.

    for i = 1 to sheets.count
    sheets(i).activate

    qui metti ciò che vuoi fare

    next i

    o

    for each sh in activeworkbook
    sh.activate

    qui metti ciò che vuoi fare

    next

    ciao big



  • di Marsar (utente non iscritto) data: 14/07/2010

    Ciao grazie ma non riesco a farlo fungere! l'ho detto che son molto ciappuzzo...
    ho provato il primo ciclo, ma inserendolo il debug mi ha detto che non riconosce la ricerca.

    il secondo lo posto qua sotto, ditemi se c'è qualcosa di sbagliato. il debug mi segnala il comando next e mi dice che il ciclo non è inizializzato. bho?
     
    For Each sh In ActiveWorkbook
    sh.Activate
            Cells.Find(What:="interbank ratio", After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Range("A1:D1").Select
        Selection.Copy
        Sheets("Foglio1").Select
        ActiveCell.Range("A1:D1").Select
        ActiveSheet.Paste
        Next
    End Sub



  • di Big ronnie (utente non iscritto) data: 14/07/2010

    Hai ragione ho commesso un errore.copia questa.
    il ciclo funziona perfettamente,il tuo codice non sò,o meglio, tu gli hai detto di copiare la selezione di ogni foglio e di incollarla sempre nella stessa posizione nel foglio1, quindi vedrai soltanto la selezione dell'ultimo foglio a fine ciclo.
     
    For Each sh In ActiveWorkbook.sheets
    
            Cells.Find(What:="interbank ratio", After:=ActiveCell, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
        ActiveCell.Range("A1:D1").Select
        Selection.Copy
        Sheets("Foglio1").Select
        ActiveCell.Range("A1:D1").Select
        ActiveSheet.Paste
    Next
    End Sub
    



  • di Marsar (utente non iscritto) data: 15/07/2010

    Si grazie, ora funge... hai ragione per il resto. ho selezionato solo una cella. il fatto è che non riesco a fare scalare le celle man mano che copia, quindi mi va a finire tutto su un'unica cella.
    ho scelto l'approccio de: "un problema alla volta".
    sono troppo sfacciato se vi chiedo come si fa a farle scalare?



  • di Ricky53 (utente non iscritto) data: 15/07/2010

    Ciao,

    prova a sostituire l'istruzione
    activecell.range("a1:d1").select

    con

    range("a" & rows.count).end(xlup).offset(1, 0).select

    ciao da ricky53



  • di Enzo (utente non iscritto) data: 15/07/2010

    Non mi sono intromesso ma avevo la stessa idea di ricky che saluto



  • di Marsar (utente non iscritto) data: 15/07/2010

    Grazie ragazzi, mi siete stati di grande aiuto. ho risolto il problema grazie anche al prezioso contributo di un mio amico.
    posto lo script finale qua sotto, magari può servire a qualcuno.
    in pratica ciò che lo script fa è questo:
    1.seleziona delle celle in qualsiasi foglio nel workfile di excel. da notare che le celle possono essere in collocazione diversa, perciò si usa il comando "cerca"
    2.copia queste determinate celle in un nuovo foglio.
    ancora grazie a tutti
     
    Sub ok()
    '
    ' Macro4 Macro
    ' Macro registrata il 13/07/2010 da Mario
    '
    ' Scelta rapida da tastiera: CTRL+a
    '
       For i = 1 To ActiveWorkbook.Sheets.Count
           Sheets(i).Select
           Cells.Find(What:="interbank ratio", After:=ActiveCell,LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,SearchDirection:=xlNext, MatchCase:=False,SearchFormat:=False).Activate
           ActiveCell.Range("A1:D1").Select
           Selection.Copy
           Sheets("Foglio1").Select
           Cells(i, 1).Select
           ActiveSheet.Paste
       Next
    End Sub