VBA: importare dati da file .xlsm a file .xlsm

Anonimo
2013-08-21T11:18:19+00:00

Ciao a tutti, 

ho un nuovo problema di automazione. Ho bisogno di importare dei dati, contenuti in un foglio di lavoro di un file Excel con attivazione macro (.xslm) in un altro foglio di lavoro (sempre con attivazione macro). Mi sono ispirato ad un codice scritto da Mauro un paio d'anni fa, e l'ho riadattato come segue (il codice si trova in calce). Tuttavia, quando eseguo il codice, ottengo il seguente errore:

"-2147467259: External table is not in the expected format".

L'errore, in particolare, occorre nella parte di codice in cui si definisce la connessione "cn" (nel frammento di codice e' evidenziata in grassetto). Il codice utilizzato cosi' come Mauro l'aveva creato funziona, ma nel momento in cui modifico i dati non funziona piu'. Quello che c'e da sapere e':

  1. Il file da cui estrarre i dati contiene macro e collegamenti, nonche' filtri dati.
  2. Purtroppo non posso cambiare niente nel file d'origine (pur sapendo che spesso i problemi sono causati dagli spazi nei nomi).

Qualcuno sa come aiutarmi?? Grazie in anticipo!


Public Sub Controlling()

On Error GoTo RigaErrore

Dim cn As Object

Dim rs As Object

Dim sh As Worksheet

Set cn = CreateObject("ADODB.Connection")

Set rs = CreateObject("ADODB.Recordset")

Set sh = ThisWorkbook.Worksheets("Support")

Data = "Reporting - Timeseries_mont_PL"

With cn

.CursorLocation = 2

.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data " & _

"Source=C:\Chris - Liquidity Overview Report\controlling_master_26_gecko New1.xlsm;Extended Properties=" _

& """" & "Excel 8.0;HDR=Yes;" & """"

End With

With rs

.CursorLocation = 2

.Open "SELECT * FROM [Data$]", cn, 3

End With

With sh

.Range("A1").CopyFromRecordset rs

End With

RigaChiusura:

If rs.State = 1 Then

rs.Close

End If

If cn.State = 1 Then

cn.Close

End If

Set rs = Nothing

Set cn = Nothing

Set sh = Nothing

Exit Sub

RigaErrore:

MsgBox Err.Number & vbNewLine & Err.Description

Resume RigaChiusura

End Sub


Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-08-21T14:35:53+00:00

Come ti ho gia' detto l'altra volta, non so piu' in che lingua ringraziarti quindi credo proprio che iniziero' a farlo in lingua straniera. Stavolta e' ceco :D 

Děkuji moc!

Oltre alla risposta di Andrea, qui trovi tutte le stringhe di connessione(seleziona Excel nel tuo caso): http://www.connectionstrings.com/:

Zdravím a starat se o sebe

(che i cechi mi perdonino)

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-08-21T13:05:18+00:00

...

With cn

.CursorLocation = 2

.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data " & _

"Source=C:\Chris - Liquidity Overview Report\controlling_master_26_gecko New1.xlsm;Extended Properties=" _

& """" & "Excel 8.0;HDR=Yes;" & """"

End With

...

Ciao Matteo,

prova ad utilizzare la seguente stringa di connessione.

Andrea.


.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _

"Data Source=C:\Chris - Liquidity Overview Report\controlling_master_26_gecko New1.xlsm;" & _

"Extended Properties=""Excel 12.0 Macro;HDR=YES"";"


La risposta è stata utile?

0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-08-21T13:26:32+00:00

    Come ti ho gia' detto l'altra volta, non so piu' in che lingua ringraziarti quindi credo proprio che iniziero' a farlo in lingua straniera. Stavolta e' ceco :D 

    Děkuji moc!

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-08-21T11:46:33+00:00

    Ulteriore informazione: si', il motivo per cui e' cosi' lento credo che sia proprio il fatto che il file aperto rallenta tutto Office. Infatti, se provo a cancellare i dati importati (quindi nel file di destinazione) mentre il file di origine e' ancora aperto impiega 15 secondi, mentre se eseguo la stessa operazione con il file chiuso ci sta meno di un secondo. Credo che il tutto possa risolversi se c'e' un modo di impostare il codice senza bisogno di aprire il file sorgente, no?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-08-21T11:37:34+00:00

    Nuova informazione: se il Source File e' aperto, anche se lentissimo (forse perche' e' pieno di dati) funziona! C'e' un modo per permettere la stessa esecuzione senza aprire il file di origine? Inoltre, da cosa dipende la lentezza nella copiatura? (e' possibile che dipenda dal fatto che il file di origine e' un file molto carico che rallenta l'intera esecuzione di tutte le applicazioni office)?

    La risposta è stata utile?

    0 commenti Nessun commento