attivazione di specifico workbook
Hai un problema con Excel? 
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...
Vuoi Approfondire?