Access-Daten nach Excel importieren (mit Vorlage)

Hallo Zusammen,

ich habe folgendes Problem und brauche Hilfe:

Ich möchte gerne Daten aus einen Access Tabellen nach Excel importieren.
Ich habe eine Excel Vorlage erstellt „enthellt Magros“. ich möchte dass die Daten nicht im iergend ein Excel importiert wird sondern das jedes mal diese Vorlage benuzt.
Vielleicht ist auch noch wichtig zu erfahren das die Vorlage schreibgeschützt ist,mit Passwort.

Es ist noch nicht alles:
Die Access Tabelle enthält verscheidene User Nummer, und für jeder User Nummer habe ich eine Odner erstellt ca. 460User.
Damit ihr besser versteht was ich meine, mache ich ein Beispiel:

User Nummer Ue08060 (es fängt immer mit „U“) hat ein Ordner die auch gleich heisst U08060.

Es soll alle Daten die der User „ue08060“ im Access Tabelle hat, im einer Excel importieren und zwar in dem entsprächenden Ordner in dem fall ordner „ue08060“.

Und die excel-datei soll automatisch speichern: es fängt immer mit der entsprächenden Unummer an und _reports, also ue08060_reports. Unummer wird je nach Benutzer angepasst.

Ich habe eine Vorlage erstellt ,weil die user später die excel Datei bekommen,und sie dürfen die Daten die aus Access Tabelle importiert würde nicht anpassen es muss schreibe geschützt sein.

Hier ist noch die Code die ich bis her gemacht habe:
nur im Moment habe ich ohne Vorlage gemacht und es heisst immer Reports. und genau das soll sich ändern!

[Code]

'------------------------------------------------
’ Excel vorlage benutzen und Daten importieren
'------------------------------------------------
Private Sub ordnerstruktur_export_Click()
'Variable Deklarieren
Dim objExcel As Excel.Application ’ Excel.Application
Dim objExcelbook As Excel.Workbook ’ Excel.Workbook
Dim objExcelSheet As Excel.Worksheet ’ Excel.Worksheet
Dim intExcelCalcMode As Integer 'Excel Berechnungsmodus
Dim rst As DAO.Recordset 'Access Tabelle oder Abfrage
Dim rst2 As DAO.Recordset 'Access Tabelle oder Abfrage
Dim SQL1 As String
Dim SQL2 As String
Dim SQL3 As String
Dim strUNr As String
Dim strDir As String
Dim qd As QueryDef
Dim i As Integer
Dim strSQL As String
Dim strVerz As String

MsgBox „Start!“, vbOKCancel & vbInformation, „Excel erstellt“
'Excel-Objekt öffnen
Set objExcel = CreateObject(„Excel.Application“)
'falls gewünscht sichtbar
objExcel.Visible = False
SQL1 = „SELECT UID from T_Benutzer“
‚SQL2 = "SELECT [Document Name], [File Name], [Session User], " & _
’ "[Session Date], [ID] " & _
’ „FROM T_UserReports " & _
’ „WHERE [Session User] = '“
SQL2 = „SELECT * FROM T_UserReports WHERE [Session User] = ‚U100366‘“
'gewünschtes Workbook öffnen, Referenz setzen
PFAD = „\Filer15l\CARGO151l\Projekte\BI\BOXI.S4358\07_User\UserReports“
'Variable nutzen
Set qd = CurrentDb.QueryDefs(„Q_UserReport“) ’ Abfrage um UserNummer
strSQL = qd.SQL
i = InStr(1, qd.SQL, „“)
strVerz = Dir(PFAD & „*.*“, vbDirectory)
‚Tastatureingabe blockieren
objExcel.Interactive = False
While strVerz „“
If Left(strVerz, 1) = „U“ Then ’ fragt ob Links als erste ein U ist
qd.SQL = Left(strSQL, i - 2) & "‘“ & strVerz & "‘));"
On Error Resume Next
Kill PFAD & strVerz & „“ & „Rports.xls“
On Error GoTo 0
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
„Q_UserReport“, _
PFAD & strVerz & „\Reports.xls“, True
End If
strVerz = Dir()
Wend
qd.SQL = strSQL
Set qd = Nothing
'Tastatur- und Mauseingaben wieder zulassen
objExcel.Interactive = True
MsgBox „Excel würde Erfolgleich erstellt!“, vbOKOnly & vbInformation, „Info“
End Sub
[\Code]

Ich habe nicht so veil ahnung von VBA darum wäre es sehr hilfreich wen mr jemand eine Beispielcode geben könnte.

Im Voraus vielen Dank.

Prissy

Hi Priscilla,

direkt kann ich dir erstmal nicht helfen, aber was mir auffiel,
in Kill PFAD & strVerz & „“ & „Rports.xls“
soll es doch sicher R e ports.xls" heißen!?
Zweitens, benutze bitte bei w-w-w nicht den Html-Tag Code, sondern Pre.

Gruß
Reinhard

Hallo :Reinhard,

ja da hast du recht, es muss Reports und nicht Rports heissen,
aber leider war das nicht alles, weil es immer noch nicht funktioniert.

Gruß

Hallo Prissy,

wen ich dein Problem richtig verstehe, dann ist dein Ansatz so nicht richtig. Den das TransferSpreadsheet erzeugt immer eine neue Datei.

Wenn du die Daten in eine Vorlage einlaufen lassen willst, dann muesstst du folgendermassen vorgehen:

  1. Vorlage in einem eigenen Ordner ablestellen (z.B. SheetGeneric)
  2. Die leere EXCEL Vorlage in den entspechenden Ordner kopieren und umbenennen
    3a. Die leere Vorlage per EXCEL-OLE im Zielordner oeffnen und mittels VBA-Routine Satz fuer Satz umkopieren.
    oder
    3b. Die EXCEL-Datei im Zielordner dynamisch in Access verknuepfen und dann kannst du sie wie eine Access-Tabelle ansprechen und die Daten einlaufen lassen.

Das ganze ist eine ziehmliche Fummelei, und auch sehr fehleranfallig.

Tschau
Peter

Hallo,

3a. Die leere Vorlage per EXCEL-OLE im Zielordner oeffnen und
mittels VBA-Routine Satz fuer Satz umkopieren.

In der Gefahr hin, dass ich das Problem nicht treffe oder dass folgender Code einfacher zu schreiben wäre, poste ich doch einmal. Er stammt aus einer Funktion aus VB6, die alle Daten aus der Accesstabelle („TabelleTemp“) in ein Flexgrid schreib. Hab ihn jetzt ein bisschen geändert, vielleicht kannst du ihn ja irgendwie einbauen…

Public Sub KernelTourenAnzeigen()
'excel öffnen und alles...

'Überschriften
Dim i as Integer
For i = 1 To TabelleTemp.Fields.Count 'für jede spalte
 ObjExcel.Cells(1, i).Value = TabelleTemp.Fields(i - 1).Name
Next i

'Daten
If TabelleTemp.RecordCount \> 0 Then
 Dim akReihe As Integer
 Dim akSpalte As Integer
 TabelleTemp.MoveFirst
 TabelleTemp.Index = "Datum"
 While TabelleTemp.EOF = False 'Datensätze durchgehen
 akReihe = akReihe + 1
 For akSpalte = 0 To TabelleTemp.Fields.Count - 1 'spalten durchgehen
 If IsNull(TabelleTemp(akSpalte)) = True Or TabelleTemp(akSpalte) = 0 Then
 ObjExcel.Cells(akReihe+1, akSpalte).Value = "/"
 Else
 
 ObjExcel.Cells(akReihe+1, akSpalte).Value = TabelleTemp(akSpalte)
 End If
 Next akSpalte
 TabelleTemp.MoveNext
 Wend
End If
End Sub

Gruß, Simon