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

Zeile ausschneiden wenn...

Zeile ausschneiden wenn...
12.06.2020 06:08:41
Haller
Guten Morgen!
Ich habe eine Datei in welcher mit Hilfe einer Userform die Zellen beschriftet werden.
Beim Eintragen der Userform in die Mappe, ist es möglich das die Spalte P,Q und R leer oder beschriftet sind.
Wenn P,Q und R beschriftet sind soll es in eine andere Mappe wie wenn die Zellen leer sind. Die leeren Zellen werden aber zu einem späteren Zeitpunkt noch vervollständigt.
In meiner bescheidener Excelvorstellung dachte ich mir, alles in die Mappe (Auf Areal) eintragen in welcher die nicht vollständig ausgefüllten stehen sollen. Dort mit meinem im Internet gefundenen Code, der Abgleich ob Spalte R leer oder nicht. Wenn nicht leer soll die Zeile automatisch ausgeschnitten werden und in die Mappe (Journal) zu unters eingefügt werden.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 18 Then 'Änderung in Spalte R
If Target.Value  "" Then
lrow = Sheets("Auf Areal").Range("A65536").End(xlUp).Row + 1 '1. freie Zeile wird ermittelt
Range("A" & Target.Row & ":S" & Target.Row).Cut Sheets("Journal").Range("A" & lrow & ":S" &  _
lrow)
End If
End If
End Sub
Im moment wird die richtige Zeile ausgeschnitten aber in der Mappe (Journal) nicht in die unterste Zeile eingefügt sondern überschreibt mir immer die Zweite Zeile.
Ich hoffe ich konnte mein Problem so schildern damit ihr es versteht.
Herzlichen Dank für eure Hilfe

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile ausschneiden wenn...
12.06.2020 06:37:29
ralf_b
das was du suchst sollte nicht in selection change ereignis stehen.
wenn du mit Userform arbeitest,dann kannst du den code dort unterbringen. Also die zeilen z.b. gleich nach dem Ausfüllen im Ziel blatt eintragen
beschreibe den Vorgang bitte komplett. evtl kannst du dir hier einige Arbeitsschritte sparen. mit
Wann wird die Userform benutzt und wann willst du die lückenhaften daten in die andere Tabelle schreiben?
AW: Zeile ausschneiden wenn...
12.06.2020 06:48:51
Haller
Die Userform wird für die Anlieferung benötigt.
wenn der Lieferant auf das Areal fährt bleibt er in der Mappe (Auf Areal) dort wird der Austritt mit Hilfe eines Button, welcher Datum, Zeit und Excelusername eingetragen.
Wird nur etwas angeliefert und der Lieferant geht gleich wider wird in der Userform direkt der Austritt eingetragen.
Möchtest du den ganzen Code für die Userform sehen?
Ich danke die sehr für deine zeit die du für mich Aufwendest!
Anzeige
AW: Zeile ausschneiden wenn...
12.06.2020 07:54:12
ralf_b
die frage is ob die lücken erst später irgendwann ins neue blatt sollen oder gleich wenn der button gedrückt wird.
und ja eine beispielmappe hilft weiter.beachte das keine geheimen oder persönlichen daten darin sind.
AW: Zeile ausschneiden wenn...
12.06.2020 08:02:21
Haller
Am liebsten hätte ich das die Daten direkt in die richtige Mappe wandern.
Leider ist es schwierig die Datei so hochzuladen damit sie noch brauchbar aber nicht Persönliche oder Vertrauliche Daten enthalten sind...
AW: Zeile ausschneiden wenn...
12.06.2020 08:29:04
ralf_b
du kannst in der buttonklick funktion bereits prüfen ob in dem bereich die felder alle gefüllt sind und dann entsprechend das arbeitsblatt als ziel wählen
der vorhanden code müßte nur in die userfom bei commandbutton_click()
den code aus dem button click kannst du doch hochladen oder?
Anzeige
AW: Zeile ausschneiden wenn...
12.06.2020 08:39:10
Haller

Private Sub CommandButton1_Click()
'Rückfrage wenn Textbox leer
If TextBox_Datum_E = "" Then
MsgBox ("Bitte Datum eintragen")
Exit Sub
End If
If TextBox_Zeit_E = "" Then
MsgBox ("Bitte Zeit eintragen")
Exit Sub
End If
If TextBox_Wächter_E = "" Then
MsgBox ("Bitte Kurzzeichen eintragen")
Exit Sub
End If
If TextBox_Name = "" Then
MsgBox ("Bitte Name vom Fahrer eintragen")
Exit Sub
End If
If TextBoxFirma = "" Then
MsgBox ("Bitte Firma eintragen")
Exit Sub
End If
If TextBox_KZ1 = "" Then
MsgBox ("Bitte Kontrollschild eintragen")
Exit Sub
End If
If TextBox_SB = "" Then
MsgBox ("Bitte Kontaktperson eintragen")
Exit Sub
End If
If TextBox_Material = "" Then
MsgBox ("Bitte eintragen was Geliefert wurde oder -")
Exit Sub
End If
'Erste Freie Zeile ausfindig machen
Application.EnableEvents = True
Application.ScreenUpdating = False
Worksheets("Auf Areal").Activate
Dim last As Integer
last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
'Wächter Eintritt
Cells(last, 1).Value = TextBox_Wächter_E
'Datum Eintritt
Cells(last, 2).Value = TextBox_Datum_E
'Zeit Eintritt
Cells(last, 3).Value = TextBox_Zeit_E
'Name Fahrer
Cells(last, 4).Value = TextBox_Name
'Name Firma
Cells(last, 5).Value = TextBoxFirma
'Kontrollschild
Cells(last, 6).Value = TextBox_KZ1
'Kategorie
If OptionButton_LKW.Value = True Then Cells(last, 7).Value = "LKW"
If OptionButton_PKW.Value = True Then Cells(last, 7).Value = "PKW"
If OptionButton_Transporter.Value = True Then Cells(last, 7).Value = "Transporter"
If OptionButton_Andere.Value = True Then Cells(last, 7).Value = TextBox_Andere
'Sachbearbeiter
Cells(last, 8).Value = TextBox_SB
'Ware
Cells(last, 9).Value = TextBox_Material
'Abladeort
Cells(last, 10).Value = ListBox_Ladeort.Value
'Ware Beschädigt
If OptionButton_Nein.Value = True Then Cells(last, 11).Value = "Nein"
If OptionButton_Ja.Value = True Then Cells(last, 11).Value = TextBox_Ware_beschädigt
'Bemerkungen
Cells(last, 12).Value = TextBox_Bemerkung
'Gammaalarm
If OptionButton_Gamma_Nein.Value = True Then Cells(last, 13).Value = "Nein"
If OptionButton_Gamma_Ja.Value = True Then Cells(last, 13).Value = "Ja"
'Bemerkungen Gammaalarm
Cells(last, 15).Value = TextBox_Bemerkungen_Gamma
'Austritt Wächter
Cells(last, 16).Value = TextBox_Wächter_A
'Austritt Datum
Cells(last, 17).Value = TextBox_Datum_A
'Austritt Zeit
Cells(last, 18).Value = TextBox_Zeit_A
'Liste leeren
TextBox_Wächter_E = ""
TextBox_Name = ""
TextBoxFirma = ""
TextBox_KZ1 = ""
TextBox_SB = ""
TextBox_Material = ""
TextBox_Bemerkung = ""
TextBox_Bemerkungen_Gamma = ""
TextBox_Wächter_A = ""
TextBox_Datum_A = ""
TextBox_Zeit_A = ""
End Sub
Private Sub CommandButton2_Click()
Sheets("Auf Areal").Select
Unload UserForm3
Unload UserForm1
End Sub
Private Sub CommandButton3_Click()
ThisWorkbook.Save
Application.Quit
End Sub
Private Sub TextBox_KZ1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFind As Range
Dim rngFirst As Range
Set rngFind = Sheets("Erfassen").UsedRange.Find( _
what:=TextBox_KZ1.Text, _
lookat:=xlWhole, _
LookIn:=xlValues) 'In der Mappe "Erfassen" wird der Textinhalt von der Textbox KZ1  _
gesucht
If rngFind Is Nothing Then
Beep
MsgBox "Keine Gesuch gefunden!"
Exit Sub
End If
Set rngFirst = rngFind
Do
TextBoxFirma = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter  _
eintrag verhindert wird
TextBox_SB = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter  _
eintrag verhindert wird
TextBoxFirma.Text = TextBoxFirma.Text & rngFind.Offset(0, 1 - rngFind.Column).Text &  _
vbLlf
TextBox_SB.Text = TextBox_SB.Text & rngFind.Offset(0, 14 - rngFind.Column) & vbLf
Set rngFind = Sheets("Erfassen").UsedRange.FindNext(rngFind)
Loop While Not rngFind Is Nothing And _
rngFind.Address  rngFirst.Address
End Sub
Private Sub TextBox_Datum_A_Enter()
TextBox_Datum_A.Value = Date 'Automatisch beim Eintreten in Zelle Aktuelles Datum
End Sub
Private Sub TextBox_Wächter_A_Enter()
TextBox_Wächter_A.Value = Application.UserName 'Automatisch beim Eintreten in Zelle Name von  _
angemeldetem Exceluser
End Sub
Private Sub TextBox_Wächter_E_Enter()
TextBox_Wächter_E.Value = Application.UserName 'Automatisch beim Eintreten in Zelle Name von  _
angemeldetem Exceluser
End Sub
Private Sub TextBox_Zeit_A_Enter()
TextBox_Zeit_A.Value = Time 'Automatisch beim Eintreten in Zelle Aktuelle Zeit
End Sub
Private Sub UserForm_Initialize()
TextBox_Datum_E = Date
TextBox_Zeit_E = Time
'TextBox_Ware_beschädigt = "Wenn Ja ausfüllen"
'TextBox_Bemerkungen_Gamma = "Alarm beschreiben"
'TextBox_SU_MA = "Bei Alarm Ausfüllen"
OptionButton_Nein.Value = True 'Ware Beschädigt Standart Nein
OptionButton_Gamma_Nein.Value = True ' Gammaalarm Standart Nein
'Ab-/Aufladeort
With ListBox_Ladeort
.AddItem "Areal"
.AddItem "Vor der Schleuse"
.AddItem "In der Schleuse"
.AddItem "Instalationsplatz"
End With
ThisWorkbook.Save
End Sub

Anzeige
AW: Zeile ausschneiden wenn...
12.06.2020 09:43:47
Haller
Herzlichen Dank!!!
Mir ist noch unklar warum ich nun eine Mappe "Fehler" habe?
AW: Zeile ausschneiden wenn...
12.06.2020 10:17:57
Haller
mit dem von dir umgeschriebenen Code funktionieren nicht mehr alle meine befehle.
Mein Code sieht nun wie folgt aus
Option Explicit
Private Sub CommandButton1_Click()
Dim last As Integer
Dim wksAreal As Worksheet, wksFehler As Worksheet, aktSheet As Worksheet
Dim cntrl As MSForms.Control
Set wksAreal = Worksheets("Auf Areal")
Set wksFehler = Worksheets("Fehler")
Set aktSheet = Worksheets("Auf Areal")
'Rückfrage wenn Textbox leer
If TextBox_Datum_E = "" Then
MsgBox ("Bitte Datum eintragen")
Exit Sub
End If
If TextBox_Zeit_E = "" Then
MsgBox ("Bitte Zeit eintragen")
Exit Sub
End If
If TextBox_Wächter_E = "" Then
MsgBox ("Bitte Kurzzeichen eintragen")
Exit Sub
End If
If TextBox_Name = "" Then
MsgBox ("Bitte Name vom Fahrer eintragen")
Exit Sub
End If
If TextBoxFirma = "" Then
MsgBox ("Bitte Firma eintragen")
Exit Sub
End If
If TextBox_KZ1 = "" Then
MsgBox ("Bitte Kontrollschild eintragen")
Exit Sub
End If
If TextBox_SB = "" Then
MsgBox ("Bitte Kontaktperson eintragen")
Exit Sub
End If
If TextBox_Material = "" Then
MsgBox ("Bitte eintragen was Geliefert wurde oder -")
Exit Sub
End If
'Application.EnableEvents = True
'Application.ScreenUpdating = False
'Worksheets("Auf Areal").Activate
'solltest du hier nicht alle Textboxen auf leer prüfen wollen,
'dann muß du die einzeln abfragen und das zielblatt entsprechend setzen
For Each cntrl In Userfom.Controls  ' durchsucht alle textboxen ob diese leer sind
If TypeOf ctnrl Is TextBox Then
If cntrl = "" Then        'wenn leer wir das Zielblatt geändert
Set aktSheet = wksFehler
End If
End If
Next
With aktSheet
last = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'Erste Freie Zeile ausfindig machen
.Cells(last, 1).Value = TextBox_Wächter_E 'Wächter Eintritt
.Cells(last, 2).Value = TextBox_Datum_E 'Datum Eintritt
.Cells(last, 3).Value = TextBox_Zeit_E 'Zeit Eintritt
.Cells(last, 4).Value = TextBox_Name 'Name Fahrer
.Cells(last, 5).Value = TextBoxFirma 'Name Firma
.Cells(last, 6).Value = TextBox_KZ1 'Kontrollschild
'Kategorie
If OptionButton_LKW.Value = True Then .Cells(last, 7).Value = "LKW"
If OptionButton_PKW.Value = True Then .Cells(last, 7).Value = "PKW"
If OptionButton_Transporter.Value = True Then .Cells(last, 7).Value = "Transporter"
If OptionButton_Andere.Value = True Then .Cells(last, 7).Value = TextBox_Andere
.Cells(last, 8).Value = TextBox_SB 'Sachbearbeiter
.Cells(last, 9).Value = TextBox_Material 'Ware
.Cells(last, 10).Value = ListBox_Ladeort.Value 'Abladeort
'Ware Beschädigt
If OptionButton_Nein.Value = True Then .Cells(last, 11).Value = "Nein"
If OptionButton_Ja.Value = True Then .Cells(last, 11).Value = TextBox_Ware_beschädigt
.Cells(last, 12).Value = TextBox_Bemerkung 'Bemerkungen
'Gammaalarm
If OptionButton_Gamma_Nein.Value = True Then .Cells(last, 13).Value = "Nein"
If OptionButton_Gamma_Ja.Value = True Then .Cells(last, 13).Value = "Ja"
.Cells(last, 15).Value = TextBox_Bemerkungen_Gamma 'Bemerkungen Gammaalarm
.Cells(last, 16).Value = TextBox_Wächter_A 'Austritt Wächter
.Cells(last, 17).Value = TextBox_Datum_A 'Austritt Datum
.Cells(last, 18).Value = TextBox_Zeit_A 'Austritt Zeit
End With
'Liste leeren
TextBox_Wächter_E = ""
TextBox_Name = ""
TextBoxFirma = ""
TextBox_KZ1 = ""
TextBox_SB = ""
TextBox_Material = ""
TextBox_Bemerkung = ""
TextBox_Bemerkungen_Gamma = ""
TextBox_Wächter_A = ""
TextBox_Datum_A = ""
TextBox_Zeit_A = ""
Set wksAreal = Nothing
Set wksFehler = Nothing
Set aktSheet = Nothing
End Sub
Private Sub CommandButton2_Click()
Sheets("Auf Areal").Select
Unload UserForm3
Unload UserForm1
End Sub
Private Sub CommandButton3_Click()
ThisWorkbook.Save
Application.Quit
End Sub
Private Sub Frame5_Click()
End Sub
Private Sub TextBox_KZ1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFind As Range
Dim rngFirst As Range
Set rngFind = Sheets("Erfassen").UsedRange.Find( _
what:=TextBox_KZ1.Text, _
lookat:=xlWhole, _
LookIn:=xlValues) 'In der Mappe "Erfassen" wird der Textinhalt von der Textbox KZ1  _
gesucht
If rngFind Is Nothing Then
Beep
MsgBox "Keine Gesuch gefunden!"
Exit Sub
End If
Set rngFirst = rngFind
Do
TextBoxFirma = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter  _
eintrag verhindert wird
TextBox_SB = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter  _
eintrag verhindert wird
TextBoxFirma.Text = TextBoxFirma.Text & rngFind.Offset(0, 1 - rngFind.Column).Text &  _
vbLlf !!!!hier stockt es!!!!
TextBox_SB.Text = TextBox_SB.Text & rngFind.Offset(0, 14 - rngFind.Column) & vbLf
Set rngFind = Sheets("Erfassen").UsedRange.FindNext(rngFind)
Loop While Not rngFind Is Nothing And _
rngFind.Address  rngFirst.Address
End Sub
Private Sub TextBox_Datum_A_Enter()
TextBox_Datum_A.Value = Date 'Automatisch beim Eintreten in Zelle Aktuelles Datum
End Sub
Private Sub TextBox_Wächter_A_Enter()
TextBox_Wächter_A.Value = Application.UserName 'Automatisch beim Eintreten in Zelle Name von  _
angemeldetem Exceluser
End Sub
Private Sub TextBox_Wächter_E_Enter()
TextBox_Wächter_E.Value = Application.UserName 'Automatisch beim Eintreten in Zelle Name von  _
angemeldetem Exceluser
End Sub
Private Sub TextBox_Zeit_A_Enter()
TextBox_Zeit_A.Value = Time 'Automatisch beim Eintreten in Zelle Aktuelle Zeit
End Sub
Private Sub UserForm_Initialize()
TextBox_Datum_E = Date
TextBox_Zeit_E = Time
'TextBox_Ware_beschädigt = "Wenn Ja ausfüllen"
'TextBox_Bemerkungen_Gamma = "Alarm beschreiben"
'TextBox_SU_MA = "Bei Alarm Ausfüllen"
OptionButton_Nein.Value = True 'Ware Beschädigt Standart Nein
OptionButton_Gamma_Nein.Value = True ' Gammaalarm Standart Nein
'Ab-/Aufladeort
With ListBox_Ladeort
.AddItem "Areal"
.AddItem "Vor der Schleuse"
.AddItem "In der Schleuse"
.AddItem "Instalationsplatz"
End With
ThisWorkbook.Save
End Sub

Anzeige
AW: Zeile ausschneiden wenn...
12.06.2020 10:33:53
ralf_b
ersetzte mal durch das hier und passe den userformnamen an wenn deine Userform nicht UserForm1 heisst
For Each cntrl In UserForm1.Controls  ' durchsucht alle textboxen ob diese leer sind
If TypeName(cntrl) = "TextBox" Then
If cntrl = "" Then        'wenn leer wir das Zielblatt geändert
Set aktSheet = wksFehler
End If
End If
Next

AW: Zeile ausschneiden wenn...
12.06.2020 12:06:34
Haller
Leider funktioniert es nicht
ich kann den code nicht so testen wie du owT
12.06.2020 10:35:32
ralf_b
also wenn Fehler, welcher?
AW: ich kann den code nicht so testen wie du owT
12.06.2020 11:47:50
Haller

Private Sub TextBox_KZ1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFind As Range
Dim rngFirst As Range
Set rngFind = Sheets("Erfassen").UsedRange.Find( _
what:=TextBox_KZ1.Text, _
lookat:=xlWhole, _
LookIn:=xlValues) 'In der Mappe "Erfassen" wird der Textinhalt von der Textbox KZ1  _
gesucht
If rngFind Is Nothing Then
Beep
MsgBox "Keine Gesuch gefunden!"
Exit Sub
End If
Set rngFirst = rngFind
Do
TextBoxFirma = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter  _
_
eintrag verhindert wird
TextBox_SB = "" 'Wenn etwas gefunden wird, zuerst Inhalt löschen. Damit ein doppelter   _
_
eintrag verhindert wird
TextBoxFirma.Text = TextBoxFirma.Text & rngFind.Offset(0, 1 - rngFind.Column).Text &  _
vbLlf !!!!hier stockt es!!!!
TextBox_SB.Text = TextBox_SB.Text & rngFind.Offset(0, 14 - rngFind.Column) & vbLf
Set rngFind = Sheets("Erfassen").UsedRange.FindNext(rngFind)
Loop While Not rngFind Is Nothing And _
rngFind.Address  rngFirst.Address
End Sub
Dieser Abschnitt funktioniert nicht mehr
Anzeige
Hinweis zum Debugging owT
12.06.2020 14:05:38
ralf_b
na toll, wir sind jetzt in einem andern blatt als Areal oder Journal(Fehler)
was ist denn der Fehler? der Debugger sagt ja schon etwas genauer was da nicht stimmt.
und spätestens ab jetzt solltest du dich mit debugging und Auswerten der Objektinhalte und Variablen auseinandersetzen. mit F8 schrittweise durchs Programm gehen, vorher vielleicht einen Haltepunkt setzen und die omminösen Werte prüfen.
solange ich keine userform in einer beispielmappe zu sehen bekomme, macht das Rätzelraten hier keinen Sinn.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige