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:

  1. In Excel 2003 vorrei aprire una nuova cartella di lavoro.
  2. Fare clic su "Dati" e poi "Importa dati esterni" e poi "Nuovo database query".
  3. 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à).
  4. 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 chiamata Agents che è solo un elenco degli agenti che lavorano per l'azienda e la loro EmployeeIds.

    • select * from Agents

  5. 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:

  1. apro Excel 2010, e andare alla scheda "Dati".
  2. Nella sezione "dati esterni" clicco su "Da altre origini" e selezionare "Da Mircrosoft query" dalla giù goccia.
  3. 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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top