Excel Tabelle in Access importieren

starbug

Erfahrenes Mitglied
Hallo,

und wieder habe ich eine Frage. Ich würde gernen eine Excel Tabelle nach
Access importieren und zwar mit VBA. Ich habe mich mal umgeguckt und die
TransferSpreadSheet Methode gefunden und welche ´Parameter übergeben
werden können. Hier mal mein Code:

Code:
Sub TabelleImportieren()

DoCmd.TransferSpreadsheet(acImport,8,"master_test_2.1.accdb","C:\Documents and Settings\Desktop\hallo.xlk",True)

End Sub

Allerdings bekomme ich dann immer sofort die Fehelermeldung: "Fehler beim
kompilieren. Erwartet = ".

Was bedeutet das?
 
item: Der dritte Paramter ist glaub falsch.
Mit TableName ist der Name der Tabelle gemeint, die in Access erstellt werden soll. Dabei sind Punkte nicht zulässig. Du hast dort den Namen der Datenbank drin.

item: Du willst eine *.xlk Datei einlesen. also eine Excel Sicherungsdatei. Ich weiss nicht ob Access das Schluckt. Versuch doch zuerst mal mit einer normalen xls- oder xlsx-Datei.

item: Der 2te Parameter, den Excel-Type solltest du wenns geht über den dazugehörigen vba-Enum AcSpreadSheetType ansprechen, auch wenn der Wert dahinter der gleiche ist wie deine 8. Aber dann sieht man gleich im Code, welcher Excel-Type erwartet wird.
PS: Die Hilfe von Access 2007 zeigt nicht alle Möglichkeiten an, wenn man über AcSpreadSheetType geht, dann sieht man auch noch acSpreadsheetTypeExcel12 und acSpreadsheetTypeExcel12Xml welches dann für die xlsx-Dateien verwendet wird.
 
Also ich hab jetzt mal ein paar Dinge geändert.

1. Hab nur den namen der Tabelle genannt ( Upload)

2. Ich hab jetzt eine xlsm Datei weil in meiner Excel Tabelle Makros sind, kann das damit was zu tun haben?

3. Ich habe tatsächlich diese Excel 12 Version.

Na ja aber Fehler bleibt immer noch aber hier ist nochmal der neue Code:


Code:
Sub TabelleImportieren()

DoCmd.TransferSpreadsheet(acImport,acSpreadsheetTypeExcel12,"Upload","C:\Documents and Settings\Desktop\hallo2.xlsm",True)

End Sub
 
Soo hab ne Lösung gefunden. Es funktioniert wenn man einfach die Klammern weglässt. Habe aber vergessen zu erwähnen das ich in meiner Excel Tabelle mehrere Tabellenblätter habe. Wie kann ich denn da auf ein bestimmtes zugreifen?
 
Oder mit call aufrufen....

transferspreadsheet nimmt immer das erste sheet. Wennd u wirklich über diesen Befehl gehen willst, musst du das ganze leicht umschiffen:

Da ich im Moment gerade an einer AccessDB arbeite die das auch braucht, zeige ich mal meine 'Lösung'. Ich habe sie jedoch für dich aus einem noch viel komplexeren Zusammenhang herausgeschnitten. Ev. gibts für dich auch noch einfachere Wege

Visual Basic:
'Braucht Referenzen auf:
'FSO: "Microsoft Scripting Runtime"
'Excel:	"Microsoft Excel X.Y Object Library"
'
'Bei Abbruch wegen Fehler muss ggf. die Excel_instanz über den 
'Taskmanager abgeschossen werden, da diese die Temporäre Datei blockiert
Public Function importSheet(ByVal iPath as String)
    Dim ws      As Worksheet
    Dim fso     AS New FileSystemObject
    Dim xlsx    AS New excel.Application
    DIm path    As String

    'Kopie der Source erstellen (Zur Sicherheit)
	path = fso.BuildPath(fso.GetParentFolderName(iPath), "TEMP_IMPORT" & fso.getFileName(iPath))
	Call fso.CopyFile(iPath, path, True)
	
	'Kopie öffnen'
	Set workbook = xlsx.Workbooks.Open(path)

    '//TODO: Schleife über alle Worscheets die du importieren willst, hier beginnen
    'sheetName ist infolge der Name des Sheets, kommt dann aus deiner Schleife
	    
	    Set ws = workbook.Worksheets(sheetName)

	    '// Sheet an den Anfang verschieben und speichern
	    Call ws.Move(workbook.Worksheets(1))
	    Call workbook.Save
	    

	    '// Spreadsheet importieren
	    Call DoCmd.TransferSpreadsheet( _
	                acImport, _
	                acSpreadsheetTypeExcel12Xml, _
	                sheetName, _
	                path, _
	                True)

    '//TODO: Hier Schleife schliessen
                
    'Workbook schliessen und Kopie wieder löschen
    Call workbook.close
    Call fso.DeleteFile(path)
                
    Alle Instanzen zurücksetzen und Schliessen
    Set workbook = Nothing
    Call xlsx.quit
    Set xlsx = Nothinh
    Set fso = nothing

End Function
 
Danke für die Tips, aber bei mir ist es nicht so komplex. Ich hab mir in Excel jetzt ein Makro gemacht
welches mein benötigtes Blatt an die erste stelle setzt :)
 

Neue Beiträge

Zurück