Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zirkelbezug
#1
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?

Thnks in advance =)
Antworten Top
#2
Hallo,

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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Hallo Stefan,

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 :(
Antworten Top
#4
Hallo,

was heißt 'verschluckt es sich'? Könntest Du die Datei hier hochladen? Ich finde den Lösungsweg von dir nicht optimal.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
(23.04.2016, 19:31)campinge schrieb: Range("E200").clear klappt leidern nicht, da es sich um verbundene Zellen handelt :(

siehste: "verbundene Zellen sind Mist!"

http://www.clever-excel-forum.de/Thread-...ene+Zellen
Antworten Top
#6
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 =)


Angehängte Dateien
.xlsm   Beispiel.xlsm (Größe: 17,72 KB / Downloads: 4)
Antworten Top
#7
Hallo,

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.
Antworten Top
#8
Hi Edgar,

(27.04.2016, 13: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.
Antworten Top
#9
Hallo,

falsche Anordnung einer Zeile:


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)

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.
Antworten Top
#10
Hallo Edgar,

ich bin beeindruckt. Wirklich klasse.
Da werden in Excel ganz andere Dimensionen geöffnet =)
Danke dir vielmals!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste