Danke für den Code. Er ist eigentlich völlig einleuchtend.
Aber ich habe da wohl noch immer ein Problem.
Das ist gut. Dann sollte das weitere nicht das Problem werden.
- Meine Tabelle in Excel fängt bei Zeile 10 an
lngZeile in meinem Code dann halt bei 10 anfangen lassen…
- Ich verwende die Snapshot-Funktion (Dummerweise)
Das sollte eigentlich nichts ausmachen.
Private Sub Form_Open(Cancel As Integer)
'Kill „c:\Alte Datei.xls“
'FileCopy „c:\Eigene\Excel\Musterliste.xls“, „c:\Neue
Datei.xls“
Das hast Du auskommentiert. Schon mal gut.
Dim oExcel As Excel.Application, DB As DAO.Database, RS As
DAO.Recordset, i As Long
On Error Resume Next
Err.Clear
Set oExcel = GetObject(, "Excel.Application ")
If Err.Number 0 Then Set oExcel =
CreateObject(„Excel.Application“)
Bis hierhin klar, nehme ich an: Excel wird aktiviert, falls schon geöffnet; falls nicht, eben neu gestartet.
On Error GoTo 0
With oExcel
.Visible = False
.Workbooks.Open („c:\Neue Datei.xls“)
Hier wird die Datei geöffnet. Jetzt käme prinzipiell der Code von mir, mit dem überprüft wird, ob was vorhanden ist oder nicht. Eben auf Deine Rahmenbedingungen (Startzeile, Spalten, wann ist was leer…) angepasst.
.Sheets(„Tabelle1“).Select
.Rows(„1:1“).Select
.Cells.Select
Hiermit wird in Excel die gesamte Tabelle markiert.
'Set RS = Me.RecordsetClone
Set DB = CurrentDb
Set RS = DB.OpenRecordset(„A_Bemerkung“, dbOpenSnapshot)
–> aus Access
If Me!Spaltenk Then
For i = 15 To RS.Fields.Count - 1
.Cells(2, i + 2) = RS.Fields(i).Name
Next i
Mit dieser Schleife werden die Spaltenüberschriften in die Spalten B bis weit in Zeile 2 geschrieben.
.Range(„a10“).Select
Else
.Range(„a10“).Select
End If
Warum dann A10 selektiert wird, weiß ich nicht. Theoretisch sollten die Zeilen 3 bis 10 dann leer sein bzw. mit den Eingaben aus der Quelldatei, die zum kopieren genommen wird, vorbelegt sein.
Wenn Du vor dem Einfügen Deine Tabelle löschen willst, darf das natürlich nur ab Zeile 10 geschehen. Dies machst Du dann (in Analogie zu meinem Code) mit
wsTabelle.Rows("10:65535").clear
Vor der folgenden Zeile musst Du noch die betreffende Zelle markieren, ab der eingefügt werden soll. Im Lösch-Fall dürfte das die 10 sein, ansonsten eben die vorher mit lngZeile und der Schleife ermittelte:
wsTabelle.Cells(lngZeile, 1).select
.Selection.CopyFromRecordset RS
Das kopiert die Daten aus dem Recordset in die Tabelle. Ist prinzipiell das gleiche wie den Recordset in Tabellenform anzeigen zu lassen, komplett zu markieren und mit kopieren und einfügen nach Excel zu bringen.
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Speichert und schließt die Datei und beendet Excel.
Das Programm löscht von vornherein die gesamte Datei und
ersetzt diese mit einer leeren Musterliste. Das möchte ich
aber wie gesagt umgehen.
Er soll schauen, ob schon etwas in der Excel-Datei steht.
Ich muß dazu sagen, dass ich diesen Code von einem Kollegen
habe. Ich versteh den unteren Teil nicht richtig.
Hoffe, mit der Erklärung kommst Du weiter.
Gruß, Manfred