Clever-Excel-Forum

Normale Version: Wenn keine Eingabe dann Formel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich stehe gerade vor der Herausforderung, dass ich in einem Formular die Möglichkeit nutzen möchte entweder einen Wert manuell in Zellen einzutragen oder bei keiner Eingabe, eine Formel auszuführen.
Ich habe mich bereits durchs Forum gesucht und auch ein paar Ansätze gefunden.

Allerdings bekomme ich den VBA Code nicht ans Laufen...

Könnt ihr vielleicht sehen, wo der Fehler liegt?

Kurze Erläuterung zur Funktionsweise:
Es handelt sich um ein Kundenformular. In Zelle B3 befindet sich eine Dropdown Liste mit Kundennamen. Wenn dort ein Kunde ausgewählt wird, sollen sich die Felder G3, B4, G4, B5 und G5 per SVerweis die restlichen Kundeninfos aus eine Kundenliste holen. Wenn der Kunde aber noch nicht existiert, soll man die Daten auch manuell eingeben können. Wenn man die Felder wieder leert, sollen automatisch die ursprünglichen Formeln wieder greifen.

Hier der Code:
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
If Target = "" Then
Select Case Target.Address
Case "$G$3"
Target.Formula = "=IFERROR(VLOOKUP(R3C2,Kundenliste!R1C1:R100C5,2,0),"""")"
Case "$B$4"
Target.Formula = "=IFERROR(VLOOKUP(R3C2,Kundenliste!R1C1:R100C5,3,0),"""")"
Case "$G$4"
Target.Formula = "=IFERROR(VLOOKUP(R3C2,Kundenliste!R1C1:R100C5,4,0),"""")"
Case "$B$5"
Target.Formula = "=IFERROR(VLOOKUP(R3C2,Kundenliste!R1C1:R100C5,5,0),"""")"
Case "$G$5"
Target.Formula = "=IFERROR(VLOOKUP(R3C2,Kundenliste!R1C1:R100C5,6,0),"""")"
End Select
End If
End If
End Sub

Besten Dank vorab für eure Unterstützung.
Hallo,

diesen Weg halte ich für etwas unglücklich. Formeln oder Werte in einer Zelle, das sollte man vermeiden. Leider hast du keine Beispieldatei hochgeladen, sodass man die Struktur nicht kennt. In dem von dir beschriebenen Fall würde ich die Kundendaten in einer gesonderten Liste führen. Dann kann man dort zunächst neue Kunden eintragen. Damit würde das auch ohne wechselseitiges Überschreiben und neu erstellen der Formeln gehen.
Hallo,

danke für die schnelle Rückmeldung.
Hintergrund ist, dass nicht alle Kunden angelegt werden. Es gibt Stammkunden, die angelegt sind und Laufkundschaft, die nur einmal kommt und dann ist es einfacher, die einfach im Formular einzutragen, anstatt dafür die Kundenliste unübersichtlich zu machen.

Ich habe die Datei mal angehängt für die bessere Verständlichkeit.

Danke und Gruß
Hi,

in dem Fall würde ich gar keine Formeln verwenden, sondern die Zellen mit VBA füllen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Long
If Target.Address = "$B$3" Then
    With Worksheets("Kundenliste")
        On Error Resume Next
        z = WorksheetFunction.Match(Target, .Columns(1), 0)
        On Error GoTo 0
        If z Then
            Me.Range("G3") = .Columns(2).Cells(z)
            Me.Range("B4") = .Columns(3).Cells(z)
            Me.Range("G4") = .Columns(4).Cells(z)
            Me.Range("B5") = .Columns(5).Cells(z)
            Me.Range("G5") = .Columns(6).Cells(z)
        Else
            Me.Range("B4:B5,G3:G5") = ""
        End If
    End With
End If
End Sub
Hiermit werden die Adressdaten automatisch ausgefüllt, falls der Kunde bekannt ist. Ist er unbekannt, werden die Zellinhalte gelöscht.

Wieso verwendest du eigentlich in den Spalten B:D verbundene Zellen? Dafür gibt es doch überhaupt keinen Grund.
Hallo HKindler,

perfekt! Vielen Lieben Dank!

Damit hast du mir sehr geholfen.

Der Hinweis mit den Spalten B:D stimme auch. Das hat sich wohl beim Basteln des Sheets eingeschlichen. Hab ich auch entfernt. Big Grin

Nochmals Danke und einen schönen Tag zusammen.