Ecriture d'Excel VBA pour recevoir des données d'Access
Je suis en train d'écrire une application excel qui puise dans une base de données Access pour le travail. Lorsque l'utilisateur ouvre l'outil Excel, un tableau de données doit remplir l'une des feuilles de calcul à partir de la base de données Access que j'ai créé. J'ai écrit le code VBA dans excel et je reçois une Erreur d'Exécution: "429" Composant ActiveX ne Peut pas Créer un Objet.
Les autres questions sont tous écrits à partir d'Access, mais je crois que j'ai besoin de ce code écrit à partir du fichier de classeur Excel. Le code que j'ai écrit est dans le Workbook_Open()
fonction de sorte que les données recueillies droit que l'utilisateur ouvre le fichier. Merci beaucoup pour l'aide. BTW, je suis à l'aide de Access 2007 et Excel 2010.
Private Sub Workbook_Open()
'Will fill the first listbox with data from the Access database
Dim DBFullName As String
Dim TableName As String
Dim FieldName As String
Dim TargetRande As String
DBFullName = "D:\Tool_Database\Tool_Database.mdb"
Dim db As DAO.Database, rs As Recordset
Dim intColIndex As Integer
Set TargetRange = Range("A1")
Set db = OpenDatabase(DBFullName)
Set rs = db.OpenRecordset("SELECT * FROM ToolNames WHERE Item = 'Tool'", dbReadOnly)
' Write the field names
For intColIndex = 0 To rs.Fields.Count - 1
TargetRange.Offset(1, intColIndex).Value = rs.Fields(intColIndex).Name
Next
' Write recordset
TargetRange.Offset(1, 0).CopyFromRecordset rs
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
source d'informationauteur thebiglebowski11
Vous devez vous connecter pour publier un commentaire.
Tyler, Pourriez-vous s'il vous plaît tester ce code pour moi? Si vous obtenez une erreur, vous obtiendrez une Boîte de Message. Il suffit de poster un cliché de la Boîte de Message.
DAO et ADO inclure objet recordset types. Cependant, ils ne sont pas compatibles. Votre déclaration de l'
rs
variable objet est ambigu.Un problème potentiel est que si votre projet contient une référence à l'ADO, et la préséance de cette référence est au-dessus de votre référence à DAO,
rs
sera le vent comme un jeu d'enregistrements ADO plutôt que d'un jeu d'enregistrements DAO.Je ne suis pas certain que la cause de l'erreur que vous voyez. Cependant réglage
rs
àdb.OpenRecordset(something)
devrait échouer si rs est un jeu d'enregistrements ADO parce queOpenRecordset
renvoie un jeu d'enregistrements DAO.Je pense que vous devriez changement la déclaration:
Même si ce changement ne permet pas de résoudre votre problème, je vous encourage à toujours qualifier le type lors de la déclaration d'objet recordset variables ... pour éviter toute ambiguïté.
Et si ce n'est pas le corriger, s'il vous plaît dites-nous quelle ligne de votre code déclenche l'erreur courante que vous vous voyez.
Voici un autre drapeau rouge:
Plus tard, vous avez:
Ajouter
Option Explict
à la section Déclarations du module. Ensuite, choisissez Debug->Compiler à partir de l'éditeur de VB du menu principal. Cet effort permettra de mettre en évidence mal orthographié les noms de variables, et aussi de vous avertir des erreurs de syntaxe.Il fonctionne très bien sur ma machine (sauf les noms de champ d'être écrasés par la première ligne de données - pour les noms de champ tu veux sans doute dire TargetRange.Offset(0, intColIndex)).
Avez-vous un Outils -> Références... à Microsoft DAO 3.6 Object library?
Vous êtes peut-être à l'aide de la version 64 bits d'Excel 2010 (consulter le Fichier->Aider dans le "à Propos de Microsoft Excel" l'article)? Si donc l'ancienne version DAO bibliothèques ne fonctionne pas, et vous aurez besoin pour installer le 64 bits ACE bibliothèque de DAO, qui est disponible pour la version 64 bits.