8
votes

Accès à l'ouverture de Excel VBA

Edit: La réponse à cette question peut être trouvée dans les commentaires de la réponse acceptée.

Je tente d'ouvrir une base de données d'accès à partir d'un bouton Cliquez dans mon fichier Excel. J'ai actuellement ce code: p>

Private Sub bttnToAccess_Click()

Dim db As Access.Application

Set db = New Access.Application
db.Application.Visible = True
db.OpenCurrentDatabase "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb"

End Sub


2 commentaires

Essayez-vous d'exécuter l'interface graphique d'accès à l'intérieur de Excel ou d'essayer simplement de vous connecter à la base de données et d'interroger les données à l'intérieur?


Je fournis simplement un accès facile à la base de données pour l'utilisateur. Je suis extrêmement novice chez VBA et je ne suis même pas sûr de ce que l'ACESS GUI est. La base de données est essentiellement un outil séparé pour planifier un mariage. Les fichiers Excel et Access seront éventuellement liés à une importation.


5 Réponses :


7
votes

N'essayez pas d'ouvrir l'application d'accès alors; Créez simplement un objet de connexion en utilisant l'une des technologies d'accès aux données: - Ole-DB ou - ODBC.

Google "Strings de connexion ODBC" ou "Strings de connexion OLE-DB" pour obtenir des détails en fonction de votre configuration particulière (et d'accéder à la filetype).

Probablement Adodb est la bibliothèque de courant la plus facile à utiliser pour votre accès aux données.

mise à jour: Essayez d'importer les données de l'accès à l'aide de la Data -> à partir de l'Assistant Accès . YU peut toujours utiliser l'installation de recodage de macro pour générer automatiquement un code VBA pour vous, qui créera une infrastructure pour vous; Je l'utilise régulièrement lors de l'exploration de nouvelles portions du modèle d'objet VBA.

Mise à jour - résolution finale du problème, des commentaires ci-dessous

Cela peut être parce que la variable est hors de portée; Déplacez la déclaration de dB en dehors de la fonction, au niveau de module


5 commentaires

J'ai très vite parcouru certains des résultats sur Google et je n'avais aucune idée de quoi de parler de là ou d'où aller de là. Ce projet est destiné à une classe d'introduction au VBA à l'école, donc je viens de commencer à apprendre. De plus, je pense que mon commentaire ci-dessus sur l'importation aurait pu confondre mes intentions. J'ai conçu une base de données pour la planification de mariage qui gère les listes d'invités, les fournisseurs et quelques autres choses. Le fichier Excel que je travaille désormais davantage sur le côté financier du mariage (modélisation, min max surtout des calculs, etc.). Je veux vraiment juste pouvoir ouvrir le fichier d'accès et rien d'autre.


La navigation d'un jeu d'enregistrements peut être un peu difficile à mâcher au début si OP est extrêmement novice à VBA comme il le dit.


Ouais enregistrer une macro est un excellent moyen d'apprendre. Cependant, je n'essaie pas d'importer quoi que ce soit pour le moment. Tout ce que j'espère accomplir, c'est de donner une alternative à aller au bureau et à ouvrir le fichier à partir de là. Je veux ouvrir le fichier, puis rien d'autre. Comme je l'ai dit dans la question, il semble que le code fourni a ouvert l'accès mais la ferme immédiatement aussi.


Cela peut être parce que la variable est hors de portée; Déplacez la déclaration de dB en dehors de la fonction, au niveau du module.


Cela semble avoir travaillé! Merci une tonne et désolé pour toute la confusion.



3
votes

Le code a commencé l'accès en créant une instance d'application attribuée à une variable d'objet. À la fin de la procédure, la variable est passée hors de portée afin d'accéder à l'arrêt.

Vous avez accepté une réponse pour utiliser une variable de niveau de module pour l'instance d'application d'accès. Dans ce cas, l'accès reste en cours d'exécution après la fin de la procédure. Toutefois, si l'utilisateur sort Excel, l'accès se fermera également. p>

Si l'objectif est de démarrer l'accès et de la laisser courir jusqu'à ce que l'utilisateur décide de le fermer, commencez simplement l'accès directement sans affecter l'instance d'application à une variable d'objet ( Set DB = nouvel accès.application code>). Que la variable dB code> serait utile si votre code Excel avait besoin de celui-ci à d'autres fins. Cependant, il n'est actuellement utilisé que pour ouvrir le fichier dB. P>

Vous pouvez utiliser la méthode exécuter code> de wscript.shell code> pour ouvrir votre fichier db dans une session d'accès. p>

Private Sub bttnToAccess_Click()
    Const cstrDbFile As String = "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb"
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run cstrDbFile
    Set objShell = Nothing
End Sub


1 commentaires

J'ai essayé cette méthode et il a donné une erreur d'exécution "Méthode" Run "de l'objet 'iwshshshell3' a échoué ...



1
votes

Je sais que c'est un vieux fil, mais vous obtiendrez cette erreur dans Excel VBA si vous essayez d'ouvrir une base de données d'accès, mais vous n'avez pas deux références spécifiques cliquées. (Outils, références sur l'écran de l'éditeur VBA). Vous devez cliquer sur «Microsoft Access 15.0 Object Library» et «Microsoft ActiveX Data Objections 6.1 Bibliothèque».


0 commentaires

1
votes

Supprimer la déclaration nouvelle alors cela fonctionne


0 commentaires

1
votes

en fait, il est assez simple: strong> xxx pré>

pour que cela fonctionne, vous devez déclarer DB comme base de données au niveau du module. P>

 Dim db As Database  'Requires reference to the Microsoft
                     'Access Database Engine Object Library


3 commentaires

DB doit être DAO (objets d'accès aux données) pas ADO (objets de données actifs x)!


@ComputerverSteher Bonne prise!


Défaut habituel. Toujours déclarer avec la bibliothèque sur les objets Dao / Adodb