Importazione di dati da database SQL in Excel 2003 VS Excel 2010 (VBA)
-
30-09-2019 - |
Domanda
Quindi, la mia azienda finalmente aggiornato a MS Office 2010. Fino ad ora ho lavorato nel 2003. Io sono un programmatore di SQL, e ho costantemente creare rapporti in Excel che i dati di tiro dal nostro database. La maggior parte del tempo, creerò macro che accettano i parametri che gli utenti potranno digitare in cellule specifiche, modificare la query, e quindi aggiornare in base ai parametri.
Ecco un esempio molto semplice:
- In Excel 2003 vorrei aprire una nuova cartella di lavoro.
- Fare clic su "Dati" e poi "Importa dati esterni" e poi "Nuovo database query".
- E poi si chiede di scegliere una sorgente dati, quindi vorrei selezionare il database che volevo query da (che era stato istituito con una connessione ODBC già).
-
Ho poi annullare fuori dalle finestre Creazione guidata Query e poi quando sono in Query Editor di Microsoft, mi basta inserire nella mia interrogazione.
-
Per semplicità, sarò selezionando
*
da una tabella chiamataAgents
che è solo un elenco degli agenti che lavorano per l'azienda e la loroEmployeeIds
. -
select * from Agents
-
-
Poi ho "x" fuori l'editor di query, e una scatola si apre chiamato "Importa dati" dove si chiede dove si desidera inserire i dati: in un foglio di lavoro esistente? un nuovo foglio di lavoro? ecc Ho solo che restituire i dati nel foglio di lavoro esistente a partire dal cellulare
A2
Allora scrivo questa semplice macro in Visual Basic Editor in un modulo per la cartella di lavoro:
Sub Refresh()
Dim oQuery as QueryTable
Dim oAgent as String
set oQuery = Sheet1.QueryTables(1)
oAgent = Sheet1.Range("A1")
oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'"
oQuery.Refresh
End Sub
I creare un pulsante che gestisce questo macro e bastone in B1
. Così l'utente apre il report, i tipi un nome in A1
, colpisce il pulsante e che l'agente e la loro identificazione viene in su nella tabella sottostante. Davvero semplice diritto? Ma non posso ottenere questo al lavoro in Excel 2010.
Ecco i miei passi e l'errore che segue:
- apro Excel 2010, e andare alla scheda "Dati".
- Nella sezione "dati esterni" clicco su "Da altre origini" e selezionare "Da Mircrosoft query" dalla giù goccia.
- Poi la sceglie il contenitore di origine dati si apre ed è fondamentalmente la stessa esatta come passaggi 3,4 e 5 di cui sopra.
Poi ho scrivere la stessa macro, creare il pulsante e assegnarlo al marco, ma quando clicco il bottone ottengo il seguente errore:
Run-time error '9':
Subscript out of range
mi ha colpito di debug e gli highlights debugger questa linea
Set oQuery = Sheet1.QueryTables(1)
Ho provato a fare questa linea in modo più preciso in questo modo:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)
Ma ho solo ottenere lo stesso errore.
Quindi, in pratica quello che ho bisogno di sapere è come fare questo tipo di cose in Excel 2010. Ma qui è una nota interessante: se creo questo rapporto in Excel 2003, salvarlo come un .xls, quindi aprirlo nel 2010 , Funzionerà. Posso anche salvare una copia come .xlsm poi aperta che e che possa funzionare con questa stessa macro. E 'solo quando creo il rapporto nel 2010, che non riesco a farlo funzionare. Sembra per qualche ragione che proprio non riesce a trovare la query di modificare il testo di comando e quindi aggiornare. Si prega di aiuto, sono stato bloccato su questo per giorni!
Soluzione
In XL2007 e 2010 QueryTables sono contenute in un "ListObject" all'interno del foglio di lavoro, in modo che solo bisogno di regolare il codice per:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)
http://msdn.microsoft.com/en-us/library/ ff841237.aspx
Tim