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

Worksheet_Change bei löschen von Zellenwerten

Worksheet_Change bei löschen von Zellenwerten
23.02.2018 21:11:25
Zellenwerten
Hallo Zusammen,
wenn ich in Spalte A ab der 9. Zeile einen Wert eintrage, dann sollen mir aus dem Worksheet " _ Leistungsbeschreibung" entsprechende Daten geholt werden und in die Spalte B und D geschrieben werden. Das funktioniert auch mit folgendem Code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wkb As Workbook
Dim wks_Leist As Worksheet
Dim Zelle As Range
Dim Zahl As Integer
Dim Zeile As Variant
Dim Spalte As Variant
Dim Leistung As Variant
Dim Leistung1 As Variant
Set wkb = ThisWorkbook
Set wks_Leist = wkb.Worksheets("Leistungsbeschreibung")
Set Zelle = wkb.Worksheets("Eingabeformular").Cells(1, 1)
Zahl = Zelle.Value
Zeile = Selection.Address
Select Case Zahl
Case Is = 1
Spalte = 1
Case Is = 2
Spalte = 5
Case Is = 3
Spalte = 13
Case Is = 4
Spalte = 9
End Select
If Target.Column = 1 And Target.Row > 9 Then
lz = wks_Leist.Cells(Rows.Count, Spalte).End(xlUp).Row
For i = 3 To lz
Leistung = Target.Value
Leistung1 = wks_Leist.Cells(i, Spalte).Value
If Leistung = Leistung1 Then      'hier kommt der Fehler
Application.EnableEvents = False
ActiveSheet.Cells(ActiveCell.Row, 2) = wks_Leist.Cells(i, Spalte + 1)
ActiveSheet.Cells(ActiveCell.Row, 4) = wks_Leist.Cells(i, Spalte + 2)
Application.EnableEvents = True
End If
Next i
End If
End Sub

Wenn ich nun die Zellen markiere und lösche, ob per vba oder "von Hand", bekomme ich die Fehlermeldung: Typen unverträglich (siehe im Code die Stelle wo der Fehler auftaucht)
Wie bitt muss ich das ändern, bzw. warum kommt der Fehler?
Gruß Oisse

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Probier mal AS String statt Variant
23.02.2018 21:15:38
Matthias
Hallo
Dim Leistung As String
Dim Leistung1 As String
nicht getestet!
Gruß Matthias
AW: Probier mal AS String statt Variant
23.02.2018 21:21:36
Oisse
Hallo Matthias,
danke für die schnelle Antwort. Das war´s aber leider nicht.
Es kommt die gleiche Fehlermeldung.
AW: Probier mal AS String statt Variant
23.02.2018 21:25:31
Oisse
Habe nochmal nachgesehen,
diesmal kommt die Fehlermeldung zwei Zeilen früher nämlich bei:
Leistung = Target.Value
Irgendeine Idee?
Lösung gefunden
23.02.2018 21:33:10
Oisse
Das Makro hat Target.Value nicht akzeptiert oder konnte nichts damit anfangen oder, oder oder.
Auf jeden Fall kam bei Target.Value der Fehler.
Ich habe jetzt Target.Cell(Target.Row,Target.Column).Value genommen und es funktioniert.
Aber warum?
Könnte mir bitte noch jemand erklären, was bei dem einen und was bei dem anderen passiert?
Anzeige
AW: Lösung gefunden
23.02.2018 21:50:48
Oisse
Tut mir leid, wenn ich nerve, aber da war ich wohl zu euphorisch.
Jetzt funktioniert zwar das löschen aber jetzt bekomme ich keinen Wert.
Hab mittlerweile so viel durchprobiert, aber ich versteh einfach nicht, was da passiert. Seufz
AW: Lösung gefunden
23.02.2018 22:08:01
onur
Dann poste doch mal die Datei.
Löschst du mehrere Zellen auf 1mal? Das sieht ...
23.02.2018 22:21:16
Luc:-?
…dein Pgm nämlich nicht vor, Oisse!
Das würde auch den Fehler verursachen, denn ein ZellBereich mit mehreren Werten (auch leer!) ist niemals mit einem Einzelwert vergleichbar!
Außerdem, wofür soll Zeile verwendet wdn? Hier wohl gar nicht und das wäre dann auch keine ZeilenNr (Zahl), sondern eine ganze Adresse (Text). Statt des Select Case-Konstrukts könnte man auch ein indiziertes Array verwenden…
Gruß, Luc :-?
Anzeige
AW: Löschst du mehrere Zellen auf 1mal? Das sieht ...
23.02.2018 22:41:42
Oisse
Danke euch beiden für eure Antworten.
@ Luc
Du hast Recht: Zahl und Zeile wird in diesem Code nicht benötigt (Überbleibsel von reinkopiertem Code)
Das mit dem Löschen von mehreren Zellen auf einmal stimmt. Das mache ich tatsächlich.
Heißt das, ich müsste Zeile für Zeile löschen?
Mein Code sieht jetzt so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wkb As Workbook
Dim wks_Leist As Worksheet
Dim Zelle As Range
Dim Spalte As Variant
Dim Leistung As Variant
Dim Leistung1 As Variant
Set wkb = ThisWorkbook
Set wks_Leist = wkb.Worksheets("Leistungsbeschreibung")
Set Zelle = wkb.Worksheets("Eingabeformular").Cells(1, 1)
Select Case Zahl
Case Is = 1
Spalte = 1
Case Is = 2
Spalte = 5
Case Is = 3
Spalte = 13
Case Is = 4
Spalte = 9
End Select
If Target.Column = 1 And Target.Row > 9 Then
lz = wks_Leist.Cells(Rows.Count, Spalte).End(xlUp).Row
For i = 3 To lz
If ActiveCell  "" Then
Leistung = Target.Value
Leistung1 = wks_Leist.Cells(i, Spalte).Value
If Leistung = Leistung1 Then
Application.EnableEvents = False
ActiveSheet.Cells(ActiveCell.Row, 2) = wks_Leist.Cells(i, Spalte + 1)
ActiveSheet.Cells(ActiveCell.Row, 4) = wks_Leist.Cells(i, Spalte + 2)
Application.EnableEvents = True
End If
Else
Exit Sub
End If
Next i
End If
End Sub
Ich habe Target.Value mit ActiveCell ersetzt.
Momentan läuft es gut.
Es funktioniert beides. Das Löschen und das Einlesen der Daten aus einem anderen Sheet.
Anzeige
Target.Cells(1) <> "" hätt's auch getan... ;-) owT
23.02.2018 23:50:33
Luc:-?
:-?
AW: Löschst du mehrere Zellen auf 1mal? Das sieht ...
24.02.2018 00:06:31
KlausF
Hi,
bei mir funktioniert das hier (mit Löschen von mehreren Zellen):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wkb As Workbook
Dim wks_Leist As Worksheet
Dim Zelle As Range
Dim Zahl As Integer
Dim Spalte As Integer
Dim Leistung As Variant
Dim Leistung1 As Variant
Dim lz As Long
Dim i As Long
Set wkb = ThisWorkbook
Set wks_Leist = wkb.Worksheets("Leistungsbeschreibung")
Set Zelle = wkb.Worksheets("Eingabeformular").Cells(1, 1)
Zahl = Zelle.Value
Select Case Zahl
Case Is = 1: Spalte = 1
Case Is = 2: Spalte = 5
Case Is = 3: Spalte = 13
Case Is = 4: Spalte = 9
End Select
If Target.Column = 1 And Target.Row > 9 Then
Leistung = Target.Value
#If VBA7 Then
If Target.CountLarge > 1 Then GoTo Errorhandler
#Else
If Target.Count > 1 Then GoTo Errorhandler
#End If
lz = wks_Leist.Cells(Rows.Count, Spalte).End(xlUp).Row
For i = 3 To lz
Leistung1 = wks_Leist.Cells(i, Spalte).Value
If Leistung = Leistung1 Then
Application.EnableEvents = False
ActiveSheet.Cells(ActiveCell.Row, 2) = wks_Leist.Cells(i, Spalte + 1)
ActiveSheet.Cells(ActiveCell.Row, 4) = wks_Leist.Cells(i, Spalte + 2)
Application.EnableEvents = True
End If
Next i
End If
Errorhandler:
Set wkb = Nothing
Set wks_Leist = Nothing
Set Zelle = Nothing
End Sub
Gruß
Klaus
If ActiveCell "" Then bzw. Target.Cells(1) funktioniert bei mir nicht, deshalb 'rausgenommen
Anzeige
AW: Löschst du mehrere Zellen auf 1mal? Das sieht ...
27.02.2018 13:19:39
Oisse
Hallo nochmal alle Zusammen.
Sorry, dass ich erst jetzt dazu komme Danke zu sagen. Grippisch.
Also danke an:
Luc:-?
KlausF (diesen Vorschlag habe ich übrigens übernommen :-))
Onur, der bereit gewesen wäre meine Datei anzuschauen und
Mathias L
und alle anderen, die sich meinem Problem zumindest gedanklich auseinandergesetzt haben.
Ein klasse Forum!
Gruß Oisse

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige