Zeile löschen und nächste Zeile als Überschriften

  • Sonstige

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von dkaj.

    Zeile löschen und nächste Zeile als Überschriften

    HI Leute,

    hab da ein Problem . Ich hab ein Excel-file. Dieses File importiere ich, aber jetzt kommt das Problem. Die Überschriften sind im Excelfile nicht ganz oben also z.b A1. Sie fangen schon bei B1 an. Nach dem Import in Access ist die 1. Zeile leer und in der 2. Zeile fangen die Überschriften.

    Wie kann ich es machen, dass ich die erste Zeile lösche und dann die Überschriften in der 2. Zeile oben übernehme(Da wo die Überschriften auftauchen sollten, in den grauen Feldern)

    Über Hilfe würde ich mich freuen

    MFG
    Toni
    Ahh dieses problem hat sich zum Teil gelöst.

    Ich würde gern die 1ste und 2te Zeile in Excel löschen ist es möglich?

    Dannach würde ich gern in Access importieren

    Nachdem Import soll die Excel-Datei wieder geschlossen werden "ohne" zu speichern?

    MFG Toni
    Klar ist das möglich.

    Zeilen als Range definieren, Objektverweis setzen, löschen - fertig.

    Quellcode

    1. Dim objWB As Workbook
    2. Dim objWS As Worksheet
    3. Dim objRange As Range
    4. Set objWB = Excel.Application.ActiveWorkbook
    5. Set objWS = objWB.ActiveSheet
    6. Set objRange = objWS.Range("A1:IV2")
    7. objRange.Delete xlShiftUp
    Hi,

    danke für deine schnelle Antwort. Bei mir taucht immer eine Fehlermeldung auf "with blockvariable nicht gefunden". Das ist mein Code

    Visual Basic-Quellcode

    1. Sub Mail(Verzeichnis)
    2. Dim Pfad As String
    3. Dim objWB As Workbook
    4. Dim objWS As Worksheet
    5. Dim objRange As Range
    6. Pfad = "F:\test.xls"
    7. Shell "excel.exe """ & Pfad & """", vbMaximizedFocus
    8. Set objWB = excel.Application.ActiveWorkbook
    9. Set objWS = objWB.ActiveSheet
    10. Set objRange = objWS.Range("A1:IV2")
    11. objRange.Delete xlShiftUp
    12. 'import der Datei Mail.xls, Tabelle: Mail
    13. DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel7, "Mail", Verzeichnis, True, "Mail!"
    14. End Sub


    Ich öffne aus Access diese Datei und jetzt möchte ich das Datenblatt "Mail" um 2 Zeilen verkleinern. Es sind die Zeilen ganz oben (1,2)

    Danke im Vorraus
    MFG Toni

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „dkaj“ ()

    Hallo dkaj,

    warum arbeitest du so kompliziert? Importiere doch einfach den gewünschten Bereich deiner Exceldatei, z.B. so:

    Visual Basic-Quellcode

    1. DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
    2. "tbTest", "C:\kannweg.xls", True, "A2:B5"


    warum arbeitest du mit Shell? Wenn du Excel über einen Objektverweis erzeugst, kannst du es auch problemlos starten und beenden, aber ich denke mal, das ist überflüssig, da du direkt aus Access importieren kannst.

    Gruß Markus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „alchimist“ ()

    HI alchimist,

    danke für deine Antwort ! Es klappt auch. Problem ist jetzt nur. Diesen Monat sind es vielleicht 20 Einträge,
    nächsten Monat vielleicht 200, da kann ich leider nicht einen kleinen Bereich auswählen.

    Aber was bleibt ist, dass die Überschriften erst ab Zeile 2 Anfangen.

    Ist es überhaupt realisierbar? Wenn ja wie?

    Danke im Vorraus


    MFG
    Toni
    Hallo dkaj,

    wenn du mit einem dir unbekannten Befehl konfrontiert wirst, dann studiere doch erst einmal seine Syntax in der Hilfe von Access....

    Dann wird dir klar, dass mein Bsp ab der zweiten Zeile mit Verwendung dieser als Überschrift importiert. Sollte die Anzahl der Zeilen variabel sein, so kann ich dir nicht die optimale Lösung nennen, da ich kaum in deiner Materie stecke. Evtl ermittelst du zuerst die Anzahl der Zeilen und importierst dann oder oder oder... ;)

    Gruß Markus
    Hi,

    hab es hingekriegt :) ... eigentlich dachte ich, ich hätte den code hier schon eingefügt ?!? komisch.

    Egal dann mach ich es jetzt: Die Funktion muss an sich nicht verändert werden, nur noch die Sub. Die Funktion sucht einfach die letzte Zeile in Excel die einen Wert hat und dann wird diese Zahlennr. bei Range eingetragen. Da sich die Spaltenanzahl bei mir nicht verändert ist es eben der Range von A3:K....! Es können nur viele beliebige Datensätze sein, deswegen suche ich mit dieser Funktion die letzte Zeile als Nr. diese wird dann eben bei K eingetragen.


    Quellcode

    1. 'Funktion die den letzten Datensatz in Excel ermittelt und die Nummer weitergibt
    2. Function ExcelLetzteZeile(DatName As String, Optional AktBlatt As String) As Long
    3. Const xlUp = -4162
    4. Dim xlApp As Object ' Excel.Application
    5. Dim i As Integer
    6. On Error Resume Next
    7. Set xlApp = GetObject(, "Excel.Application")
    8. If xlApp Is Nothing Then
    9. Set xlApp = CreateObject("Excel.Application")
    10. End If
    11. On Error GoTo 0
    12. With xlApp
    13. .Visible = True
    14. .Workbooks.Open DateiName, , True
    15. If Len(Tabellenname) > 0 Then
    16. ExcelLetzteZeile = .Range("A65536").End(xlUp).Row
    17. Else
    18. ExcelLetzteZeile = .Range("A65536").End(xlUp).Row
    19. End If
    20. .ActiveWorkbook.Saved = True
    21. .Quit
    22. End With
    23. Set xlApp = Nothing
    24. End Function
    25. Sub Mail()
    26. On Error Resume Next
    27. DoCmd.DeleteObject acTable, "Mail"
    28. On Error GoTo 0
    29. Dim LetzteZeile As Long
    30. Const DateiName = "F:\deineDatei.xls"
    31. Const Tabellenname = "Mail"
    32. LetzteZeile = ExcelLetzteZeile(DateiName, Tabellenname)
    33. DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
    34. "Mail", DateiName, True, _
    35. Tabellenname & "!A3:K" & LetzteZeile '<-- Variable die den letzten Datensatz ermittelt hat
    36. End Sub


    Die Sub heißt "Mail", weil meine Tabelle so heißt.
    MFG
    Toni

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „dkaj“ ()