Post by MimmoC:\Documents and Settings\Maiorino\Documenti\Ufficio\Inpdap\CDG2007
(ma poi ovviamente posso cambiarlo?)
Certo. Cambiando nome percorso completo e path nel codice che trovi
alla fine del post ( le 2 costanti iniziali )
Post by Mimmo2) Il nome delle tabelle.
Input_Risorse, Input_Pianificazione_FP
[cut]
Per evitarti una serie di passaggi manuali ti propongo questa
scorciatoia da programmazione VBA con la premessa che per l'utilizzo
di microsoft query non è affatto necessario l'uso di VBA. Apri un file
di Excel nuovo oppure seleziona un foglio vuoto di un file già
esistente.
Premi Alt + F11 per aprire la finestra VBA. Dal menù Inserisci
seleziona Modulo. Nella finestra Codice ( se non è visibile seleziona
Codice dal menù Visualizza )
incolla il codice sottostante. Premi Alt + F11 per tornare ad Excel.
Alt + F8 apre la finestra macro. Seleziona SetUpQueryTable e clicca su
Esegui.
Se tutto funziona dovresti importare i dati dall'origine dati. Se non
dovesse essere già visibile la barra flottante
Dati esterni rendila visibile puntando un'area vuota della barra dei
menù , cliccando con il destro, e spuntando la riga Dati esterni.
Perchè la barra sia attiva è necessario che sia selezionata almeno una
cella dalla tabella query. Clicca sulla prima icona della barra
( modifica query...)
Ti si apre Microsoft Query; dai uno sguardo alla struttura della
query, in particolare alla relazione tra le 2 tabelle origine dati ),
all'anteprima dei dati e
all'istruzione SQL ( icona con scritta SQL ). Puoi salvare la Query
dal menù File > Salva con Nome della finestra del Programma. Il file
salvato con estensione .dqy
può essere visionato / modificato con Blocco note. Se aperto con Excel
( apertura di Default ) restituisce un foglio di lavoro corrispondente
alla query.
Il file serve inoltre come origine dati nell'importazione dati da
Excel ( Dati >> Importa dati esterni >>Importa dati...>> ecc)
Quale cartella di salvataggio scegli quella che ti presenta il
programma. Chiudi Microsoft Query. Dai uno sguardo alle proprietà
della Tabella Query
(seconda icona della barra Dati esterni ). Chiudi la finestra delle
proprietà. Apri l'origine dati modifica i dati di record già esistenti
( non accodarne di altri ), mantenendo
rigorosamente la formattazione preesistente); chiudi il file origine
dati salvando le modifiche. Torna al file di importazione dati; se la
tabella query non si è già aggiornata
premi sul punto esclamativo rosso della barra Dati esterni.
Ora puoi fare tutte le Pivot che vuoi che hanno come origine dati la
tabella query importata ( N.B. quando usi la creazione guidata Tabella
Pivot
non fare riferimento ad un intervallo fisso ma all'intervallo
denominato corrispondente all'area della tabella query importata ( nel
nostro caso scrivi
nell'editore di referenze: CostiProventi
Poichè credo vi siano delle imprecisioni nei dati di esempio che mi
hai postato ( le prime 2 tabelle pivot riportano dati non presenti
nelle rispettive tabelle di input )
verifica che tutto funzioni secondo le tue aspettative. In particolare
vorrei che mi chiarissi se
1)I codici commesse della prima tabella di input sono univoci.
2)I codici commesse della seconda tabella di input sono univoci e, in
caso negativo, se l'allineamento dei record delle 2 tabelle ( la
relazione )
deve interessare anche il codice di area.
Perchè il tutto funzioni è necessario che l'origine dati sia nella
posizione che mi hai indicato, l'intervallo denominato sia quello
giusto e i nomi
dei campi sia corretto.
N.B. Il codice sottostante può essere utilizzato solo a foglio attivo
privo di tabelle query preesistenti. Qiundi, prima di rilanciarlo,
introduci un foglio di lavoro nuovo dopo aver eliminato quello con
una tabella query. Una volta importa la tabella query, per la sua
funzionalità non è affatto necessario
mantenere il modulo con il codice, che può, qiundi, anche essere
eliminato. In tal modo all'apertura del file non ti verranno dati i
messaggi che il file contiene Macro.
Fammi sapere se vi sono problemi
Ciao Elio
Sub SetUpQueryTable()
Const strDBQ As String = "C:\Documents and Settings\Maiorino\" _
& "Ufficio\Inpdap\CDG2007.xls"
Const strDefaultDir As String = "C:\Documents and Settings\" _
& "Maiorino\Documenti\Ufficio\Inpdap"
With ActiveSheet.QueryTables.Add _
(Connection:="ODBC;" _
& "DBQ=" & strDBQ & ";" _
& "DefaultDir=" & strDefaultDir & ";" _
& "Driver={Driver do Microsoft Excel(*.xls)};" _
& "DriverId=790;" _
& "FIL=excel 8.0;MaxBufferSize=2048;" _
& "MaxScanRows=8;" _
& "PageTimeout=5;ReadOnly=1;SafeTransactions=0;" _
& "Threads=3;UID=admin;UserCommitSync=Yes;", _
Destination:=Range("A1"))
.CommandText = _
"SELECT Input_Risorse.Commessa, " _
& "Input_Risorse.Area, Input_Risorse.Mese, " _
& "Input_Risorse.Costointerni, " _
& "Input_Risorse.CostoEsterni, " _
& "Input_Pianificazione_FP.Area, " _
& "Input_Pianificazione_FP.Mese, " _
& "Input_Risorse.Proventi " _
& "FROM `" _
& strDBQ & "`.Input_Pianificazione_FP Input_Pianificazione_FP, "
_
& "`" & strDBQ & "`.Input_Risorse Input_Risorse " _
& "WHERE " _
& "Input_Risorse.Commessa = Input_Pianificazione_FP.Commessa"
.Name = "CostiProventi"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub