› Sviluppare funzionalita su Microsoft Office con VBA › Aprire fogli in cascata tramite un bottone
-
AutoreArticoli
-
All' interno di un foglio excel dovrei inserire un pulsante che tramite codice vba mi apre a cascata 4 file tramite percorso che gli dovrei assegnare io.
Ciao Quando dici assegnare un percorso intendi che
1) sara scritto nel folgio excel
2) sara scritto nel codice vba
3) lo vuoi digitere di volta in volta
4) vuoi fare una ricerca tipo apri file
Ciao
Luca
<em class="bbp-the-quote-cite">Luca73 wrote:Ciao Quando dici assegnare un percorso intendi che
Ciao Luca, vorrei assegnare il percorso tramite codice vba.
Però i percorsi da inserire sono 4.
Mi spiego meglio, nel foglio excel sarà presente un pulsante (ES: Import) e premendo tale pulsante vengono aperti in cascata i 4 file che saranno presi dai percorsi assegnati al pulsante tramite codice vba.<em class="bbp-the-quote-cite">Luca73 wrote:Ciao Quando dici assegnare un percorso intendi che
La seconda variante sarebbe quella di avere i percorsi in 4 celle di excel in 4 righe diverse, il codice vba dovrebbe fare un controllo cella per cella e quando trova che la cella non è vuota eseguire quel percorso e aprire il file, dopo aver aperto il primo file il codice prosegue con la verifica nella cella sottostante, se contiene un percorso lo esegue e così via fino ad arrivare a quando trova una cella vuota e ferma l' esecuzione del codice.
Ciao
ho buttatto giu due righe di codice molto semplici.
Ho ipotizzato che gli indirizzi siano in colonna B in celle diverse da 1
per un'altra colonna basta cambiare il codice.
Fammi sapere
Sub TrovaEApri() Dim Indirizzo As String Dim CellaW As Range Set CellaW = ActiveSheet.Range("B1") Set CellaW = CellaW.End(xlDown) Do Workbooks.Open (CellaW.Text) Set CellaW = CellaW.Offset(1, 0) Loop Until CellaW = "" End Sub<em class="bbp-the-quote-cite">Luca73 wrote:Ciao
Ho provato il codice, funziona, l' unico difetto è che apre soltanto il primo percorso, invece di aprire tutti i percorsi che trova e fermarsi quando incontra una cella vuota.
Mi piego meglio, il tuo codice fa una ricerca in b1.
Io ho i percorsi in B1, B2, B3, B4 il tuo codice mi apre soltanto il percorso in b4 non aprendomi i file situati in b1, b2 e b3.Ciao
Tu avevi scritto
il codice vba dovrebbe fare un controllo cella per cella e quando trova che la cella non è vuota eseguire quel percorso e aprire il file,
E io ti avevo scritto
Ho ipotizzato che gli indirizzi siano in colonna B in celle diverse da 1
Se le celle sono da B1 in giù allora basta eliminare la riga
Set CellaW = CellaW.End(xlDown)Fammi sapere se così funziona.
Ciao
Luca
<em class="bbp-the-quote-cite">Luca73 wrote:Ciao
Un' ultima cosa se posso, e se volessi aprire i 4 file all' interno del foglio di lavoro attuale? Si può?
Ciao Puoi importare i fogli nel work book attuale, uno oppure tutti. I fogli hanno un nome specifico? Li devi importare tutti? dove li vuoi importare (opo l'ultimo del workbook attuale, prima del primo)?
<em class="bbp-the-quote-cite">Luca73 wrote:Ciao Puoi importare i fogli nel work book attuale, uno oppure tutti. I fogli hanno un nome specifico? Li devi importare tutti? dove li vuoi importare (opo l'ultimo del workbook attuale, prima del primo)?
Vorrei importare tutti i workbook. Ogni workbook contiene altri fogli di lavoro quindi non hanno solo un nome. E li vorrei importare dopo l' ultimo
CIao
Prova con
Option Explicit Sub TrovaEApri() Dim Indirizzo As String Dim CellaW As Range Dim MioWB As Workbook Dim OrigWB Dim MIoFgl As Worksheet Dim FglDaSpostare Set MIoFgl = ActiveSheet Set OrigWB = MIoFgl.Parent Set CellaW = MIoFgl.Range("B1") Do Set MioWB = Workbooks.Open(CellaW.Text) For Each FglDaSpostare In MioWB.Sheets FglDaSpostare.Copy after:=MIoFgl Next MioWB.Close False Set CellaW = CellaW.Offset(1, 0) Loop Until CellaW = "" End SubOppure prova con:
Option Explicit Sub TrovaEApri() Dim Indirizzo As String Dim CellaW As Range Dim MioWB As Workbook Dim OrigWB Dim MIoFgl As Worksheet Dim FglDaSpostare Set MIoFgl = ActiveSheet Set OrigWB = MIoFgl.Parent Set CellaW = MIoFgl.Range("B1") Do Set MioWB = Workbooks.Open(CellaW.Text) For Each FglDaSpostare In MioWB.Sheets FglDaSpostare.Copy after:=OrigWB.Sheets(OrigWB.Sheets.Count) Next MioWB.Close False Set CellaW = CellaW.Offset(1, 0) Loop Until CellaW = "" End SubTi ringrazio Luca, funzionano entrambi alla grande.
Grazie dell' aiuto a presto.
-
AutoreArticoli
