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

Bestimmte Zellen suchen und mit Text befüllen (VBA)

Bestimmte Zellen suchen und mit Text befüllen (VBA)
20.02.2020 10:51:07
gottem11111
Hallo liebe Leute,
Ich habe eine UserForm mit 1 TextBox, 1 DatePicker und 1 ComboBox gebastelt:
TB: Text
DP: Startdatum
CB: Anschluss
Mein Worksheet sieht wie folgt aus:
Zeile 4: in jeder Zelle steht ein Datum (von 01.01.2020 bis 31.12.2020)
Spalte A: in jeder Zelle steht ein Anschluss (von 1-20)
Ich möchte nun, dass mit einem Klick Folgendes passiert:
Wenn ich Speichern drücke soll in Blatt 1 in Zeile 4 das gleiche Datum gesucht werden wie in DP.
Dann soll in Spalte 1 die gleiche Nummer gesucht werden wie in Combobox 2.
Als letztes möchte ich, dass die Zelle, die durch die Spalte von DP und die Zeile von CB definiert wird, mit TB beschrieben wird (Text).
Kann mir da jemand weiterhelfen?
Freundliche Grüße

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

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Zellen suchen und mit Text befüllen (VBA)
20.02.2020 11:33:41
Torsten
Hallo,
da ich deine Tabelle nicht kenne, nehme ich an, dass das Datum in Zeile 4 ab Spalte B beginnt und die Anschluesse in Spalte A ab Zeile 5.
Dann diesen Code auf den "SPeichern" Button:

Dim SuchZeile, SuchSpalte
Dim letzteZ As Long, letzteS As Long, lngSuchZeile As Long, lngSuchSpalte As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet2")        'anpassen
letzteZ = ws.Cells(Rows.Count, 1).End(xlUp).Row
letzteS = ws.Cells(4, Columns.Count).End(xlToLeft).Column
Set SuchZeile = ws.Range("A5:A" & letzteZ).Find(ComboBox2.Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not SuchZeile Is Nothing Then
lngSuchZeile = SuchZeile.Row
Else
MsgBox "Anschluss nicht gefunden"
Exit Sub
End If
Set SuchSpalte = ws.Range(ws.Cells(4, 2), ws.Cells(4, letzteS)).Find(CDate(DP.Value), LookIn:= _
xlValues, lookat:=xlWhole) 'Name des DatePickers anpassen anstatt DP
If Not SuchSpalte Is Nothing Then
lngSuchSpalte = SuchSpalte.Column
Else
MsgBox "Datum nicht gefunden"
End If
ws.Cells(lngSuchZeile, lngSuchSpalte) = TextBox1

Gruss Torsten
Anzeige
AW
21.02.2020 13:05:10
gottem11111
Hallo Torsten,
vielen Dank für diesen grandiosen Start und entschuldige die etwas späte Rückmeldung.
Ich habe den Code an meine Excel angepasst:
Dim SuchZeile, SuchSpalte
Dim letzteZ As Long, letzteS As Long, lngSuchZeile As Long, lngSuchSpalte As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Anschlussbelegungsplan")
letzteZ = ws.Cells(Rows.Count, 1).End(xlUp).Row
letzteS = ws.Cells(4, Columns.Count).End(xlToLeft).Column
Set SuchZeile = ws.Range("A5:A" & letzteZ).Find(ComboBox5.Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not SuchZeile Is Nothing Then
lngSuchZeile = SuchZeile.Row
Else
MsgBox "Anschluss nicht gefunden"
Exit Sub
End If
Set SuchSpalte = ws.Range(ws.Cells(4, 12), ws.Cells(4, letzteS)).Find(DTPicker1.Value, LookIn:= _
xlValues, lookat:=xlWhole)
If Not SuchSpalte Is Nothing Then
lngSuchSpalte = SuchSpalte.Column
Else
MsgBox "Datum nicht gefunden"
Exit Sub
End If
ws.Cells(lngSuchZeile, lngSuchSpalte) = TextBox3
Leider bekomme ich nun immer die Msgbox, dass das Datum nicht gefunden werden konnte. Jetzt gilt es den letzten Fehler zu finden. Da meine VBA Kenntnisse sehr bescheiden sind, kann ich lediglich Vermutungen treffen und vielleicht kann ich dir etwas mehr helfen, wenn ich dir noch mehr über meine Excel erzähle?!
Die Daten fangen in Zeile 4, Spalte L an gehen dann im Prinzip ins Unendliche (müsste also mit "ws.Cells(4, 12), ws.Cells(4, letzteS)" passen. "letzteS = ws.Cells(4, Columns.Count).End(xlToLeft).Column" sollte soweit dann ja auch stimmen, oder? Und da die MsgBox erscheint, scheint mir der If Verknüpfung auch alles ok zu sein. Bleibt also nur noch der Inhalt der Excel selber?! Die Daten haben sind in der Form TT.MM.JJJJ im Worksheet eingegeben, werden allerdings nur mit dem Tag angezeigt, also 1, 2, 3, …, 10, 11, 12, …, 30 und 31.
Fällt dir noch etwas ein, was ich machen könnte, oder was du wissen musst, damit wir mein Problem lösen können?
LG
Anzeige
AW: AW
25.02.2020 08:08:24
Torsten
Hallo,
sorry auch bei mir fuer verspaetete Reuckmeldung. War nicht online ein paar Tage. Also am Format des Datums kann es eigentlich nicht liegen. Egal, ob du nur den Tag anzeigst, oder was immer. Es ist und bleibt ein Datum (Wenn nicht Text in der Zelle steht, der wie ein Datum aussieht).
Was du noch versuchen koenntest ist diese Zeile zu aendern:
Set SuchSpalte = ws.Range(ws.Cells(4, 12), ws.Cells(4, letzteS)).Find(CDate(DTPicker1.Value), LookIn:=xlValues, lookat:=xlWhole)

Wenn das nicht hilft, kannst du deine Datei hochladen? Es ist einfacher, am Original auf Fehlersuche zu gehen. Oder zumindest eine Kopie mit anonymisierten Daten mit dem Originalcode.
Gruss Torsten
Anzeige
AW: AW
25.02.2020 09:15:02
gottem11111
Hallo Torsten,
eine späte Rückmeldung ist immerhin besser als gar keine :)
Mein Problem besteht auch nach deinem letzten Vorschlag immer noch und deswegen habe ich die Datei so gut es geht entschlankt, damit nur noch das Nötigste vorhanden ist. Ich musste den Code zwar etwas abändern, da die Bezeichnung der Schaltflächen etwas vom Original abweicht, aber dennoch sollte alles andere soweit passen. Ich hoffe, dass du mir dadurch etwas besser helfen kannst.
Gruß
https://www.herber.de/bbs/user/135421.xlsm
AW: AW
25.02.2020 10:27:04
Torsten
Hallo nochmal,
also es liegt doch tatsaechlich am Datumsformat. Hab jetzt rumprobiert und hab zur Suche das Format des DatePickers an das Zellenformat der Datumszeile angepasst. Und siehe da, jetzt findet er, was er soll.

Private Sub CommandButton2_Click()
'Speichern
Dim SuchZeile, SuchSpalte
Dim letzteZ As Long, letzteS As Long, lngSuchZeile As Long, lngSuchSpalte As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Anschlussbelegungsplan")
letzteZ = ws.Cells(Rows.Count, 1).End(xlUp).Row
letzteS = ws.Cells(4, Columns.Count).End(xlToLeft).Column
Set SuchZeile = ws.Range("A5:A" & letzteZ).Find(ComboBox6.Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not SuchZeile Is Nothing Then
lngSuchZeile = SuchZeile.Row
Else
MsgBox "Anschluss nicht gefunden"
Exit Sub
End If
Set SuchSpalte = ws.Range(ws.Cells(4, 12), ws.Cells(4, letzteS)).Find(Format(DTPicker1, " _
d"), LookIn:=xlValues, lookat:=xlWhole)
If Not SuchSpalte Is Nothing Then
lngSuchSpalte = SuchSpalte.Column
Else
MsgBox "Datum nicht gefunden"
Exit Sub
End If
ws.Cells(lngSuchZeile, lngSuchSpalte) = TextBox3
End Sub

Gruss Torsten
Anzeige
AW: AW
25.02.2020 10:28:51
Torsten
Nimm bitte die Zeilenumbrueche im Code raus, die von der Forensoftware erzeugt werden. Die bereiten immer wieder Probleme.
AW: AW
25.02.2020 12:15:18
gottem11111
Vielen lieben Dank Torsten, mein Wunsch ist fast in Erfüllung gegangen.
Nun habe ich noch ein allerletztes Problem, und zwar findet das Makro in der Excel das richtige Datum nicht ganz, nur den Tag.
Bei Eingabe 8.3. sucht also nur nach dem 8. und schreibt den Text dann unter den 8.2. rein ohne den richtigen Monat gefunden zu haben.
Könnte das hieran liegen:
Find(Format(DTPicker1, "d") ?
Wie ist die Syntax, dass er nicht nur nach dem richtigen Tag sucht?
Anzeige
AW: AW
25.02.2020 12:48:33
Torsten
Ja da liegt unser Problemchen. Diese .Find Methode hat so ihre Tuecken. Ich komm leider nicht dahinter, wieso sie funktioniert, wenn ich es auf den Tag begrenze, aber auf das gesamte Datum (egal ob als String oder als Datum) wird nichts gefunden. Ich habe diese Methode jetzt mal durch eine Schleife ersetzt. Das dauert zwar vielleicht 2 Sekunden laenger, aber es funktioniert.

Private Sub CommandButton2_Click()
'Speichern
Dim SuchZeile
Dim SuchSpalte
Dim letzteZ As Long, letzteS As Long, lngSuchZeile As Long, lngSuchSpalte As Long
Dim ws As Worksheet
Dim Datum As Date
Dim Zelle As Range, Bereich As Range
Set ws = ThisWorkbook.Sheets("Anschlussbelegungsplan")
letzteZ = ws.Cells(Rows.Count, 1).End(xlUp).Row
letzteS = ws.Cells(4, Columns.Count).End(xlToLeft).Column
Set SuchZeile = ws.Range("A5:A" & letzteZ).Find(ComboBox6.Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not SuchZeile Is Nothing Then
lngSuchZeile = SuchZeile.Row
Else
MsgBox "Anschluss nicht gefunden"
Exit Sub
End If
Datum = CDate(Format(DTPicker1, "dd/mm/yyyy"))
Set Bereich = ws.Range(ws.Cells(4, 12), ws.Cells(4, letzteS))
For Each Zelle In Bereich
If Zelle = Datum Then
lngSuchSpalte = Zelle.Column
Exit For
End If
Next
ws.Cells(lngSuchZeile, lngSuchSpalte) = TextBox3
End Sub

Gruss Torsten
Anzeige
AW: AW
25.02.2020 13:13:26
gottem11111
GEIL, GEIL, GEIL!!!
Es klappt nun genau so wie ich es wollte, du bist der Beste Torsten.
Vielen, vielen Dank und dir wünsche ich noch einen super Tag :)
gerne...
25.02.2020 13:52:46
Torsten
viel Spass

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige