Clever-Excel-Forum

Normale Version: Textfeld bearbeiten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich habe ein größeres Problem, bei dem ich mir garnicht vorstellen kann ob es überhaupt lösbar ist.
Ich habe eine Access Datenbank, in der im Feld Auftrag mehere Aufträge eingegeben werden (per Scanner)
Diese Datenbank wird nach Excel exportiert.
Jetzt ist das Feld mit den Auftragsnummern mein Problem.
Im Feld Auftrag kann ich die Auftragsnummern zwar untereinander darstellen, (siehe Anhang) aber ich hätte entweder gern ein Trennzeichen zwischen jeder Auftragsnummer oder am besten wäre pro Auftragsnummer eine zusätzliche Zeile.
Ist das irgendwie möglich ?
Danke schon mal
Viele Grüße Andrea
Hallo,

als Beispiel wie der Inhalt von D9 in mehrere Zeilen geschrieben wird:

Code:
Sub Main
Ar = split(cells(9,4), chr(10))

for i = 0 to  ubound(Ar)
    cells(12+ i,4) = Ar(i)
next i
End Sub

Wenn die Arbeitsabläufe (Reihenfolge) geklärt ist, kann man darum eine Komplett-Lösung "bauen".

mfg
Hallo,

Zitat:besten wäre pro Auftragsnummer eine zusätzliche Zeile

das würde ich von einer Datenbank erwarten -> also Access anpassen
Hallo Fenneck,
danke für die schnell Antwort. Genial, das geht. aber ist es noch möglich die Daten, die in den anderen spalten stehen immer mit zu kopieren ? (also dann duplizieren sooft wie Auftragsnummern vorhanden sind)
Ich möchte ja wissen zu welcher Zeile meine Aufträge passen.

LG
Hallo Andrea,

ja, das geht. Meine Frage nach den Arbeitsabläufen war, ob der Code eine Datei wie gezeigt NACHTRÄGLICH bearbeiten soll, oder immer sofort nach der Eingabe EINER neuen Zeile.

mfg
Hallo Fennek,
die Excel Tabelle wird immer im kompletten bearbeitet. Sie wird aus der Access Datenbank exportiert.
es wäre auch ok, wenn die originaltabelle stehen bleibt und die angepasse auf einem neuen Tabellenblatt erstellt wird.
So wie es halt möglich ist.
In die Excel Tabelle wird nichts eingetragen. Das kommt aus Access.
Die Auswertung brauche ich jeden Monat einmal.

LG
Hallo,

der folgende Code muss in das Workbook eingefügt werden:

Code:
'in der Datei aus Access:
'Alt-F11: öffnet den VBA-Editor
'Alt-E-M (nacheinander): Neues Allgemeines Modul
'mit Copy/Paste den Code einfügen
'mit F5 oder dem Play-Button starten

Sub F_en()
If Sheets.Count = 1 Then
    Sheets.Add , Sheets(1)
    Sheets(1).UsedRange.Rows(1).Copy Sheets(2).Range("A1")
End If
With Sheets(1).UsedRange
    For i = 2 To .Cells(Rows.Count, 4).End(xlUp).Row
        An = Len(.Cells(i, 4)) - Len(Replace(.Cells(i, 4), Chr(10), ""))
        .Rows(i).Copy Sheets(2).Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(An + 1)
        If An > 0 Then
            Ar = Split(.Cells(i, 4), Chr(10))
            With Sheets(2)
                lr = .Cells(Rows.Count, 4).End(xlUp).Row
                For k = UBound(Ar) To 0 Step -1
                    .Cells(lr, 4).Offset(-k) = Ar(UBound(Ar) - k)
                Next k
            End With
        End If
    Next i
End With
Sheets(2).UsedRange.Columns.AutoFit
End Sub

mfg
Hallo Andrea,

per VBA wird hier für jeden Auftrag eine Zeile erzeugt:
Sub BereinigeDB()
Dim lngAnzahl As Long
Dim rngA As Range
Dim varAuftraege As Variant
With Range("A1").CurrentRegion.Columns(4)
If .Cells.Count > 1 Then
Application.ScreenUpdating = False
.Resize(.Cells.Count - 1).Offset(1).NumberFormat = "@"
For Each rngA In .Cells
varAuftraege = Split(rngA.Value, vbLf)
For lngAnzahl = 1 To UBound(varAuftraege)
If lngAnzahl = 1 Then
rngA.Value = CStr(varAuftraege(UBound(varAuftraege)))
End If
rngA.EntireRow.Copy
rngA.EntireRow.Insert
rngA.Offset(-1).Value = CStr(varAuftraege(lngAnzahl - 1))
Next lngAnzahl
Next rngA
Application.CutCopyMode = False
Application.ScreenUpdating = True
End If
End With
End Sub
Gruß Uwe
VIELEN Dank Fennek und Uwe,
es funktioniert. Wie man so etwas schreiben kann....ist mir ein Rätsel Smile

DANKE


Viele Grüße
Andrea