Question

Je débogage du code et avez besoin de savoir où
DoCmd.TransferSpreadsheet acImport, , ".....
tombe en panne donc j'ai décidé de l'importer « manuellement » ligne par ligne pour voir où il tombe.

Je suppose que quelque chose comme ça est ce que je cherche:

mySpreadSheet = ConnectTo(Spreadsheet.xlsx)
while(!mySpreadSheet.EOF)
   get(mySpreadSheet.nextLine)
   SQL("UPDATE MyTable with mySpreadSheet.nextLine")

J'ai essayé googler en vain. Toute aide est très appréciée!


Informations complémentaires:

  • Les noms de colonnes de la feuille de calcul et la table d'accès sont identiques.
  • Chaque type de données est nvarchar (MAX) (ou "Mémo" Access appelle)
  • La table est une table liée à SQL Server 2008
Était-ce utile?

La solution

Vous pouvez créer une connexion ADO à votre feuille de calcul (voir Les chaînes de connexion pour Excel 2007 ), puis ouvrir un jeu d'enregistrements ADO à cette connexion (voir StackOverflow: ADODB dans VBA dit recordset champ Excel est vide quand il est pas par exemple).

Ensuite, passer à travers les rangées d'enregistrements, et créer une instruction SQL INSERT en utilisant les valeurs de la ligne.

strInsert = "INSERT INTO MyTable (first_field, second_field) VALUES ('" & -
    rs2.Field(0).Value & "', '" & rs2.Field(1).Value & "');"
Debug.Print strInsert
CurrentDb.Execute strInsert, dbFailonerror

Ce Snipped de code suppose FIRST_FIELD et SECOND_FIELD sont des types de données texte. Si elles sont numériques, perdre les guillemets simples.

Je pense que cela à peu près ce que vous avez demandé. Cependant, avant de recourir au code je vérifier si les importations de feuilles de calcul proprement dans une nouvelle table d'accès natif. (En outre, vérifier si les types de données et les contraintes sur cette nouvelle table sont compatibles avec celles de la table liée SQL Server.) Si cela fonctionne, peut-être essayer d'importer la feuille de calcul directement dans SQL Server à partir du Management Studio, ou tout autre outil approprié.

Autres conseils

ADO fonctionne bien si vous avez une mise en page de la feuille bien définie de vos données (HansUp réponse). Si vous avez besoin de contrôle supplémentaire avant le chargement des objets, vous pouvez accrocher dans le classeur Excel, puis retirez tout ce que vous les données comme. Cela dépend vraiment du niveau de contrôle dont vous avez besoin.

Public Sub LoadExcelToAccess(xlPath As String)
'uses late binding to open excel workbook and open it line by line

'make reference to Microsoft Excel xx.x Object Model to use native functions, requires early binding however

    Dim xlApp As Object 'Excel.Application
    Dim xlWrk As Object 'Excel.Workbook
    Dim xlSheet As Object 'Excel.Worksheet
    Dim i As Long
    Dim sql As String

    Set xlApp = VBA.CreateObject("Excel.Application")

    'toggle visibility for debugging
    xlApp.Visible = False

    Set xlWrk = xlApp.Workbooks.Open(xlPath)
    Set xlSheet = xlWrk.Sheets("Sheet1") 'modify to your perticular sheet

    'depends on what your trying to do with the sheet
    For i = 1 To 10

        'quick and dirty:  best to load items into custom class collection, then do processing there
        sql = "Insert Into [Temp] (Col1) VALUES (" & xlSheet.Cells(i, 1).Value & ")"
        DoCmd.RunSQL sql
    Next i

    'make sure to dispose of objects
    xlWrk.Close
    xlApp.Quit

    Set xlSheet = Nothing
    Set xlWrk = Nothing
    Set xlApp = Nothing
End Sub

Pour le dépannage des fins, essayez de lier à la feuille de calcul et de voir quels sont les problèmes que vous rencontrez, y compris l'affichage de données mal lorsque vous affichez en feuille de données.

Vous pouvez également essayer de copier simplement vos données Excel pour le presse-papiers et le coller dans votre table Access. Quelle que soit échoue seront gravés en «Coller des erreurs de table par Access.

Deux options supplémentaires:

  1. Lien la feuille de calcul dans Access comme une table. Dans Access 2007, allez à « données externes » et de sélectionner « feuille de calcul Excel d'importation ». Vous devez importer un datatable existant, un nouveau lien datatable ou juste fichier Excel. Ensuite, vous travaillerez avec cette nouvelle table "Excel" comme une table d'accès (considéré les problèmes de performance, en dernier cas).

  2. Essayez de résoudre le problème de Docmd.TransferSpreadsheet. Je l'ai utilisé cette méthode depuis quelques années, et il fonctionne très bien, malgré cela devrait être un peu délicat dans certains cas (je belive c'est votre cas). S'il vous plaît, son digne si vous donnez plus d'informations sur votre problème avec cette méthode, y compris votre version Access et Excel.

J'espère que je l'ai aidé. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top