23.04.2016, 18:05 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2016, 18:06 von campinge.)
Hallo miteinander!
Ich habe ein kleines Problem, welches ich momentan nicht lösen kann:
Auf meiner Eingabemaske ist es bisher möglich eine Kundennummer einzugeben. Daraus wird dann die Anschrift in einem anderen Blatt gesucht. Dazu möchte ich jetzt die Möglichkeit hinzufügen, Alle Daten über den Kundennamen zu suchen. Das Problem hierbei ist jedoch, dass die Anzeige von Kundennamen und Nummer auch jeweils in dem Feld erscheinen soll, indem diese auch eingegeben werden. Über Wenn-Funktionen habe ich es bisher geschafft, alle Kundendaten - je nach Eingabe zwischen zu speichern. Ich hatte gehofft mit der folgenden VBA-Formel die Lösung zu finden:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "E190" Then Range("E200") = "=Daten!G35" If Target.Address(0, 0) = "E200" Then Range("E190") = "=Daten!F35" End Sub
E190 ist das Eingabefeld der Kundennummer, E200 des Kundennamen, Daten!F35 / Daten!G35 sind die Zwischenspeicher dafür. Meine Hoffnung war, dass Worksheet-Change nur bei einer Eingabe des Benutzers ausgelöst wird. Anscheinend wird dies aber bei jeder Veränderung im Worksheet ausgeführt. Somit lande ich in einer Endlosschleife. Gibt es hier eine Lösung, die NUR bei der Eingabe eines Benutzers auslöst?
durch den Eintrag löst Du das Change-Ereignis nochmals aus. Du mußt die Ereignisse abschalten.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "E190" Then Range("E200") = "=Daten!G35" If Target.Address(0, 0) = "E200" Then Range("E190") = "=Daten!F35" Application.EnableEvents = True End Sub
danke der schnellen Antwort! Das funktioniert prima. Aber leider nur ein mal. Danach verschluckt es sich. Kann man in einem zwischenschritt die vorherigen Werte der Felder löschen? Range("E200").clear klappt leidern nicht, da es sich um verbundene Zellen handelt :(
27.04.2016, 13:53 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2016, 13:54 von campinge.)
Hallo zusammen.
Danke schon mal für die Hilfestellungen. Ich habe ein exemplarisches File angehängt. Für andere Lösungsvorschläge bin ich gerne offen, denn meiner klappt ja nicht, wie man sieht =)
statt Formeln in die Zellen zu schreiben (wobei die Syntax schon falsch ist) solltest Du einfach die Werte eintragen!
Code:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim wks As Worksheet Dim rng As Range Dim rng2 As Range Dim rng3 As Range Set wks = Sheets("customer") Set rng = wks.Columns(1) Set rng2 = wks.Range("A:E") Set rng3 = wks.Columns(2) Application.EnableEvents = False
If Target.Count > 1 Or Intersect(Target, Range("B1:B2")) Is Nothing Then Exit Sub If Target.Address = "$B$1" Then If Application.WorksheetFunction.CountIf(rng, Range("B1")) > 0 Then Range("B2") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 2, 0) Else MsgBox "Kundennummer nicht vorhanden", , "Achtung" GoTo 0 End If Else If Application.WorksheetFunction.CountIf(rng3, Range("B2")) > 0 Then Range("B1") = Application.WorksheetFunction.Index(rng, Application.WorksheetFunction.Match(Range("B2"), rng3, 0)) Else MsgBox "Kunde nicht vorhanden", , "Achtung" GoTo 0 End If End If Range("B3") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 3, 0) Range("B4") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 4, 0) Range("B5") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 5, 0) 0: Application.EnableEvents = True End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr! Über Rückmeldungen würde ich mich freuen.
(27.04.2016, 14:54)BoskoBiati schrieb: statt Formeln in die Zellen zu schreiben (wobei die Syntax schon falsch ist) solltest Du einfach die Werte eintragen!
:28:
Beobachtung: wenn ich die Zellen B3-B5 leere und dann eine Kundennummer oder eine Firma eintrage, startet das Makro nicht und es passiert nix mehr. Auch wenn wieder die Texte drin stehen, startet das Makro nicht.
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim wks As Worksheet Dim rng As Range Dim rng2 As Range Dim rng3 As Range Set wks = Sheets("customer") Set rng = wks.Columns(1) Set rng2 = wks.Range("A:E") Set rng3 = wks.Columns(2)
If Target.Count > 1 Or Intersect(Target, Range("B1:B2")) Is Nothing Then Exit Sub Application.EnableEvents = False
If Target.Address = "$B$1" Then If Application.WorksheetFunction.CountIf(rng, Range("B1")) > 0 Then Range("B2") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 2, 0) Else MsgBox "Kundennummer nicht vorhanden", , "Achtung" GoTo 0 End If Else If Application.WorksheetFunction.CountIf(rng3, Range("B2")) > 0 Then Range("B1") = Application.WorksheetFunction.Index(rng, Application.WorksheetFunction.Match(Range("B2"), rng3, 0)) Else MsgBox "Kunde nicht vorhanden", , "Achtung" GoTo 0 End If End If Range("B3") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 3, 0) Range("B4") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 4, 0) Range("B5") = Application.WorksheetFunction.VLookup(Range("B1"), rng2, 5, 0) 0: Application.EnableEvents = True End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr! Über Rückmeldungen würde ich mich freuen.