3.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo. Ich hätte hier ein etwas komplexes Problem.
Ich hab mir eine Userform gebastelt, die den Ablauf der Ein- und Ausfahrten von LKWs etwas vereinfachen soll.
Sie ist zweiseitig (Multiseitenobjekt).
Bild Einfahrt
Bild Ausfahrt

Auf der einen Seite gibt man die neuen Daten von LKW ein, die reinfahren, auf der zweiten Seite gibt man die Daten von LKWs ein, die schon da sind und wieder rausfahren.
Wenn ich den Speicherbutton drücke, werden die Daten nochmal in ausgegrauten Textboxen angezeigt und die Daten werden auch hübsch in die vorgesehenen Tabellenfelder eingetragen, soweit funktioniert das Ganze auch schon einwandfrei...

Allerdings komme ich jetzt an meine Grenzen, denn wenn der LKW das Gelände verläßt, sollte keine neue Zeile in der Tabelle erstellt werden, sondern die Zeile, wo der LKW reingefahren ist, muß um die neuen Daten ergänzt werden.
Eine Zeile ist in etwa so formatiert:
ZeitIN, ZeitOUT, Kennzeichen, Spedition, Container1IN, Container2IN, Container1OUT, Container2OUT

Beim Eintragen werden ZeitIN, Kennzeichen, Spedition, Container1IN, Container2IN ausgefüllt.
Beim Austragen wird dann nach Kennzeichen gesucht und die drei anderen Werte noch ergänzt.
Ein weiteres Problem ist, daß manche LKW mehrmals reinfahren und das Such-Makro doch bitte nur die neueste Einfahrt anspringt, damit bereits abgeschlossene Fahrten nicht überschrieben werden.
Kurz gesagt: in sich funktioniert die UserForm, aber es hapert noch an der Interaktion mit der Tabelle... :-)
Und hier sind dann Spezialisten gefragt, diese Aufgabenstellung übersteigt mein Können bei Weitem... ^_^'

6 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Katsura,

ich hätte das Kennzeichen mit Find() gesucht bis ich die Zeile habe wo der zweite Teil noch niht gefüllt ist.

Gruß Hajo
0 Punkte
Beantwortet von katsura Einsteiger_in (13 Punkte)
das ging ja fix... ^^

also quasi erst das Kennzeichen finden, und dann nachschaun lassen, ob da schon 'ne abfahrtszeit drinsteht und wenn nicht, dann die Daten in die Felder eintragen, ja? Und wenn das Aus-Zeitfeld schon gefüllt ist, dann Suche wiederholen...
okay, aber wie schreib ich das? Dazu müßte ich ja wissen, wie man Tabellenzellen abfragt...


if Cell(treffer).Value = "" Then
'Code für Tabellenteile füllen
else
'Code für Suche wiederholen
End If


So ungefähr stell ich mir die Arbeitsweise vor, allerdings kenn ich die Befehle ned wirklich, da ich in meiner Schulzeit nur mit QBasic rumprogrammierte... ^^'
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo Katsura,

hier mal ein orhandener Code der angepast werden muss.

Sub Find_mehrmals()
'*************************************************
'* H. Ziplies *
'* 24.11.08 *
'* http://Hajo-Excel.de *
'*************************************************
Dim RaFound As Range
Dim FirstAddress As String
Dim Search As String
Dim LoLetzte As Long
Dim LoI As Long
Dim ByMldg As Byte
Search = Worksheets("Tabelle2").Range("A1")
With Worksheets("Tabelle1")
LoLetzte = IIf(IsEmpty(.Range("A65536")), .Range("A65536").End(xlUp).Row, 65536)
' von Peter Haserodt
Set RaFound = .Range("A1:A" & LoLetzte).Find(Search, .Range("A" & LoLetzte), , xlWhole, , xlNext)
' *****
If RaFound Is Nothing Then Exit Sub 'falls nicht gefunden wird sub verlassen
If MsgBox("Gefunden in Zelle " & RaFound.Address(0, 0) & " ist dies richt richtige Zelle !!!" _
, vbYesNo + vbQuestion, "Abfrage") = 6 Then
RaFound.Interior.ColorIndex = 3
Else
FirstAddress = RaFound.Address
Do
Set RaFound = .Range("A1:A" & LoLetzte).FindNext(RaFound)
If RaFound.Address = FirstAddress Then Exit Sub
If MsgBox("Gefunden in Zelle " & RaFound.Address(0, 0) & " ist dies richt richtige Zelle !!!" _
, vbYesNo + vbQuestion, "Abfrage") = 6 Then
RaFound.Interior.ColorIndex = 3
Exit Do
End If
If RaFound.Row = LoLetzte Then Exit Do
LoI = LoI + 1
Loop
End If
End With
Set RaFound = Nothing
End Sub


Gruß Hajo
0 Punkte
Beantwortet von katsura Einsteiger_in (13 Punkte)
okay, das sieht nach viel Arbeit aus, aber ich denke, daß ich es damit schon hinkriegen werde. Ich muß ja im Endeffekt nur die Msgbox-Abfrage durch eine Abfrage nach "ist in Outtime.Value was drin oder ned?" ersetzen, richtig? Und natürlich die zu durchsuchende Tabellenspalte ändern, klar. :)
Auf jeden Fall schonmal vielen Dank für die Hilfe bis jetzt, das hat mir auf jeden Fall schonmal weitergeholfen!
Falls ich trotzdem Schwierigkeiten hab, meld ich mich wieder. ^^'
0 Punkte
Beantwortet von katsura Einsteiger_in (13 Punkte)
Hmm, so wie der Code dasteht, sucht er mir die leeren Zellen in der Spalte A und fragt nach jedem Treffer, ob's paßt, ja?
Jetzt würde mich noch interessieren, wie ich nach einer Zeichenfolge suche, die ich in ein Textfeld eingegeben habe. Soll
heißen, ich tipp z. B. ein Nummernschild ein und der PC schaut in der betreffenden Spalte nach, ob's das da gibt. Wenn ja, dann
guggt er, ob in der gleichen Zeile die Ausfahrtszeit noch fehlt und trägt diese dann ein. Das is der Knackpunkt an dem ich
immernoch hänge... ^_^'
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Katsura,

Search =Textbox1
Set RaFound = .Range("A1:A" & LoLetzte).Find(Search, .Range("A" & LoLetzte), , xlPart, , xlNext)

Gruß Hajo
...