Untersuchungen zufolge ist dies möglicherweise nicht ohne die Verwendung von VBA-Code möglich, aber ich denke trotzdem, dass es sich lohnt, danach zu fragen. Ich möchte einem Benutzer nur dann erlauben, Daten in eine Zelle einzugeben, wenn und nur wenn der vorhergehende Nachbar ein bestimmter Wert ist.
Beispielsweise habe ich in A1 eine Dropdown-Liste mit den folgenden Werten: Staff
, Student
, Manager
, Board
. Wenn der Benutzer Staff
, Student
, Manager
inA1, dann ist der Wert inB1wird automatisch generiert mit einemUDF IF
Formel, aber wenn der in A1 ausgewählte Wert ist Board
, dann kann der Benutzer einen bestimmten numerischen Wert in eingebenB1.
Da die benutzerdefinierte ValidierungWAHRoderFALSCHEs existiert keine Formel, die in die Formel-Registerkarte desbenutzerdefinierte DatenvalidierungFenster.
Gibt es also einen Workaround, bei dem die Formel in die Zelle eingegeben werden kann und dann die Formel nicht existiert, wenn die Auswahl inA1Ist Board
.
Ich hoffe, das ist einigermaßen verständlich.
Wenn nicht, kann mir jemand mit einer Codekonstruktion helfen, damit ich dieses Problem lösen kann? Da meine VBA-Kenntnisse noch sehr amateurhaft sind.
Nach meinem Kenntnisstand würde ich also davon ausgehen, dass ein Code dieser Art anwendbar wäre;
If Select Case Range(A1).Value = "Staff" Then B1 = Application.WorksheetFunction. (Since a Match function is employed) ElseIf Select Case Range(A1).Value = "Student" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Manager" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Board" Then (My knowledge fails me here) Else B1 ="" End If
Wenn möglich, möchte ich nicht wirklich den Einsatz vonInputBox
Danke für Ihre Antwort.
Antwort1
Sofern ich nichts übersehen habe, ist die UDF in VBA geschrieben, sodass Sie bereits Code in Ihrer Arbeitsmappe haben.
Außerdem gehe ich davon aus, dass Ihre Arbeitsmappe gesperrt ist, um zu verhindern, dass Benutzer Daten in Zellen eingeben, in die sie nicht hineindringen sollen.
Basierend auf diesen Annahmen und nachdem Sie Ihren Pseudocode etwas bereinigt haben, ändern Sie Ihre vorhandene UDF mit ein paar zusätzlichen Codezeilen:
Dim refCell as Range
refCell = ThisWorkbook.Worksheets(mySheet).Range("A1")
Dim targetCell as Range
targetCell = ThisWorkbook.Worksheets(mySheet).Range("B1")
With refCell
If .Value = "Staff" or .Value = "Manager" or .Value = "Board" then
targetCell.Locked = True
'Call your existing UDF code here to generate the value
Else
targetCell.Locked = False
End If
End With
Damit sollten Sie loslegen können.