Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"x" eintragen duch bedingte Formatierung?

"x" eintragen duch bedingte Formatierung?
08.11.2008 10:43:00
webran
Hallo zusammen,
seit meinem letzten Beitrag vor ein paar Tagen hat sich wieder ein neues Problem ergeben, mit dem ich vorher nicht gerechnet habe.
Bei meinem Projekt (siehe Beispielmappe https://www.herber.de/bbs/user/56624.xls)
sollen mittels Daten-Gültigkeit Gerichte ausgewählt werden können.
In einer Stammdatenliste wurden vorher den Gerichten "x" zugeordnet, die dann in dem Projekt genau so eingetragen werden sollen.
Mit SVERWEIS in den Zellen funktioniert das super, aber, wenn ich per Klick-Makro die Einträge korrigiere, dann werden die Formeln in der Zelle gelöscht. Ich brauche aber die "x" um damit weiterrechnen zu können.
Kann man das über eine bedingte Formatierung lösen? Oder vielleicht gibt es noch eine andere Idee?
Ich versuche es schon den ganzen Vormittag mit VERGLEICH und SVERWEIS. Aber es funktioniert nicht.
Und der Formelfreak bin ich dann auch wieder nicht, leider...
Über eine Anregung würde ich mich sehr freuen, vielen Dank!
Webran

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "x" eintragen duch bedingte Formatierung?
08.11.2008 10:51:00
rofu
hallo,
so sollte es gehen, auch ohne hilfstabelle
gruß
rofu

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("B6:I26"))
If Not Target Is Nothing Then
If Target.Cells.Count = 1 Then
If Target.Cells.HasFormula Then Exit Sub                'dieser teil ist neu !
Target.Value = IIf(Target.Value = "", "x", "")
End If
End If
End Sub


AW: kleiner Tip zum Programmierstil
08.11.2008 11:16:00
Daniel
Hi Rofu
innerhalb von Makros sollte man kein "Exit Sub" verwenden, hier tuts ja auch die normale IF-Klammer
problem bei "Exit Sub" innerhalb von Makro ist, dass dann die gefahr gross ist, daß vor dem "Exit Sub" schon irgendwelche Einstellungen verändert werden und diese am Programmende wieder rückgängig gemacht werden (z.B. Application.EnableEvents)
durch ein unbedachtes "Exit Sub" würde dann dieses Rückgängig machen unterbunden werden.
dh. wenn man "Exit Sub" verwenden will, dann immer als Abbruchbedingung ganz am Anfang des Makros, aber nicht irgendwo versteckt innerhalb, wo man es leicht übersieht. (kann ja auch mal vorkommen, daß das Makro nachträglich erweitert wird und man sich dadurch viel Ärger einhandelt), dh. wenn mit "Exit Sub" gearbeitet wird, dann sollte das Makro so aussehen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'--- Schritt 1: Abbruchbedingungen prüfen
if Target.Cells.Count > 1 then Exit Sub
if Intersect(Target, Range("B6:I26")) is nothing then Exit Sub
if Target.Hasformula Then Exit sub
'--- Schritt 2: Makroausführung
Target.Value = IIf(Target.Value = "", "x", "")
End Sub


Wir wollen einen Neuling doch gleich einen sauberen Programmierstil beibringen, oder ;-)
Gruß, Daniel

Anzeige
AW:An Daniel- kleiner Tip zum Programmierstil
08.11.2008 11:27:00
rofu
hallo daniel,
danke für deine ausführungen, hast recht.
bei den paar zeilen dachte ich, ist es nicht so schlimm-das exit sub-aber wie gesagt, du hast recht.
warum aber die antwort kommt, " damit ist mein problem nicht gelöst" kann ich nicht verstehen-du?
gruß
rofu
AW: AW:An Daniel- kleiner Tip zum Programmierstil
08.11.2008 11:46:00
Daniel
Hi
so ganz leider auch nicht.
vermutlich hat er auch noch nicht so ganz klar formuliert, was er eigentlich haben will (wenn er das überhaupt weiss ;-))
ich vermute mal, daß wenn auf der Liste Gerichte stehen, die in den Stammdaten vorkommen, dann sollen auch die Zutaten aus der Stammdatenliste verwendet werden (diese dann per Formel aus der Liste lesen)
Wenn das gewählte Gericht nicht in den Stammdaten steht, dann soll man wahrscheinlich selbst die Zutaten ankreuzen, was anderes kann ich mir nicht vorstellen.
dagegen spricht allerdings, daß man nur Gerichte auswählen darf, die in den Stammdaten vorkommen, es also eigentlich keine "freien" Gerichte gibt.
ne andere Möglichkeit wäre, daß die Stammdaten unvollständig sind und die Gerichte durch indivduelle Zutaten ergänzt werden sollen.
Das ist aber eigentlich auch kaum umsetztbar, da man hier dann Formeln und Handeingabe mischen müsste.
ich denke, daß webran erst nochmal ein bisschen darüber nachdenken sollte, wie sein Programm jetzt genau funktionieren sollte und was es können muss.
Gruß, Daniel
Anzeige
AW:Projekte entwickeln sich eben manchmal anders..
08.11.2008 12:12:00
webran
Hallo Daniel, hallo rofu
bei meinem Projekt geht es hauptsächlich darum, dass ich lerne, mit VBA umzugehen. Dazu stelle ich mir vor, was mein Projekt können muss und wie ich es bedienen will. Das versuche ich dann umzusetzen.
In meinem ersten Beitrag steht,

Mit SVERWEIS in den Zellen funktioniert das super, aber, wenn ich per Klick-Makro die Einträge korrigiere, dann werden die Formeln in der Zelle gelöscht. Ich brauche aber die "x" um damit weiterrechnen zu können.


Ich will jetzt keine Wortklauberei betreiben, ich hab mich wahrscheinlich echt etwas dumm ausgedrückt, sorry.
Im Endeffekt läuft es wirklich darauf hinaus, das ich nicht wusste, ob man Formeln und Handeingabe mischen kann. Aber diese konnte ich vorher nicht wissen, weil ich immer noch darauf aus war, mein Problem mit einer bedingten Formatierung zu lösen.
Also, vielen Dank noch mal für Eure Hilfe, Ihr seid super!
Webran

Anzeige
AW: AW:An Daniel- kleiner Tip zum Programmierstil
08.11.2008 11:55:16
webran
Hallo rofu, hallo Daniell,
bitte versteht mich nicht falsch! Ich wollte damit nicht sagen, dass Eure Bemühungen zwecklos waren. Ganz im Gegenteil, ich habe eine Menge dabei gelernt.
Nach Eurem Code wird die if-Schleife verlassen, wenn sich in der Zelle eine Formel befindet (if Target.Hasformula Then Exit sub).
Bei mir müsste sich das "x" in der jeweiligen Zelle ein- bzw. austragen ohne die Formel zu überschreiben und ohne die Stammdaten anzutasten.
Ein kurzes Beispiel:
Gericht Gänsebraten mit Rotkreut wird ausgewählt, die Zutaten dafür sind in den Stammdaten mit einem x markiert und werden übertragen. Wenn ich z.B. kein Rotkraut mehr habe und statt dessen Klösse serviere, dann möchte ich das Rotkraut ab- und die Klöße anwählen können (durch das Klick-Makro), ohne dass die Formeln in den Zellen überschrieben werden.
Ich bin Euch wirklich dankbar für Eure Hilfe! Wie Ihr gut erkannt habt, bin ich Anfänger und versuche so mit praktischen Beispielen das Programmieren zu erlernen.
Viele Grüße!
Webran
Anzeige
AW: AW:An Daniel- kleiner Tip zum Programmierstil
08.11.2008 12:16:43
Daniel
Hi
also entweder du holst die Zutaten per Formel aus der Stammdatenliste, oder du trägst sie per Hand in die Liste ein.
beides zusammen geht nicht.
ne alternative wäre, ein Makro zu schreiben, daß die Zutaten aus den Stammdaten in die obere Liste kopiert, wenn du das Gericht in der Liste eingibst.
dann würden da keine Formeln stehen, sondern nur normale x, die du dann mit deinem Makro bequem ändern kannst.
mal hier als beispiel: (ich habe jetzt das ändern der Zutat auf das Doppelclickereignis gelegt, da mir der einfache Klick oft zu schnell geht und zu unbeabsichtigen Fehleingaben führt.
Außerdem kann man so eine Fehleingabe korrigiern, ohne erst eine ander Zelle anklicken zu müssen.)
Makro zum eintragen der x von Hand, jetzt per Doppelklick

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set Target = Intersect(Target, Range("B6:I26"))
If Not Target Is Nothing Then
If Target.Cells.Count = 1 Then
Target.Value = IIf(Target.Value = "", "x", "")
Cancel = True
End If
End If
End Sub


Lesen der x aus den Stammdaten, wenn in Spalte A ein anderes Gericht gewählt wird


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Row  26 Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
Range("A35:A40").Find(what:=Target.Value, lookat:=xlWhole).Offset(0, 1).Resize(1, 8).Copy
Target.Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = xlCopy
Target.Select
End Sub


beide Makros musst du in das Modul des Tabellenblatts kopieren, das alte Makro für "SelectionChange" zum eintragen der x solltest du löschen.
Gruß, Daniel

Anzeige
AW: AW:An Daniel- kleiner Tip zum Programmierstil
08.11.2008 12:27:00
webran
Hallo Daniel,
ich glaube, das ist die Lösung!!!
Ich werde das Korrigieren über eine andere Prozedur laufen lassen und vorher prüfen, was sich in der Zelle befindet.
Dank Deiner (Eurer) Hilfe ist jetzt der Groschen gefallen!
Sobald ich wieder Zeit habe, werde ich es testen und Euch ggf. noch mal auf die Nerven gehen ;-)
Schönen Tag noch!
Webran
AW: Programmierstil : Noch eins drauf
08.11.2008 16:06:00
Daniel
Hi
im Prinzip hab ich nix gegen Exit sub, man muss es halt richtig einsetzen.
Wenn ich ne Reihe von Abbruchbedingungen habe, die ich am Anfang einfach abbprüfen kann, dann finde ich die Lösung mit ner Reihe von
IF...Then Exit Sub
schon eleganter als ne ewige Verschachtelung von IF-THEN-Blöcken.
allerdings, wenn dann nur am Anfang.
innerhalb des Makros sollte der Befehl eigentlich Tabu sein
Gruß, Daniel
AW: "x" eintragen duch bedingte Formatierung?
08.11.2008 11:17:00
webran
Hallo an alle,
toll, Euer Engagement! Hab schon wieder ein paar Krümelchen Weisheit aufgepickt:-))
So, wie es aussieht, muss ich den Gaul anders aufzäumen. Es bringt leider nichts, wenn die Prozedur verlassen wird, wenn sich darin eine Formel befindet aber die Idee ist super.
Danke, und viele Grüße!
Werner
Anzeige
AW: "x" eintragen duch bedingte Formatierung?
08.11.2008 10:52:00
Daniel
Hi
nein.
per bedingter Formatierung kannst du nur die angezeigten Formate ändern, aber keine Zellinhalte.
selbst wenn; wenn du damit rechen wolltest, dann sind den Formeln bedingte Formate herzlich egal, die schauen nur auf Inhalte.
per bedingter formatierung wäre nur möglich, daß alle Zellen ein x enthalten, und das in manchen, je nach bedingung die Schriftfarbe weiss (unsichtbar) und in den anderen die Schriftfarbe schwarz(sichtbar) verwendet wird.
aber für einen Berechnung oder Filterung würden, unabhängig von der Farbe, alle Zellen ein x enthalten.
wenn du dir per Makro die Zellen mit den entsprechenden Formeln löschst, dann musst du entweder das Makro so umbauen, daß die Zellen nicht gelöscht werden oder das Makro so erweitern, daß nach der Löschaktion die Formeln per Makro wieder hergestellt werden.
Gruß, Daniel
Anzeige
AW: "x" eintragen duch bedingte Formatierung?
08.11.2008 11:03:38
webran
Hallo rofu, hallo Daniel,
vielen Dank für Eure Antworten! Mein Problem ist zwar noch nicht gelöst, aber das macht nichts. Wenigstens weiß ich jetzt, dass man per bed. Formatierung keine Werte zuweisen kann.
@ Danie: Ich werde mir also mir VBA was basteln müssen, danke für Deine umfangreiche Antwort.
@ rofu: Gute Idee, vielleicht kann ich mit Deinem Ansatz was anfangen.
Viele Grüße
Webran
AW: "x" eintragen duch bedingte Formatierung?
08.11.2008 11:08:36
Hajo_Zi
Hallo Nick,
in Version 2007 geht es schon mit Werten zuweisen.
Gruß Hajo
AW: x eintragen bei Formel verhindern
08.11.2008 10:59:00
Daniel
Hallo
hab mir jetzt nochmal deine Datei angeschaut:
mit dieser Funktionserweiterung kannst du verhindern, daß bei deinem Klickmakro eine Formel überschrieben wird, dh klickst du auf eine Zelle, die eine Formel enthält, dann bleibt die Formel erhalten und wird nicht durch x oder leer überschrieben:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("B6:I26"))
If Not Target Is Nothing Then
If Target.Cells.Count = 1 Then
If Not Target.HasFormula Then
Target.Value = IIf(Target.Value = "", "x", "")
End If
End If
End If
End Sub


Gruß, daniel

Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige