Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Access Abfrage export nach Excel





Frage

Hallo Access Gemeinde, Ich möchte gerne eine Abfrage in Excel automatisch exportieren, das Problem dabei ist, das die Exceldatei auch von anderen Usern direkt bearbeitet wird, und ich somit nicht weiss, welche Zeile nun frei für die Exportdaten sind. Wichtig wäre da die Spalte A. Gruß Ralf

Antwort 1 von Teddy7

Mit VBA sieht das etwa so aus:
Dim objExcel As Excel.Application
dim xwei as string
dim xfeld as string
Dim lastrow1 As Integer
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.Workbooks.Open ("C:\test.xls")
xwei = objExcel.ActiveWorkbook.Sheets(1).Select ' 1. Tabellenblatt auswählen
With objExcel.Range("A1")
' Anzahl Zeilen im Tabellenblatt ermitteln
lastrow1 = .SpecialCells(xlCellTypeLastCell).Row
End With
.....
.....

objExcel.Workbooks.Close
Set objExcel = Nothing
///////////
Verweis auf MicrosoftExcel nicht vergessen

Gruß
Teddy

Antwort 2 von RalfH

Hallo Teddy7,
Vielen Dank für Deine Hilfe mal wieder ;-)

Damit bekomme ich die Zeilen Anzahl der Tabelle angezeigt, das ist schonmal ein erster Schritt.
Wie ermittel ich denn die erste freie Zelle in Spalte A ?
Gruß Ralf

Antwort 3 von Teddy7

Hi Ralf !
Rück mal ein Stück - Du stehst auf dem Schlauch *g*.
Lastrow ist die letzte in Spalte A besetzte Zeile.
Also muß die nächste Zeile frei sein.
d.H.
dim i1 as long
....
....
i1 = lastrow + 1
objExcel.cells(i1, 1) = "das ist die erste freie Zelle "


Gruß
Klaus

Antwort 4 von RalfH

Uiiii,
Entschuldige bitte *kleinwenigrotwerd*

Antwort 5 von RalfH

Guten Morgen,
Ich komme hier im Moment nicht weiter.
Habe den unten stehenden Code.
Ich bekomme auch den ersten Wert in Excel geschrieben, jedoch nicht alle Werte.
In der Abfrage sind 2 Felder definiert, ArtikelNr und Stückzahl.
Ich bekomme nur die erste ArtikelNr und Stückzahl überhaupt nicht.

Private Sub Befehl43_Click()
Dim objExcel As Excel.Application
Dim xwei As String
Dim xfeld As String
Dim lastrow1 As Integer
Dim i1 As Integer
Dim bestells As Integer
Dim artikelnr As Integer
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long

Set db = CurrentDb
Set rs = db.OpenRecordset("qryBestellung")
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.Workbooks.Open ("C:\VersucheaufC\Wechselteile")
xwei = objExcel.ActiveWorkbook.Sheets(1).Select
With objExcel.Range("A1")
For i = 0 To rs.Fields.Count - 1
.Cells(i + 1) = rs.Fields(i).Value

lastrow1 = .SpecialCells(xlCellTypeLastCell).Row
lastrow1 = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

i1 = lastrow1 + 1
objExcel.Cells(i1, 1) = rs.Fields(i).Value
Next i
End With
objExcel.Workbooks.Close
Set objExcel = Nothing
End Sub

Gruß Ralf

Antwort 6 von Teddy7

Hi Ralf !
Versuch´s mal so:
Private Sub Befehl43_Click()
Dim objExcel As Excel.Application
Dim xwei As String
Dim xfeld As String
Dim lastrow1 As Integer
Dim i1 As Integer
Dim bestells As Integer
Dim artikelnr As Integer
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long

Set db = CurrentDb
Set rs = db.OpenRecordset("qryBestellung")
Set objExcel = New Excel.Application
objExcel.Visible = True
objExcel.Workbooks.Open ("C:\VersucheaufC\Wechselteile")
xwei = objExcel.ActiveWorkbook.Sheets(1).Select
With objExcel.Range("A1")
' Anzahl Zeilen im Tabellenblatt ermitteln
lastrow1 = .SpecialCells(xlCellTypeLastCell).Row
End With
i1 = lastrow1
' ersten Datensatz lesen
rs.movefirst
Do Until rs.EOF
i1 = i1 + 1 ' nächste Zeile
objExcel.Cells(i1, 1) = rs!ArtikelNr
objExcel.Cells(i1, 2) = rs!Stückzahl
rs.movenext
loop
' vielleicht noch formatieren ??
objExcel.Cells.Select
objExcel.Cells.EntireColumn.AutoFit
objExcel.Cells(1, 1).Select

objExcel.Workbooks.Close
Set objExcel = Nothing
rs.close
set rs = nothing
End Sub

Ich setzte hier voraus, dass die Felder in der Query ArtikelNr und Stückzahl heißen und dass Du sie in Spalte A und B schreiben willst.
Gruß
Teddy

Antwort 7 von RalfH

@Teddy7
Eines fehlte noch in dem Code:
lastrow1 = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

Damit springt er mir zu den ersten freien Zellen in der formatierten Tabelle.

Ich bin Dir zu großem Dank verpflichtet, wenn das so weiter geht, und Du mal in Düsseldorf bist, und wir einen kleinen Abstecher in die Altstadt unternehmen,
könnte das einen
SELECT Altbier FROM Diebelskeller 
und diversen anderen Absackern werden ;-)
Liebe Grüße aus Düsseldorf
Ralf

Antwort 8 von Teddy7

Hi Ralf !
Der Befehl ist überflüssig.
Du kannst in eine Celle schreiben ohne darauf zu stehen. Wenn Du den Cursor in eine Celle setzen willst, reicht ein
objexcel.cells(i1,1).select

D' Dorf könnte schon mal sein - ist ja nur 150 KM weg.
Grüße aus Neuwied
Teddy