attivazione di specifico workbook



  • attivazione di specifico workbook
    di giabon data: 07/03/2014 00:53:15

    Ciao a tutti,
    c'è un problema che mi attanaglia da qualche giorno e non riesco a trovare una soluzione :/
    Avrei la necessità di copiare delle celle da una cartella di lavoro verso un'altra che però non so esattamente come si chiama (perchè il nome nel tempo varia, così come il nome della cartella di partenza).
    Ho trovato il comando Workbooks(1).Activate che mi funziona se la cartella su cui copio viene aperta prima della cartella da cui parte la macro oppure Workbooks(2).Activate se viene aperta come seconda (ad esempio) ma siccome la macro dovrà usarla un amico non so nè quante cartelle excel avrà aperto al momento del lancio nè tantomeno l'ordine di apertura di tali cartelle...

    E' possibile attivare da codice esattamente la cartella excel che mi serve, per esempio andando a discriminare tra qualche opzione (es: il fatto che ha il primo foglio che si chiama "Frontespizio"?) oppure qualche routine che fa in modo che quel foglio sia in un ordine definito o che lo chiuda e riapra così è l'ultimo (diventerebbe "Workbooks.Count" ma aprire e chiudere implica che venga salvata la cartella e potrebbe non essere il massimo) o altro...

    Grazie in anticipo per eventuali risposte che vorrete darmi
    Giab



  • di patel data: 07/03/2014 07:32:56

    allega la tua macro con spiegazioni, basterebbe aprire il file con la data di creazione più recente ?





  • di giabon data: 07/03/2014 09:54:58

    Ciao Patel,
    la macro devo ancora definirla nello specifico perchè ora per ovviare al non saper rintracciare il workbook giusto su cui copiare ho creato un workbook nuovo di appoggio che sono sicuro essere l'ultimo e quindi rintracciabile attraverso il Workbooks.Count
    Ma l'obiettivo è quello di andare a copiare i dati sul workbook destinazione senza passare da questo workbook di appoggio...
     
        Workbooks.Add
        ThisWorkbook.Activate
        Range("A" & ActiveCell.Row).Activate
        Selection.Copy
        Workbooks(Workbooks.Count).Activate
        Range("C2").Select
        Selection.PasteSpecial Paste:=xlPasteValues



  • di giabon data: 20/03/2014 09:00:25

    Non sono tuttora pervenuto ad una soluzione... ho provato con un msgbox o con una userform in cui c'è scritto di selezionare il file di destinazione ma finchè essi sono attivi Excel non fa cambiare il file e appena do l'ok la macro va avanti... l'ideale sarebbe che venisse dato un tempo (10 secondi) prima di continuare con la macro oppure che Excel riconoscesse che ho cambiato la visualizzazione del file...
    Sono un po' scoraggiato, quello che mi sembra una cosa banale mi sta portando via un bel po' di fatica
    grazie se qualcuno vorrà suggerirmi qualche idea



  • di lepat (utente non iscritto) data: 20/03/2014 10:15:29

    che ne dici di rispondere alla domanda ?
    basterebbe aprire il file con la data di creazione più recente ?



  • di giabon data: 20/03/2014 10:17:47

    no, purtroppo non ho idea di quali file siano aperti e che date di creazione abbiano...



  • di Raffaele_53 (utente non iscritto) data: 20/03/2014 15:59:24

    Forse non ho capito bene, però

    >>>copiare delle celle da una cartella di lavoro verso un'altra che però non so esattamente come si chiama
    Dichiarando le variabili. Apro un files, avvio la macro che mi fà scegliere un files.
    Ora copia/incolla tra questi due si può fare.
    Come detto non ho capito oppure se Ti và di spiegarTi meglio.



  • di giabon data: 20/03/2014 16:51:56

    Ciao Raffaele,
    provo a spiegarmi meglio. L'esigenza è quella di passare da una cartella di lavoro excel ad un'altra per fare delle semplici operazioni di copi e incolla. La cartella da cui copio la identifico con il comando ThisWorkbook.Activate
    perchè è la cartella su cui fisicamente risiede la macro.
    La cartella di lavoro su cui copiare ogni tanto cambia nome e quindi non so come fare per attivarla dalla macro. So che il nome della cartella inizierà sempre con la sigla "BM" ma può essere che ci siano più versioni aperte contemporaneamente di quella cartella (es: BM_rs1_1_25.xlsx e BM_tr_2_14.xlsx).
    Per ora l'unica cosa che ho esco gitato è quella di far comparire delle userform che avvisano di chiudere tutte le cartelle excel aperte (tranne quella con la macro) e aprire la cartella excel giusta, di modo che posso usare per identificare quest'ultima il comando
    Workbooks(Workbooks.Count).Activate

    forse però con la dichiarazione di variabili come suggerisci posso evitare questo passaggio che potrebbe essere rischioso se chi avvia la macro non segue i comandi alla lettera. Ma non saprei come scrivere nel codice come "scegliere" il file.
    grazie
    giab



  • di Lucas87 data: 20/03/2014 20:19:31

    Fino a quando non troverai un sistema per identificare in maniera univoca il file su cui vuoi scrivere, non sarà possibile aiutarti.
    Hai detto che il nome del file varia nel tempo; secondo una logica prevedibile o a caso?

    Se il file fosse chiuso, l'utente potrebbe sceglierlo e a quel punto sarebbe tutto più semplice.



  • di giabon data: 20/03/2014 20:56:20

    ciao Lucas,
    la logica del nome è forse in parte prevedibile ma purtroppo non è remoto il caso in cui l'utente possa avere due file aperti della stessa "logica"...
    L'ideale sarebbe che tra i file aperti l'utente potesse scegliere quello che desidera. Mi sa che devo rassegnarmi, forse pretendo una cosa che se non riesco ad identificare io ovviamente non riesce neanche Excel...
    E non vorrei fare chiusure forzate di file prima della eventuale scelta perché rischio che vengano persi dei dati se l'utente non salva o crede, sbagliando, che sia meglio non salvare o salvare (dipende dai casi).
    Grazie comunque



  • di Raffaele_53 (utente non iscritto) data: 20/03/2014 21:38:08

    Scusa, Ti puoi spiegare meglio?
    Parlando Italiano. Io apro un files dove esiste una macro.OK
    Adesso apro un files......? Che non conosco il nome.
    Però posso identificarlo tramite Explorer

    Sarebbe questo il Tuo Fabbisogno?



  • di Raffaele_53 (utente non iscritto) data: 20/03/2014 21:47:02

    Questo pezzo di codice, apre un files.
    Dove poi ci sarà il copia/incolla
     
    Option Explicit
    Sub ricopia()
    Dim wk1 As Workbook: Set wk1 = Workbooks("Documento1.xlsm") ' da cambiare casomai
    Dim sh1 As Worksheet: Set sh1 = wk1.Worksheets("Foglio2") ' da cambiare casomai
    Dim Area2 As Range, Riga As Object
    Dim Uriga1 As Long, Uriga2 As Long, R As Long, X As Long, P1 As Long, P2 As Long
    Dim Nome As String, Percorso As String, Patch As String, Files As String
    Percorso = Application.GetOpenFilename(filefilter:="Excel Files (*.xlsx), *.xlsx")
    If Percorso = "Falso" Then GoTo Fine
        P1 = Len(Percorso)
            For X = 1 To P1
                 If Mid(Percorso, X, 1) = "" Then
                    R = X
                 End If
            Next X
        Patch = Mid(Percorso, 1, R)
        Files = Mid(Percorso, R + 1, P1)
    Workbooks.Open (Percorso)
       
    Dim wk2 As Workbook: Set wk2 = Workbooks(Files)
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Foglio2")



  • di giabon data: 20/03/2014 22:03:07

    Raffaele mi sembra di aver parlato italiano finora, capisco comunque che il concetto non è così semplice come inizialmente avevo pensato. Il file di destinazione non ho parlato di aprirlo ma di farlo identificare da Excel perché il file è già aperto.
    Grazie per il codice dell'apertura, penso mi possa essere utile studiarlo per eventualmente applicarlo in altre occasioni.

    Questa macro serve per un copia e incolla tra due file "di lavoro" per cui il copia e incolla non è la cosa principale che si fa con quei file, è un centesimo del lavoro che viene fatto, sono file da tenere aperti, confrontare, usare per verificare cose su altri file...
    I due file sono aperti tutto il giorno e vengono modificati spesso, anche usando altri file (senza macro)
    Ciao e grazie



  • di Raffaele_53 (utente non iscritto) data: 20/03/2014 22:23:04

    Non era mio desiderio "parlare Italiano"
    Alcune volte capita anche che l'utente abbia "Excel inglese"

    Onestamente non capisco il Tuo fabbisogno
    Ripeto, spiegalo ad un bambino di 5 anni

    Ps.Conosco un modo per aprire files in modalità "stramba/temporanea"
    Se Tu usi files aperti(server o no,nessun altro li usa), non capisco il problema?
    Qualsiasi modifica odierna, se non viene salvato il files non si può ottenere



  • di giabon data: 20/03/2014 22:42:48

    Provo a spiegarmi con il codice. Il codice sotto funziona solo se prima l'utente ha chiuso tutte le cartelle Excel (tranne quella da cui copiare, su cui risiede la macro) e poi ha aperto la cartella excel su cui copiare, che verrà così identificata dall'istruzione Workbooks.Count
    E' possibile fare in altro modo?
     
        Range("c10:e10").Select
        Selection.Copy
        Workbooks(Workbooks.Count).Activate
        Sheets("destino").Select
        Range("c4").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteValues
        ThisWorkbook.Activate



  • di Raffaele_53 (utente non iscritto) data: 20/03/2014 23:03:24

    >>>Il codice sotto funziona solo se prima l'utente ha chiuso tutte le >>>cartelle Excel (tranne quella da cui copiare, su cui risiede la macro) e poi ha aperto la cartella excel su cui copiare, che verrà così identificata dall'istruzione Workbooks.Count

    Scusami continuo a non capire
    A) tutti quei Select (fanno solo del gran male)

    Al posto di
    Range("c10:e10").Select
    Selection.Copy

    io metterei>>>Range("c10:e10").Copy

    Ps. Però metterei anche le variabili sul files da copiare ex come sopra

    Dim wk1 As Workbook: Set wk1 = Workbooks("??????")
    Dim sh1 As Worksheet: Set sh1 = wk1.Worksheets("Foglio??????")



  • di giabon data: 20/03/2014 23:23:58

    grazie per le ottimizzazioni del codice, prima o poi dovrò impararle...
    cosa assegno come "??????", dovrei scrivere il nome del file o posso scrivere altro? Perchè il nome del file non lo so prima, uso apposta l'escamotage del activeworkbook e workbook.count



  • di Raffaele_53 (utente non iscritto) data: 21/03/2014 17:28:39

    Credo che usi solamente files .xlsx
    Questo pezzo di codice, propone un inputbox dove scrivi solo il nome del files senza .xlsx
    Associa il nome inserito al Workbook con la variabile wk2.
    Se vuoi associare anche il nome del foglio modifica la riga
    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Foglio1") ' da cambiare casomai

    Se non scrivi nulla nell'inputbox, si apre una maschera dove puoi scegliere un files.
    In ogni caso alla fine del codice puoi copiare tra i due fogli
     
    Option Explicit
    
    Sub ricopia()
    Dim wk1 As Workbook: Set wk1 = Workbooks("Master.xlsm") ' da cambiare casomai
    Dim wk2 As Workbook, Trova As Boolean
    Dim sh1 As Worksheet: Set sh1 = wk1.Worksheets("Foglio1") ' da cambiare casomai
    Dim Uriga1 As Long, Uriga2 As Long, R As Long, X As Long, P1 As Long, P2 As Long
    Dim Nome As String, Percorso As String, Patch As String, Files As String
    Nome = InputBox("Inserire nome files Excel")
        If Nome <> "" Then
            Trova = False
            For Each wk2 In Workbooks
                If wk2.Name = Nome & ".xlsx" Then Trova = True
            Next wk2
            Set wk2 = Workbooks(Nome & ".xlsx")
            Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Foglio1") ' da cambiare casomai
        End If
            If Not Trova Then
                Percorso = Application.GetOpenFilename(filefilter:="Excel Files (*.xlsx), *.xlsx")
                If Percorso = "Falso" Then
                    P1 = Len(Percorso)
                    For X = 1 To P1
                        If Mid(Percorso, X, 1) = "" Then
                            R = X
                        End If
                    Next X
                    Patch = Mid(Percorso, 1, R)
                    Files = Mid(Percorso, R + 1, P1)
                    Workbooks.Open (Percorso)
                    Set wk2 = Workbooks(Files)
                    Dim sh2 As Worksheet: Set sh2 = wk2.Worksheets("Foglio1") ' da cambiare casomai
                End If
            End If
    MsgBox (Nome & ".xlsx")
    'MsgBox (Patch)
    'MsgBox (Files)
    sh1.Range("A1") = sh2.Range("A1") 'qui posso copiare tra i due fogli
    Set wk1 = Nothing
    Set wk2 = Nothing
    Set sh1 = Nothing
    Set sh2 = Nothing
    End Sub



  • di giabon data: 22/03/2014 19:18:31

    grazie Raffaele del codice, penso che mi possa tornare sicuramente utile prima o poi.
    Purtroppo in questo caso il file excel è sicuramente già aperto e quindi non posso riaprirlo cercandolo nella maschera, rischierei di perdere o effettuare dei salvataggi non voluti.
    Se si aprisse invece una maschera di scelta tra i file excel che al momento risultano aperti in questo caso sarebbe fantastico... Da idea nasce idea Però ovviamente non ho idea di come si possa fare...