Condividi:        

Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 19/01/16 19:54

Salve a Tutti amici del Forum,
Oggi mi sono Imbattuto in un problema che anche girando tutto il mondo del web non sono riuscito a risolvere...

Attivando il registratore di Macro..ho importato un file excel esterno al mio foglio mettendolo in Tabella Xml (Dati/Altre Connessioni/Xml)..

Ferno la Registrazione...vedo che mi ha fatto un codice non proprio corto...e individuo il percorso del file...

Ora..non pensavo fosse così Tignoso...da non accettare nel campo "Data Source=" una Variabile dove attraverso una Input Box scriverei il Percorso dei File successivi che dovrà Caricare...

Non c'è stato verso di farlo funzionare..

Ho provato ad esempio:
Data Source=" & PERCORSO & ";ecc...

E la tabella mi da Errore...ho provato senza virgolette...e addirittura lo scambia per Testo e non per Variabile la mia che si chiama PERCORSO...

Vi chiedo...cos'è che Sbaglio ??

Oppure nella macro ottenuta con Registrazione come la Mia..Non si può Impostare una Variabile nell'Array ???

Purtroppo non essendo in ufficio in questo momento sto andando solo a Memoria...Ricordo che la macro cominciava così:

With Activesheet.ListObject.Add (SourceType:=0, Source:=Array("?????;Data Source=C:\Users\Users\Desktop\Elaboratore.xlsm;???????"), ????.QueryTable

Ecco...Altro Non ricordo...

Vi Ringrazio Anticipatamente per l'Aiuto...e mi scuso se non è proprio spiegata così Chiaramente la Faccenda...
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)

Sponsor
 

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 19/01/16 23:56

...Ecco ora che sono a casa al pc...ho fatto una prova simile...così parliamo un po' di vero codice...

Codice: Seleziona tutto
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=C:\Users\User\Desktop\Bilancio\Elabo" _
        , _
        "ratore Dati Bilancio.xlsm;Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry" _
        , _
        " Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk" _
        , _
        " Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:" _
        , _
        "Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP" _
        , _
        "=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False" _
        ), Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("BILANCIO$")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = _
        "C:\Users\User\Desktop\Bilancio\Elaboratore Dati Bilancio.xlsm"
        .ListObject.DisplayName = "Tabella_Elaboratore_Dati_Bilancio"
        .Refresh BackgroundQuery:=False
    End With


se lo faccio così il codice funziona...

quello che voglio fare io è Sostituire nell'array il percorso scritto:
"C:\Users\User\Desktop\Bilancio\Elaboratore Dati Bilancio.xlsm"

...in una Variabile..PERCORSO...

ho provato a fare così:

Codice: Seleziona tutto
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & PERCORSO & ";Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry" _
        , _
        " Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk" _
        , _
        " Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:" _
        , _
        "Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP" _
        , _
        "=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False" _
        ), Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("BILANCIO$")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = PERCORSO
        .ListObject.DisplayName = "Tabella_Elaboratore_Dati_Bilancio"
        .Refresh BackgroundQuery:=False
    End With


...ma nulla da fare...non funziona....e non riesco a spiegarmelo...il problema sta forse nel fatto che le variabili hanno di default le virgolette e che quindi gli da fastidio all'Array...??? oppure sono le & commerciali a dargli noia ???

Credo che se non riuscite ad aiutarmi voi....la posso anche dare su....ho girato tutto il Web...e mi reputo capace di trovare le cose....ma a questa...pare non ci sia soluzione...

Attendo Speranzoso un vostro Intervento...Magari dai Miei Aiutanti di tanto tempo fa...Flash o Antony... ;o)))
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi Anthony47 » 20/01/16 03:01

Mah...
Dando per scontato che da qualche parte hai definito
Codice: Seleziona tutto
PERCORSO = "C:\Users\User\Desktop\Bilancio\Elaboratore Dati Bilancio.xlsm"
a me i due codici producono lo stesso risultato.

A te esce un qualche errore o che cosa?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 20/01/16 12:09

Si Anthony...in realtà io ho messo anche la riga:

on error resume next

prima del codice...e ogni volta la riga mi va oltre...segno che avviene un errore...mentre se sostituisco il secondo codice che ho riportato....con il percorso intero...funziona tutto correttamente...

si naturalmente la variabile la definisco prima... non proprio come hai scritto tu perchè la definisco da una DialogBox...che poi andrà a dare il Nome alla Variabile PERCORSO...

Non so se può essere quello il problema...
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi Anthony47 » 20/01/16 23:56

1) TOGLI SUBITO la linea On Error Resume Next (mettila solo prima delle righe che sai potrebbero dare un errore ragionevole, e subito dopo ripristina la gestione normale con On Error Goto 0). Cosi' se hai un errore almeno il vba ti dice di che tipo e non chiedi al forum di remare al buio.
2) Se hai usato un DialogBox allora dicci quale e dicci come lo hai usato.
In lineadi massima ti conviene sempre procedere a step, quindi prima provi compilando la variabile come ho fatto io e poi, se il primo esito e' favorevole, procedi a usare il dialogBox in alternativa.

Non so se può essere quello il problema...
In genere l'errore sta' proprio nelle cose non dette.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 21/01/16 19:10

Domani faccio la prova....per adesso Grazie Anthony.... !!!! se non dovesse funzionare...copio e incollo il codice da lavoro....e lo posto... Buona Serata !!!
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 22/01/16 12:43

Risolto Risolto Risoltoooooo !!!! Ma come è possibile ?? Cavando On Error Resume Next e mettendo On Error Go To 0 (Che non so cosa significhi)...però ha funzionato !!! Grazie Mille Davvero Anthony !!! ;o)))
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi Anthony47 » 23/01/16 21:43

On Error Resume Next nasconde qualsiasi tipo di errore, per cui e' da usare solo nei momenti in cui si sa che un errore potrebbe esserci ma sarebbe normale.
On Error Goto 0 ripristina la gestione standard degli errori, che e' quella della segnalazione dell'errore e attesa delle decisioni dell'utente.
On Error Goto XYZ sarebbe una gestione personalizzata dell'eventuale errore.

Aver rimosso On Error Resume Next da solo non spiega perche' ora funziona; On Error Goto 0 (in assenza di On Error Resume Next) probabilmente e' superfluo, ma lascialo che non fa male.
Secondo me la chiave e' la gestione del DialogBox che e' precaria, per cui talvolta porta a situazioni di errore (che ora non hai).

Se ti funzionasse nuovamente male indica il tipo di errore, su quale riga, e allega il codice completo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel 2013 Vba aiuto Array Dinamico in tabella Xml

Postdi rosseaux » 24/01/16 19:55

Ok Anthony !!! Spiegazione fantastica !!! Grazie !!!
rosseaux
Utente Senior
 
Post: 151
Iscritto il: 06/01/07 14:11
Località: Alfonsine (RA)


Torna a Applicazioni Office Windows


Topic correlati a "Excel 2013 Vba aiuto Array Dinamico in tabella Xml":


Chi c’è in linea

Visitano il forum: Nessuno e 53 ospiti