di Excelsior » 23/02/10 23:14
Ciao Antony47,
veramente sto usando con successo una macro che ho rielaborato da uno spunto preso dal web, tramite la quale riesco a copiare su un foglio excel attivo una zona di un worksheet appartenente a un altro file excel CHIUSO.
La sintassi è la seguente:
1) una funzione:
Private Function PrendiDati(percorso, nomefile, foglio, rif)
Dim arg As String
If Right(percorso, 1) <> "\" Then percorso = percorso & "\" 'controlliamo anche che nella stringa "percorso" sia stata inserita la barra \
If Dir(percorso & nomefile) = "" Then
PrendiDati = "File Non Trovato"
Exit Function
End If
' usiamo la variabile "arg" assegnando la concatenazione dei valori reperiti con gli argomenti dalla macro "RilevaDati" - questa stringa non occorre modificarla
arg = "'" & percorso & "[" & nomefile & "]" & foglio & "'!" & Range(rif).Range("A1").Address(, , xlR1C1)
' Eseguiamo una XLM macro il cui risultato è assegnato alla funzione stessa
PrendiDati = ExecuteExcel4Macro(arg)
End Function
2) e la macro che la richiama e copia i dati presi da un altro file CHIUSO:
Sub RilevaDati1()
Application.ScreenUpdating = False
Sheets("Foglio1").Select
percorso = ActiveSheet.Range("path1").Value + ActiveSheet.Range("path2").Value + "\"
file = ActiveSheet.Range("file").Value + ".xls"
foglio = ActiveSheet.Range("foglio").Value
For r = 1 To 10 ' numero righe
For c = 1 To 2 ' numero colonne , in questo caso A e B
cella = Cells(r, c).Address
Sheets("Foglio1").Select
Cells(r, c) = PrendiDati(percorso, file, foglio, cella) ' richiamo della funzione
Rowmax = 10 ' esecuzione della barra di scorrimento
Colmax = 2
conteggio = conteggio + 1
Percentuale = conteggio / (Rowmax * Colmax)
Progressione.Show
With Progressione
.Frame1.Caption = Format(Percentuale, "0%")
.Label1.Width = Percentuale * (.Frame1.Width - 10)
.Caption = " Esecuzione scarico dati"
End With
DoEvents
Next c
Next r
'
Application.ScreenUpdating = True
Progressione.Hide
End Sub
Perciò mi sembra che sia possibile in via di principio effettuare operazioni su file SENZA APRIRLI EFFETTIVAMENTE.
Grazie per la tua attenzione