Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vorgänger suchen und eintragen

Vorgänger suchen und eintragen
21.01.2021 10:29:57
Marco
Hallo zusammen,
wer von euch kann mir helfen? Ich habe ein Problem mit Application Match.
Er meldet Fehler 2042. Aber die Deklarationen habe ich schon angepasst. Nun bin ich mit meinem Wissen am Ende.
Gewünschtes Vorgehen:
Wenn eine Aufgabe einen Vorgänger hat (dann ist der VOrgänger in Spalte B), dann soll das Enddatum des Vorgängers (aus Spalte H) als Startdatum (in Spalte E der Aufgabe) in dem Vorgang hinterlegen werden. Das allerdings als Formelverweis ( z.B. in Zelle E5 sollte dann "=$H$4" stehen) Der Wert wird als Datum angezeigt und löst dann weitere Berechnungen (Enddatum) aus.
Der Code ist im Modul 1 hinterlegt. Das Makro heißt - Sub VorgängerdatumEintragen()
Link zur Datei:
https://www.herber.de/bbs/user/143187.xlsm
Ich bin für jede Hilfe dankbar.
Viele Grüße
Marco M.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
läuft doch wie geschmiert.. owt
21.01.2021 10:40:43
ralf_b
tips...
21.01.2021 11:32:52
ralf_b
du sollte immer erst prüfen ob dein Suchergebnis auch eins ist bevor du es weiterverarbeitest.
match liefert eine Position oder einen Fehler
Ergebnis von match sollte mit if iserror(vntrow) geprüft werden.
das Trim auf eine Zahl oder einen Fehlerwert ist unnötig.
gruß
rb
AW: tips...
21.01.2021 12:13:29
Marco
Hallo Ralf,
das ist ein guter Hinweis, vielen Dank.
Ich vermute, das Problem ist die Nummerierung der laufenden Nr. Diese wird durch eine Formel eingesetzt. Daher habe ich Trim benutzt um evtl. vorhandene Leerzeichen zu entfernen.
Das Application.Match funktioniert bis zu einer bestimmten Zelle (oder deren Inhalt). Dann kommt Fehlermeldung 2042. Das ist bei mir der Fall bei Vorg.Value = Nr.1,13.
Die neue Datei findet Ihr unter: https://www.herber.de/bbs/user/143192.xlsm
Vielleicht habt Ihr ja eine ganz einfache Lösung dafür.
Viele Grüße
Marco M.
Anzeige
AW: tips...
21.01.2021 12:32:45
Marco
Sorry, hatte den Beitrag nicht auf noch nicht beantwortet gestellt.
Viele Grüße
Olli
AW: tips...
21.01.2021 12:42:08
ralf_b
was ist mit Werners Lösung?
ansonsten versuchs mal damit,
  'von B5 bis zur letzten Zeile durchlaufen und prüfen auf Ganzzahl
For Each Vorg In .Range("B5:B" & loLetzteA)
If Vorg.Value  "" Then
vntRow = Application.Match(Vorg.Value, Columns(1), 0)
If Not IsError(vntRow) Then
'Enddatum des Vorgängers als Startdatum in Zelle eintragen (als Formel)
If Cells(vntRow, 8)  "" Then
Vorg.Offset(0, 3).FormulaLocal = "=" & Cells(vntRow, 8).Address
End If
End If
End If
Next

Anzeige
AW: tips...
21.01.2021 12:55:43
Marco
Hallo,
Werners Code habe ich noch nicht eingebaut.
Bei deinem geht er aber auch nur bis Vorg 1,13. Ab da kommt der Fehler 2042 und bleibt. Er trägt kein Startdatum mehr ein ab dem Fehler.
Ich denke, mit der Nummerierung stimmt was nicht, aber was genau fällt mir noch nicht ein.
VG
AW: tips...
21.01.2021 13:10:49
ralf_b
das kann nicht sein. bei mir läuft das mit "deinen" Beispieldaten durch.
Aber sagt dir das was WENN(E14="";"";WENN(F14="";"";ARBEITSTAG(E14;F14-1)))
Ab einr bestimmten Zeile hast du diese Formel drin und die bezieht sich auf die zu bearbeitende Spalte
löscht man zu testzwecken die zu bearbeitende Spalte dann sind auch deine Endedaten weg.
da beißt sich die Maus in den Schwanz
Anzeige
AW: tips...
21.01.2021 13:25:10
Marco
Hallo,
ja, dass ist richtig. Die Formel berechnet das tatsächliche Enddatum in Arbeitstagen. Das wird per Code eingetragen. Da ist mir beim nachstellen der Tabelle wohl ein Fehler unterlaufen.
Danke für den Hinweis.
Viele Grüße
Marco M.
AW: Vorgänger suchen und eintragen
21.01.2021 10:55:28
Werner
Hallo,
jo, bei mir auch - keine Fehlermeldung. Bis auf die Tatsache, dass beim ersten "Vorgänger" in Spalte B (Zelle B4) das Datum (die Formel) in H4 nicht eingetragen wird.
Public Sub MeineVersion()
Dim i As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("to-do Liste")
For i = 2 To .Columns("B").Find(what:="*", LookIn:=xlValues, _
searchdirection:=xlPrevious).Row
If .Cells(i, 2)  "" Then
.Cells(i, "E").FormulaLocal = "=" & .Cells(i - 1, "H").Address
End If
Next i
End With
Application.EnableEvents = True
End Sub
Gruß Werner
Anzeige
AW: Vorgänger suchen und eintragen
21.01.2021 13:00:16
Marco
Hallo Werner,
ich konnte deinen Code einbauen und er funktioniert! Klasse und vielen Dank dafür!
Hast du evtl. eine Erklärung, warum dein Code so durchlauft und bei meinem oder Ralfs Code der Fehler generiert wird? Liegt es an dem Datentyp der Nummerierungen?
Auf jeden Fall herzlichen Dank und einen schönen Tag noch.
Viele Grüße
Marco M.
AW: Vorgänger suchen und eintragen
21.01.2021 13:43:55
Marco
Hallo Werner,
der Code fügt immer die .Address von ".Cells(i - 1, "H")" ein. Das ist aber bei einigen Vorgängen nicht zielführend, da dort auch mal ein anderes Enddatum stehen muss. Sprich, der Code nimmt immer von der aktuellen Zeile -1 aus Spalte H den Wert. Aber es kann auch sein, dass der mal in Zeile -10 oder Zeile + 5 den Wert aus Spalte H benötigt.
Wie muss ich deinen Code anpassen?
Vg Marco M.
Anzeige
AW: Vorgänger suchen und eintragen
21.01.2021 15:19:45
Marco
Hallo, ich konnte es lösen.
Für alle, die vor einem ähnlichen Problem stehen, hier meine Lösung.
Sub VorgängerdatumEintragen()
'Wenn Aufgabe einen Vorgänger hat (Spalte B)
'dann Enddatum des Vorgängers (Spalte H)
'in Startdatum (Spalte E) in dem Vorgang hinterlegen
Dim loLetzteA As Long
Dim Vorg As Range
Dim vntRow
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheets("to-do Liste")
'letzte Zeile auslesen in Spalte C
loLetzteA = .Range("C800").End(xlUp).Row
'von B5 bis zur letzten Zeile durchlaufen
For Each Vorg In .Range("B2:B" & loLetzteA)
'Wenn Vorgang Vorgänger enthält dann Vorgänger suchen und
If Vorg.Value  "" Then
'Zeile finden
Set vntRow = .Columns(1).Find(Vorg.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not vntRow Is Nothing Then
'Wenn Zeile des Fundergebnisses = dem Vorgänger
If Cells(vntRow.Row, 1) = Vorg.Value Then
' dann Formel eintragen für Enddatum
'Enddatum des Vorgängers als Startdatum in Zelle eintragen (als Formel)
Vorg.Offset(0, 3).FormulaLocal = "=" & Cells(vntRow.Row, 8).Address
End If
End If
End If
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Viele Grüße und Danke für die Unterstützung.
Marco M.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige