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.

Wenn keine Eingabe dann Formel
#1
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.
Antworten Top
#2
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
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ß


Angehängte Dateien
.xlsm   Vorlage-Auftragserfassung.xlsm (Größe: 26 KB / Downloads: 3)
Antworten Top
#4
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
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.
Antworten Top


Gehe zu:


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