2010-10-28 6 views
0

Je dois utiliser VBA à partir d'Excel pour charger un classeur Excel et le transférer vers une base de données. Je suis arrivé à ce point et Excel se bloque et doit redémarrer. Mon plan était d'utiliser ce qui suit mais je ne peux pas aller aussi loin.Comment convertir un fichier XLS Excel en un fichier MDB Access à l'aide d'Excel VBA

acc.DoCmd.TransferDatabase 

Des idées? J'ai googlé pendant des jours et je n'ai rien trouvé. * Edit: Merci pour les réponses jusqu'à présent
Je dois absolument utiliser Excel VBA, malheureusement. Il y a une feuille de calcul Excel qui a un tas de colonnes vides qui sont reconnues par le moteur Jet comme des colonnes définies, trop nombreuses en fait> 255 (ou est-ce> 256?). Je ne veux pas ouvrir la feuille de calcul Excel pour une raison quelconque (cela prend beaucoup trop de temps sur le réseau). Je n'ai pas l'option ou le choix de le formater correctement ou de le nettoyer. Il est facile de convertir une feuille de calcul XLS en une base de données MDB à l'intérieur de l'accès comme vous le dites tous, mais ce n'est pas une option. Comme je l'ai dit, j'ai besoin d'utiliser VBA dans Excel pour manipuler l'objet d'accès pour convertir un classeur XLS en une base de données MDB; Une fois que j'ai ceci, le reste sera du gâteau. Merci beaucoup! J'aime ce site.

+3

Pourquoi vous devez utiliser Excel pour faire cela? Il semble que Microsoft recommande de charger le fichier Excel à partir d'Access. – bernie

+2

Est-ce une erreur d'impression acc.OpenCurrentDatabase "C: \ Test.xls"? Vous voulez certainement dire acc.OpenCurrentDatabase "C: \ Test.'mdb'"? – Fionnuala

+1

Brettville, bienvenue sur StackOverflow. Pourriez-vous éditer votre question et nous donner plus de détails? Pouvez-vous nous expliquer étape par étape ce que vous voulez faire? Essayez-vous d'importer une feuille de calcul Excel dans un Access DB? – PowerUser

Répondre

1

Cette tâche est simple si vous êtes en mesure d'utiliser VBA à partir de Microsoft Access; par exemple .:

DoCmd.TransferSpreadsheet , , _ 
"tblImportFromExcel","C:\path\to\myfile.xls", True, "A1:B200" 

TransferSpreadsheetdocumentation.

+0

Je suis d'accord que c'est le plus simple, mais l'affiche originale ne pouvait-elle pas simplement créer et contrôler un objet Access à partir d'Excel? – PowerUser

+0

@power: affichez cela comme une réponse; Je vais upvote s'il y a un échantillon de code! :-) – bernie

0

Quel est le problème avec la solution proposée par Adam Bernier (avec l'ajout de PowerUser concernant l'utilisation d'un objet d'accès à partir d'Excel); votre dernier commentaire était après ces suggestions et vous n'avez pas répondu.

Dim acc As New Access.Application 
acc.OpenCurrentDatabase "C:\Test.mdb" 

acc.DoCmd.TransferSpreadsheet _ 
    TransferType:=acImport, _ 
    Spreadsheettype:=acSpreadsheetTypeExcel8, _ 
    TableName:="tblImportFromExcel", _ 
    Filename:="C:\path\to\myfile.xls", _ 
    HasFieldNames:=True, _ 
    Range:="A1:B200" 

(Adapter au besoin, en particulier les HasFieldNames et Range). Si cela ne fonctionne pas, il y a probablement quelque chose qui ne va pas dans votre feuille Excel. La seule autre chose que je peux penser (mais cela signifierait pour ouvrir le fichier) est d'enregistrer l'Excel-Sheet en tant que XML et transformer les valeurs via XSLT dans un format plus approprié, puis importer le XML résultant. Mais cela pourrait être exagéré (quelle est la complexité de votre fichier, à quelle fréquence avez-vous besoin de cette importation pour continuer).

HTH Andreas

+0

Il doit être à partir de Excel – DontFretBrett

+0

@bretville, ce _is_ à partir d'Excel (même si cela ne ferait pas de différence s'il venait de Word par exemple. Assurez-vous simplement dans VBA que vous avez défini la référence à MS Access que vous pouvez utiliser son modèle d'objet Avez-vous essayé l'exemple? –

Questions connexes