Importazione da foglio esterno



  • Importazione da foglio esterno
    di Michele (utente non iscritto) data: 18/11/2009

    Ciao a tutti. sto creando una maschera di dialogo nella quale va inserita la possibilità di importare le prime due colonne di un file excel esterno. quindi devo:

    1) inserire un'oggetto (composto da una textbox e da un pulsante) che apre la maschera di navigazione nel file system (quell'oggetto, per intenderci, che si trova nei programmi quando devi dire alla macchina dove salvare un file, o dove cercarlo, o quale uploadare sul server)
    2) associare alla pressione del bottone "apri" di quella maschera l'azione: "importa in questo file la colonna "a" e "b" del file esterno che hai scelto".

    che voi sappiate, è una cosa molto difficile da fare?

    grazie del vostro tempo in ogni caso
    michele




  • di Enzo (utente non iscritto) data: 18/11/2009

    Ciao, non ti serve una textbox ma solo un pulsante e coiaci dentro questa istruzione
    ossia ti apre un file excel che selezioni tu
    ti copia le due colonne a e b e le incolla nel file dove lo hai aperto e ti chiude il file dal quale hai importato i dati
    fa sapere se puo' andar bene
     
    Application.ScreenUpdating = False
    oldfile = ActiveWorkbook.Name
        FILETOOPEN = Application.GetOpenFilename("xls Files (*.xls), *.xls", , "Selezionare il file dal quale importare le colonne a e b", "Apri", "False")
      file_selezionato = ActiveWorkbook.Name
         If FILETOOPEN = False Then
             Application.CutCopyMode = False
             Exit Sub
      End
      End If
    Workbooks.OpenText Filename:=FILETOOPEN
    nuovo = ActiveWorkbook.Name
    Columns("A:B").Select
    Selection.Copy
    Windows(oldfile).Activate
    Range("a1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A1").Select
    Windows(nuovo).Close
    Application.ScreenUpdating = True



  • di Michele (utente non iscritto) data: 18/11/2009

    Funziona per-fet-ta-men-te!!! grazie infinite, enzo!


  • Oops...
    di Michele (utente non iscritto) data: 23/11/2009

    Chiedo scusa ancora. il codice funziona, ma non chiude il file da cui attingo i dati, cosa che invece vorrei.

    È molto complicato da modificare? grazie in ogni caso. michele



  • di Enzo (utente non iscritto) data: 24/11/2009

    No , dovrebbe farlo, l'istruzione qui sotto la fa eseguire ed e' quella che trovi nei comandi che ti avevo inviato, almeno a me funziona bene

     
    Windows(nuovo).Close


  • Già, ma...
    di Michele (utente non iscritto) data: 24/11/2009

    E' quello che dico anch'io, ma vba mi restituisce l'alert "errore di runtime '9': indice non incluso nell'intervallo." e la tua riga è proprio quella illuminata dal debug. domani proverò ad eseguire lo stesso codice copiando il file su un'altra macchina, e se lì non succede nulla forse è il mio sistema che ha qualche problema. intanto, grazie del tuo tempo :)



  • di Enzo (utente non iscritto) data: 25/11/2009

    Prova a modificare l'istruzione in questo modo
    ripeto prova
    fa sapere

    ps che office utilizzi?
     
    Windows(nuovo).Close False
    
    oppure
    
    Windows(nuovo).Close = False
    



  • di Enzo (utente non iscritto) data: 25/11/2009

    Mi poi "postare" esattamente che tipo di istruzione hai inserito nella macro?



  • di Michele (utente non iscritto) data: 26/11/2009

    La versione di office è la 2003. sulla mia macchina ho provato entrambe le modifiche. la seconda modifica non genera alert, ma nemmeno produce il risultato. la prima, invece, produce un alert analogo. comunque voglio lanciare la stessa macro su un'altra macchina. non ci sono riuscito tutto ieri, ma oggi penso di farcela. grazie della tua pazienza :) michele


  • Test su altra macchina
    di Michele (utente non iscritto) data: 26/11/2009

    Ciao enzo. ho testato la stessa identica macro su un'altra macchina con office 2000. ecco i risultati:

    1) windows(nuovo).close e windows(nuovo).close false restituiscono l'alert "errore di runtime '9' indice non incluso nell'intervallo". cliccando sul pulsante "fine" le colonne vengono importate ma il file di partenza non viene chiuso automaticamente, e il debug illumina proprio quella riga;

    2)con la seconda modifica, windows(nuovo).close = false, le operazioni non vengono nemmeno eseguite e quando apro il file (la macro è associata all'evento "open worksheet") excel va diretto in vba illuminando la riga e alertandomi "errore di compilazione: assegnazione alla costante non ammessa".

    spero di esserti stato utile. in ogni caso, grazie fin d'ora della tua pazienza :) michele


  • Risolto!!!
    di Michele (utente non iscritto) data: 29/11/2009

    Le modifiche che vedete commentate hanno risolto il problema. spero che apprezziate :) michele
     
    Application.ScreenUpdating = False
    oldfile = ActiveWorkbook.Name
        FILETOOPEN = Application.GetOpenFilename("xls Files (*.xls), *.xls", , "Selezionare il file dal quale importare le colonne a e b", "Apri", "False")
      file_selezionato = ActiveWorkbook.Name
         If FILETOOPEN = False Then
             Application.CutCopyMode = False
             Exit Sub
      End
      End If
    Workbooks.OpenText Filename:=FILETOOPEN
    
    nuovo = ActiveWorkbook.Name
    
    'INIZIO PRIMA MODIFICA
    Dim SourceFile As Workbook
    Set SourceFile = ActiveWorkbook
    'FINE SECONDA MODIFICA
    
    Columns("A:B").Select
    Selection.Copy
    
    Windows(oldfile).Activate
    Range("a1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A1").Select
    Application.ScreenUpdating = True
    
    'INIZIO SECONDA MODIFICA
    SourceFile.Activate
    SourceFile.Close
    'FINE SECONDA MODIFICA
    
    Windows(oldfile).Activate