VBA, um Excel-Tabellenkalkulation in Zeile für Linie zu importieren
-
24-10-2019 - |
Frage
Ich debuggiere einen Code und muss herausfinden, wo a
DoCmd.TransferSpreadsheet acImport, , ".....
scheitert, also habe ich beschlossen, es "manuell" line-by-line zu importieren, um zu sehen, wohin es fällt.
Ich nehme an, so etwas ist das, wonach ich suche:
mySpreadSheet = ConnectTo(Spreadsheet.xlsx)
while(!mySpreadSheet.EOF)
get(mySpreadSheet.nextLine)
SQL("UPDATE MyTable with mySpreadSheet.nextLine")
Ich habe versucht, ohne Erfolg zu googeln. Jede Hilfe wird sehr geschätzt!
Zusätzliche Information:
- Die Spaltennamen der Tabelle und der Zugriffstabelle sind identisch.
- Jeder Datentyp ist Nvarchar (max) (oder "Memo", wie Zugriff es nennt)
- Die Tabelle ist eine verknüpfte Tabelle mit SQL Server 2008
Lösung
Sie können eine ADO -Verbindung zu Ihrer Tabelle erstellen (siehe Verbindungszeichenfolgen für Excel 2007) und öffnen Sie ein Ado -Datensatz mit dieser Verbindung (siehe Stackoverflow: ADODB -Datensatz in VBA sagt, dass Excel -Feld leer ist, wenn es nicht ist zum Beispiel).
Bewegen Sie dann die Datensatzzeilen und erstellen Sie eine SQL -Einfügeanweisung mit den Werten der Zeile.
strInsert = "INSERT INTO MyTable (first_field, second_field) VALUES ('" & -
rs2.Field(0).Value & "', '" & rs2.Field(1).Value & "');"
Debug.Print strInsert
CurrentDb.Execute strInsert, dbFailonerror
Dieser Code geht davon aus, dass First_field und Second_Field Textetypen sind. Wenn sie numerisch sind, verlieren Sie die einzelnen Zitate.
Ich denke, das tut ungefähr das, was Sie gefragt haben. Bevor ich jedoch auf den Code zurückgreife, prüfe ich, ob die Tabelle sauber in eine neue native Zugangstabelle importiert. (Überprüfen Sie außerdem, ob die Datentypen und Einschränkungen in dieser neuen Tabelle mit denen der verknüpften SQL -Servertabelle kompatibel sind.) Wenn dies funktioniert, versuchen Sie möglicherweise, die Tabelle direkt in SQL Server aus dem Management Studio zu importieren, oder das Tool ist angemessen.
Andere Tipps
ADO funktioniert gut, wenn Sie ein gut definiertes Blattlayout Ihrer Daten haben (HANSUP -Antwort). Wenn Sie vor dem Laden der Objekte eine zusätzliche Steuerung benötigen, können Sie sich in die Excel -Arbeitsmappe einbinden und dann alle von Ihnen gefallenen Daten herausziehen. Es hängt wirklich von dem Kontrollniveau ab, den Sie benötigen.
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
Versuchen Sie zur Fehlerbehebung, um mit der Tabelle zu verlinken und zu sehen, auf welchen Problemen Sie auftreten, einschließlich Daten, die falsch angezeigt werden, wenn Sie es in der Datenblattansicht anzeigen.
Sie können auch versuchen, Ihre Excel -Daten in die Zwischenablage zu kopieren und sie in Ihre Zugriffstabelle einzufügen. Was auch immer fehlschlägt, wird durch Zugriff in eine Tabelle "Fehler" Fehler geschrieben.
Zwei zusätzliche Optionen:
Verknüpfen Sie die Tabelle in Zugriff wie eine Tabelle. Gehen Sie in Access 2007 in "externe Daten" und wählen Sie "Excel -Tabelle importieren". Sie sollten in eine vorhandene Datentabelle, einen neuen Datentatbaren oder einen Link zur Excel -Datei importieren. Dann arbeiten Sie mit dieser neuen "Excel" -Tabelle wie einer Zugriffstabelle (betrachtet die Leistungsprobleme im letzten Fall).
Versuchen Sie, das zu reparieren
Docmd.TransferSpreadsheet
Problem. Ich verwende diese Methode seit einigen Jahren und es funktioniert gut, obwohl sie in einigen Fällen etwas schwierig sein sollte (ich glaube, es ist Ihr Fall). Bitte ist es wert, wenn Sie weitere Informationen zu Ihrem Problem mit dieser Methode geben, einschließlich Ihrer Zugriffs- und Excel -Version.
Ich hoffe ich habe geholfen. Viel Glück.