Guten Tag an alle,
Vorweg muss ich sagen, ich bin absoluter Anfänger in VBA und daher wird das Problem, das ich habe, für viele hier wohl eher trivial sein.
Ich habe eine Funktion in VBA Excel, die mir e-Mails aus einem Postfach zerlegt und "aufschlüsselt".
Es geht darum, dass diese E-Mails zu bestimmten Projekten Statusinformationen bzw. Updates erhalten und in der Excel-Tabelle soll am Ende das Projekt mit den Informationen in einer Zeile stehen.
Das funktioniert auch soweit, also zu einem Projekt wird z.B. eine Zeile bei Initiierung geschrieben und dahinter dann alle notwendigen Information. Es gibt aber zu dem Projekt laufend Updates und auch Rectifications, die natürlich aber erst Tage oder Wochen später kommen. Meine Funktion schreibt dann zwar für das Item eine Zeile für das Update oder die Rectifications, dann aber deutlich weiter unten in der Tabelle.
Ich möchte also, dass erkannt wird, dass es sich um das selbe Projekt handelt und alle Statusinformationen mit Zeilenumbruch in dieselbe Zeile gepackt werden.
Ich poste mal den Code und eine Beispielzeile, um das zu Veranschaulichen:
In Excel sehen Beispiel-Zeilen dann so aus:
![](/img-proxy-lite.php?url=https://i.ibb.co/Qn6LYnZ/Screenshot.png)
Nun möchte ich, dass die Initiierung von Projekt 1 und das spätere Update in derselben Zelle mit Zeilenumbruch angezeigt werden, sodass man am Ende für jedes Projekt über die gesamte Laufzeit nur eine Excel-Zeile hat.
Für jede Hilfe wäre ich sehr dankbar!
Vorweg muss ich sagen, ich bin absoluter Anfänger in VBA und daher wird das Problem, das ich habe, für viele hier wohl eher trivial sein.
Ich habe eine Funktion in VBA Excel, die mir e-Mails aus einem Postfach zerlegt und "aufschlüsselt".
Es geht darum, dass diese E-Mails zu bestimmten Projekten Statusinformationen bzw. Updates erhalten und in der Excel-Tabelle soll am Ende das Projekt mit den Informationen in einer Zeile stehen.
Das funktioniert auch soweit, also zu einem Projekt wird z.B. eine Zeile bei Initiierung geschrieben und dahinter dann alle notwendigen Information. Es gibt aber zu dem Projekt laufend Updates und auch Rectifications, die natürlich aber erst Tage oder Wochen später kommen. Meine Funktion schreibt dann zwar für das Item eine Zeile für das Update oder die Rectifications, dann aber deutlich weiter unten in der Tabelle.
Ich möchte also, dass erkannt wird, dass es sich um das selbe Projekt handelt und alle Statusinformationen mit Zeilenumbruch in dieselbe Zeile gepackt werden.
Ich poste mal den Code und eine Beispielzeile, um das zu Veranschaulichen:
VB.NET-Quellcode
- Sub Alles()
- 'Dim Datenspeicher() As String
- ActiveWorkbook.Connections("Abfrage - Mail").Refresh
- Dim Gesamttext_zerlegt() As String
- With Worksheets("Übersicht") ' Ermittlung Übersichtende
- Letzte2 = .Cells(.Rows.Count, "B").End(xlUp).Offset(1, 0).Row
- End With
- Worksheets("Übersicht").Range(Cells(2, 1), Cells(Letzte2, 10)).ClearContents
- With Worksheets("Rohdaten") 'Ermittlung Tabellenende
- Letzte1 = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
- End With
- For iZelle1 = 2 To Letzte1 + 1 ' für jeden Eintrag in der Tabelle
- Gesamttext = Worksheets("Rohdaten").Cells(iZelle1, 6).Value
- Gesamttext_zerlegt = Split(Gesamttext, "//")
- LenArray = UBound(Gesamttext_zerlegt)
- For I = 0 To LenArray ' für jeden Eintrag im Array
- Worksheets("Details").Cells(iZelle1, I + 1).Value = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- 'Text = Gesamttext_zerlegt(I)
- If InStr(Gesamttext_zerlegt(I), "Von:") > 0 Then
- pos_trenn = InStr(Gesamttext_zerlegt(I), "Von:")
- If Len(Gesamttext_zerlegt(I)) > 4 Then
- Text = Right(Gesamttext_zerlegt(I), Len(Gesamttext_zerlegt(I)) - pos_trenn - 4)
- pos_trenn = InStr(Text, "Gesendet:")
- If pos_trenn > 0 Then
- Text = Left(Text, pos_trenn - 1)
- Text = WorksheetFunction.Clean(Replace(Text, "FGS ", ""))
- End If
- End If
- Worksheets("Übersicht").Cells(iZelle1, I + 1).Value = Text
- 'Datenspeicher(I) = Text
- ElseIf InStr(Gesamttext_zerlegt(I), "MSGID") > 0 Then
- pos_id = InStr(Gesamttext_zerlegt(I), "MSGID/")
- Text = Right(Gesamttext_zerlegt(I), Len(Gesamttext_zerlegt(I)) - pos_id - 5)
- Text = WorksheetFunction.Clean(Text)
- If InStr(Text, "Status") > 0 Then
- Worksheets("Übersicht").Cells(iZelle1, 5).Value = Text
- 'Datenspeicher(5) = Text
- ElseIf InStr(Text, "LOGREQ") > 0 Then
- Worksheets("Übersicht").Cells(iZelle1, 3).Value = Text
- 'Datenspeicher(3) = Text
- End If
- ElseIf InStr(Gesamttext_zerlegt(I), "REF/") > 0 Then
- If InStr(Gesamttext_zerlegt(I), "LOGREQ") > 0 Or InStr(Gesamttext_zerlegt(I), "IH") > 0 Then
- If Worksheets("Übersicht").Cells(iZelle1, 4).Value = "" Then
- ref_text = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- Worksheets("Übersicht").Cells(iZelle1, 4).Value = ref_text
- 'Datenspeicher(4) = Text
- Else
- If Worksheets("Übersicht").Cells(iZelle1, 4).Value Like Gesamttext_zerlegt(I) Then
- Else
- ref_text = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- test_text = Worksheets("Übersicht").Cells(iZelle1, 4).Value
- Worksheets("Übersicht").Cells(iZelle1, 4).Value = Worksheets("Übersicht").Cells(iZelle1, 4).Value & vbCrLf & ref_text
- 'Datenspeicher(4) = Worksheets("Übersicht").Cells(izelle1, 4).Value & vbCrLf & Text
- End If
- End If
- ElseIf InStr(Gesamttext_zerlegt(I), "Status") > 0 Then
- If Worksheets("Übersicht").Cells(iZelle1, 4).Value = "" Then
- ref_text = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- Worksheets("Übersicht").Cells(iZelle1, 4).Value = ref_text
- Else
- If Worksheets("Übersicht").Cells(iZelle1, 4).Value Like Gesamttext_zerlegt(I) Then
- Else
- ref_text = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- Worksheets("Übersicht").Cells(iZelle1, 4).Value = Worksheets("Übersicht").Cells(iZelle1, 4).Value & vbCrLf & ref_text
- 'Datenspeicher(4) = Worksheets("Übersicht").Cells(izelle1, 4).Value & vbCrLf & Text
- End If
- End If
- 'Datenspeicher(4) = Text
- End If
- ElseIf InStr(Gesamttext_zerlegt(I), "OPDEFDET") > 0 Then
- Worksheets("Übersicht").Cells(iZelle1, 6).Value = WorksheetFunction.Clean(Replace(Gesamttext_zerlegt(I), "OPDEFDET/", ""))
- Worksheets("Übersicht").Cells(iZelle1, 8).Value = WorksheetFunction.Clean(Replace(Gesamttext_zerlegt(I + 1), "GENTEXT/", ""))
- ElseIf InStr(Gesamttext_zerlegt(I), "OPDEF") > 0 Then
- OPDEF_text = WorksheetFunction.Clean(Gesamttext_zerlegt(I))
- If InStr(OPDEF_text, "REF/") > 0 Then
- 'Worksheets("Übersicht").Cells(iZelle1, 4).Value = OPDEF_text
- 'Datenspeicher(4) = OPDEF_text
- Else
- OPDEF_text = Replace(OPDEF_text, "OPDEF/", "")
- OPDEF_text = Replace(OPDEF_text, " ", "-")
- OPDEF_text = Replace(OPDEF_text, "Status", "")
- OPDEF_text = WorksheetFunction.Clean(OPDEF_text)
- Worksheets("Übersicht").Cells(iZelle1, 2).Value = OPDEF_text
- 'Datenspeicher(2) = OPDEF_text
- End If
- ElseIf InStr(Gesamttext_zerlegt(I), "Item2") > 0 Then
- Worksheets("Übersicht").Cells(iZelle1, 7).Value = WorksheetFunction.Clean(Replace(Gesamttext_zerlegt(I), "Item2/", ""))
- 'Datenspeicher(7) = OPDEF_text
- End If
- Next I
- Next iZelle1
- End Sub
In Excel sehen Beispiel-Zeilen dann so aus:
![](/img-proxy-lite.php?url=https://i.ibb.co/Qn6LYnZ/Screenshot.png)
Nun möchte ich, dass die Initiierung von Projekt 1 und das spätere Update in derselben Zelle mit Zeilenumbruch angezeigt werden, sodass man am Ende für jedes Projekt über die gesamte Laufzeit nur eine Excel-Zeile hat.
Für jede Hilfe wäre ich sehr dankbar!