Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
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

Datumsbereich abgleichen / Wertausgabe

Datumsbereich abgleichen / Wertausgabe
28.04.2021 12:42:07
Steffen
Hallo und vorab vielen Dank für die Bereitschaft zur Unterstützung.
Die Lösung für mein selbstgewähltes Problem scheitert im Moment an meinen fehlenden VBA-Kenntnissen und ich hoffe auf eure Hilfe.
Ich habe eine Tabelle "Eingabe" hier werden per DatePicker im Feld C8 ein Anfangsdatum und im Feld E8 ein Enddatum ausgewählt. Das funktioniert soweit und in der Zelle steht dann auch ein nutzbares Datum.
Dieser Datumsbereich soll nun (wahrscheinlich mit DoLoop) mit Tabelle "Kalender" Spalte A abgeglichen werden. Sobald in der Spalte die "Daten" (Pl. Datum) auftauchen, wird in einer SpalteX neben diesen "Daten" ein Wert X eingetragen.
SpalteX wird bestimmt durch eine Dropdownauswahl in der Tabelle "Eingabe" dadurch ergibt sich im Feld F4 dieser Tabelle der Spaltenbuchstabe. (Ich könnte in F4 auch die Zahl der Spalte ausgeben, falls das einfacher ist.)
WertX wird ebenfalls wieder durch eine Dropdownauswahl in der Tabelle "Eingabe" bestimmt, wodurch dieser Wert in F6 ausgegeben wird.
Also kurz zusammengefasst: Nach Auswahl eines Namens, der die Spalte im Kalender bestimmt, wird ein Wert ausgewählt, der dann in den danach gewählten Datumsbereich geschrieben werden soll.
PS: Ich habe leider nicht herausgefunden, wie ich hier Antworten kann.
Hier die Datei: https://www.herber.de/bbs/user/145834.xlsm

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
so wie neopa C auf Deinen Beitrag geantwortet hat.
28.04.2021 13:53:40
Helmut
..ist das wirklich so schwer ?
AW: Datumsbereich abgleichen / Wertausgabe
28.04.2021 14:56:08
Yal
Hallo Steffen,
so schwer vielleicht auch nicht. Anbei mein vorschlag:

Sub Kopieren()
' Kopiere Vertretungswert in den Kalender
Dim Mitarbeiter As Range
'Dim Vertreter As Range
Dim StartDatum As Range
Dim EndDatum As Range
Set Mitarbeiter = MA_finden(Worksheets("Eingabe").Range("B4").Value)
Set StartDatum = Datum_finden(Worksheets("Eingabe").Range("C8").Value)
Set EndDatum = Datum_finden(Worksheets("Eingabe").Range("E8").Value)
If Not (Mitarbeiter Is Nothing Or StartDatum Is Nothing Or EndDatum Is Nothing) Then
Worksheets("Kalender").Range(StartDatum, EndDatum) = Worksheets("Eingabe").Range("F4").Value
End If
End Sub
Private Function MA_finden(Name) As Range
Set MA_finden = Worksheets("Kalender").Range("A1:Z1").Find(What:=Name, _
After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
Private Function Datum_finden(Datum) As Range
Set MA_finden = Worksheets("Kalender").Range("A:A").Find(What:=Datum, _
After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
VG
Yal
Anzeige
AW: Datumsbereich abgleichen / Wertausgabe
28.04.2021 17:56:34
Steffen
Vielen Dank Yal für deine Hilfe. Ich habe noch B4 in F4 geändert, stoße jedoch auf den Fehler ab der Zeile: "Private Function Datum_finden(Datum) As Range" hier sagt er "Argument ist nicht optional". Woran könnte das liegen?
AW: Datumsbereich abgleichen / Wertausgabe
28.04.2021 18:12:42
Luschi
Hallo Steffen,
bei Datum_finden((Name) ist 'Name' eine nicht gelungene Bezeichnung für einen Übergabeparamer, da viele Objekte die Eigenschaft 'Name' besitzen und 'Name selbst ein Objekt ist! Und dieser letztgenannte Punkt macht Vba das Leben schwer - deshalb schreibe die Funktion so:

Private Function MA_finden(xName As String) As Range
Set MA_finden = Worksheets("Kalender").Range("A1:Z1").Find(What:=xName, _
After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Datumsbereich abgleichen / Wertausgabe
29.04.2021 17:32:32
Yal
Hallo zusammen,
@Luschi: Ja, das ist ein guter Hinweis. Vor allem wenn das Argument untypisiert ist.
Aber der Fehler scheint bei Datum_finden vorzukommen

Private Function Datum_finden(Datum) As Range
Hier auch in enem

Private Function Datum_finden(byval Datum as String) As Range
ändern.
VG
Yal
AW: Datumsbereich abgleichen / Wertausgabe
30.04.2021 19:11:52
Luschi
Hallo Yal,
genau, aber das muß der Fragesteller mit seinen Tests beantworten,
Gruß von Luschi
aus klein-Paris
AW: Datumsbereich abgleichen / Wertausgabe
02.05.2021 11:48:27
Steffen
Hallo und vielen Dank für eure Antworten. Leider konnte ich bisher nichts gehaltvolles beitragen, da mir einfach noch das Wissen fehlt. Ich habe die letzten Tage vor VBA Tutorials zugebracht und wenigstens ein paar Wissenskrater zu füllen.
An dieser Stelle sagt er mir "unverträglich"

Private Function MA_finden(xName) As Range
Set MA_finden = Worksheets("Kalender").Range("C1:I1").Find(What:=xName, _
After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
Ich verstehe diese Funktion leider nicht so ganz. Mir ist klar, dass am Anfang Variablen eine Koordinate erhalten sollen. Mir ist nun auch klar, dass diese Koordinate aus dem Array MA_Finden und Datum_finden hervorgehen soll.
Vor der o.g. Funktion steht jedoch nun als xName der Wert der Eingabe für den Mitarbeiter als Variant/String. Diesen müsste er ja nun in den Zellen C1:I1 suchen.
Keine Ahnung, warum er das nun nicht macht. :(
Anzeige
AW: Datumsbereich abgleichen / Wertausgabe
02.05.2021 13:30:00
Steffen
Ich bin gerade durch Zufall auf das Problem gestoßen. Es liegt an After:=ActiveCell, da er hier mit der letzten aktiven Zelle beginnt, diese aber im Makro nicht definiert wird. Daher habe ich nun folgendes geändert:

Private Function MA_finden(xName As String) As Range
Set MA_finden = Worksheets("Kalender").Range("C1:I1").Find(What:=xName, _
After:=Worksheets("Kalender").Range("C1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function


Private Function Datum_finden(Datum) As Range
Set Datum_finden = Worksheets("Kalender").Range("A:A").Find(What:=Datum, _
After:=Worksheets("Kalender").Range("A2"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
Damit beginnt er jetzt an der jeweils ersten Stelle mit der Suche. Jetzt bleibt nur noch das Problem, dass er den Wert von "F4" zwar im richtigen Datumsbereich einträgt (Zelle), jedoch in der falschen Spalte.
Anzeige
AW: Datumsbereich abgleichen / Wertausgabe
02.05.2021 13:36:28
Steffen
Ein letzter Schritt ist nötig, aber hier klemmt es., mal wieder. Das Makro sieht jetzt so aus:
Sub Kopieren()
' Kopiere Vertretungswert in den Kalender
Dim Mitarbeiter As Range
Dim Vertreter As Range
Dim StartDatum As Range
Dim EndDatum As Range
Set Mitarbeiter = MA_finden(Worksheets("Eingabe").Range("B4").Value)
Set StartDatum = Datum_finden(Worksheets("Eingabe").Range("C8").Value)
Set EndDatum = Datum_finden(Worksheets("Eingabe").Range("E8").Value)
If Not (Mitarbeiter Is Nothing Or StartDatum Is Nothing Or EndDatum Is Nothing) Then
Worksheets("Kalender").Range(Cells(StartDatum, Mitarbeiter), Cells(EndDatum, Mitarbeiter)) = Worksheets("Eingabe").Range("F4").Value
End If
End Sub

Private Function MA_finden(xName As String) As Range
Set MA_finden = Worksheets("Kalender").Range("C1:I1").Find(What:=xName, _
After:=Worksheets("Kalender").Range("C1"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function


Private Function Datum_finden(Datum) As Range
Set Datum_finden = Worksheets("Kalender").Range("A:A").Find(What:=Datum, _
After:=Worksheets("Kalender").Range("A2"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End Function
Vielen Dank bis hierhin für die vielen Tipps. Damit es richtig funktioniert, muss er es aber noch in den Cellbereich eintragen.
Ursprünglich hatte Yal das hier vorgeschlagen:
If Not (Mitarbeiter Is Nothing Or StartDatum Is Nothing Or EndDatum Is Nothing) Then
Worksheets("Kalender").Range(StartDatum, EndDatum) = Worksheets("Eingabe").Range("F4").Value
Leider haut die Range aus meiner Sicht hier nicht hin, weshalb ich versucht habe sie folgendermaßen zu ändern:
If Not (Mitarbeiter Is Nothing Or StartDatum Is Nothing Or EndDatum Is Nothing) Then
Worksheets("Kalender").Range(Cells(StartDatum, Mitarbeiter), Cells(EndDatum, Mitarbeiter)) = Worksheets("Eingabe").Range("F4").Value
Dann würde er nur den Zeilenwert von Startdatum mit dem Spaltenwert von Mitarbeiter über den Bereich zu Zeilenwert EndDatum zu Spaltenwert Mitarbeiter für den Eintrag des Wertes F4 nutzen.
Hier scheitert es aber wieder, weil er sagt, dass die "Typen unverträglich" sind. Meint VBA damit Cells und Range?
Anzeige
AW: Datumsbereich abgleichen / Wertausgabe
03.05.2021 10:51:23
Yal
Hallo Steffen,
ich feinde es gut, dass Du dich in das Materie reinarbeite (das machen nicht alle) und wollen dich natürlich nich allein lassen.
Du bist fast da. StartDatum, EndDatum und Mitarbeiter sind sogenannte "Zeiger" (eng. Pointer) auf die realle existierende Elemente (in dem Fall Zelle).
Aus diese Element muss die passende "Eigenschaft" herausholen: Beim Start/EndDatum die Zeile ("Row") und beim Mitarbeiter die Spalte ("Column").
Dann sieht es so aus.

If Not (Mitarbeiter Is Nothing Or StartDatum Is Nothing Or EndDatum Is Nothing) Then
Worksheets("Kalender").Range(Cells(StartDatum.Row, Mitarbeiter.Column), Cells(EndDatum.Row, Mitarbeiter.Column)) = Worksheets("Eingabe").Range("F4").Value
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige