Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1068to1072
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

toggle

toggle
10.04.2009 01:40:07
Jörg
Hallo miteinander
ich habe einige Zellen, deren Werte ich mit Hilfe eines Togglebtn um einen bestimmten Wert verändern will - aber nicht alle gleichzeitig, sondern immer jeweils nur die Zelle, die gerade ausgewählt ist.
Ich hatte das mit IF Range("...").selected = true then ... versucht, aber das geht nicht.
Kann mir jemand sagen, wie ich dem Toggle beibringen kann, sich immer nur mit der gerade ausgewählten Zelle zu unterhalten?
Herzlichen Dank und schönen Feiertag!
Jörg

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: toggle
10.04.2009 03:34:51
Oberschlumpf
Hi Jörg
Du musst mit einer globalen Variable arbeiten.
(global = im ganzen Code verfügbar)
Schreib in einem allgemeinen Modul ganz oben (außerhalb jeder Sub und/oder Function) diese Zeile:

Public pstrAdr As String


Schreib ins SelectChange-Ereignis des entsprechenden Tabellenblattes diesen Code:


If Target.Address = "$A$1" Then
pstrAdr = Target.Address
Else
pstrAdr = "x"
End If


Nur wenn Zelle A1 angeklickt wird, wird genau diese Adresse an die Variable weitergegeben, und der SpinBtn reagiert
Bei jeder anderen Zelle erhält die Variable den Wert "x"
Schreib ins SpinDown-Ereignis des SpinBtn diesen Code:


If pstrAdr = "x" Then Exit Sub
Range(pstrAdr).Value = Range(pstrAdr).Value - 1


Wenn Variable = "x" dann mach nix, sonst wird der Wert in der angeklickten Zelle (A1) um 1 verringert
Schreib ins SpinUp-Ereignis des SpinBtn diesen Code:


If pstrAdr = "x" Then Exit Sub
Range(pstrAdr).Value = Range(pstrAdr).Value + 1


Wenn Variable = "x" dann mach nix, sonst wird der Wert in der angeklickten Zelle (A1) um 1 erhöht
Hilfts?
Ciao
Thorsten

Anzeige
AW: spin
10.04.2009 10:16:56
Jörg
Hi Thorsten,
war wohl schon etwas müde gestern - meinte natürlich nicht toggle, sondern spinbutton... (übrigens: zu was für Zeiten bist du denn noch am Schreibtisch...? Oder sitzt du auf der anderen Seite des Globus?)
Danke für deine Anregung. Ich muß mit meinem VBA-Level=nichsodolle noch bissl drüber nachdenken - find ich gut, daß du gleich paar Erläuterungen zwischen den Code geschrieben hast!
Nun, da ich deinen Tip lese, fällt mir auf, daß ja in den betroffenen Zellen schon eine Formel steht - womit ein Vorschlagswert angeboten wird, den man mit eben diesem (aus Platzgründen nur einen) Spinbtn erhöhen oder erniedrigen können soll.
Muß also diese Formeln erstmal in VBA übersetzen und dann mit deinem Vorschlag kombinieren. Mal sehen, ob's klappt - sonst melde ich mich nochmal.
Fröhliches Eiersuchen!
Jörg
Anzeige
AW: spin
10.04.2009 13:47:02
Oberschlumpf
Hi Jörg
Die Uhrzeit deshalb, weil ich unterwegs war ;-)
Versuch mal das hier:
https://www.herber.de/bbs/user/61135.xls
Mit ner Bsp-Datei ist es für dich vielleicht verständlicher, als wenn du den Code selbst an die richtige Stelle eintragen musst.
In der Datei werden die Werte in den Zellen A1,C1 und E1 verändert. Alle anderen Zellen werden nicht berücksichtigt.
Nur wie das mit ner Formel gehen soll, weiß ich noch nicht, da ich dazu deine Formeln kennen müsste.
(ich würde dann den Code für eine Formel anpassen, und du machst den Rest)
Außerdem ist für Formel noch das hier wichtig zu wissen:
Soll bei z Bsp Werterhöhung durch SpinBtn aus der Formel (z Bsp)
=Summe(A5:A10)
dann
=Summe(A5:A10) + 1
oder
=Summe(A5:A11)
werden?
Frage gilt natürlich auch bei Wertverringerung.
(für die Variante mit :A11 wüsst ich leider keine Lösung)
Ciao
Thorsten
Anzeige
AW: spin
10.04.2009 16:44:11
Jörg
Hi Thorsten,
die Datei ist super einleuchtend - jetzt hab ich ja wirklich was dazugelernt. Instr() kannte ich noch gar nicht, und auf die Sache mit der Globalvariablen wäre ich sicher nicht von selbst gekommen.
Hab deinen Code mal in mein Projekt eingebaut - im Rohbau klappt es. ...das heißt - zunächst einmal nicht, weil ich irgendwo mal gelernt hatte, daß Groß-Klein-schreibung in VBA egal sei... ist es anscheinend nicht. Nach rumprobieren bin ich aber dahinter gekommen und hab mich erstmal gefreut, daß der Tag so gut anfängt.
Nun sind folgende Dinge bei mir anders:
1.
Ich habe statt Bezügen Zellnamen zu verwalten:
statt
Select Case lstrAdr
Case "$A$1"
Range("A1").Value = Range("A1").Value + 5
setze ich
Select Case lstrAdr
Case "FarbFlächeInh"
Range("FarbFlächeInh").Value = Range("FarbFlächeInh").Value + 5
und dann geht nix mehr :-((
Was ist denn plötzlich falsch an der Syntax? Zellnamen sind doch irgendwie das Gleiche wie $$-Bezüge, dachte ich...
2.
In den Zellen stehen folgende Formeln:
=WENN(AnzahlBoegen<1;0;SVERWEIS(Beschreib;ListeFarbbelegung;2;FALSCH))
Dabei holt der Ausdrucksteil SVERWEIS(Beschreib;ListeFarbbelegung;2;FALSCH)) aus einer hinterlegten Liste einen Prozentwert, den man üblicherweise braucht, also zB 80%. DIESER Wert soll erhöht oder herabgesetzt werden, wenn es erforderlich ist.
Setze ich den Code auf die Zelle an, ist die Formel futsch und es ergibt sich ein unsinniger Wert. In VBA übersetzt würde ich die Formel in meinem jugendlichen Leichtsinn ungefähr so schreiben:
=IF(AnzahlBoegen<1;0;VLOOKUP(Beschreib;ListeFarbbelegung;2;FALSE))
Nun ja - erste Frage: kann man das so schreiben? Und zweite Frage: Wie verheirate ich das mit Case ... usw...?
Bis später...
Jörg
Anzeige
AW: spin
10.04.2009 18:58:37
Oberschlumpf
Hi Jörg
Haste ne Bsp-Datei mit Daten, Formeln und Bereichsnamen?
Ich mag deine Datei nicht "nachbauen", weil, wenn ich nur eine deiner Erklärungen falsch interpretiere, meine nachgebaute dann nicht deiner Datei entspricht, und ich dann in die falsche Richtung etwas entwickel.
Wenn eigtl in der Zelle "FarbFlächeInh" eine Formel steht, du dann aber den Wert aus Formel mit
Range("FarbFlächeInh").Value = Range("FarbFlächeInh").Value + 5
veränderst, dann steht nur noch der Wert, aber nicht mehr die Formel drin.
Eine Zelle kann entweder einen Wert ODER eine Formel enthalten - beides geht nicht.
Ciao
Thorsten
Anzeige
AW: spin mit Hilfszellen?
10.04.2009 20:42:49
Jörg
...naja, ich hatte überlegt, ob ich die Formel, die da steht, irgendwie in das Spin-Ereignis mit einbauen kann, als VBA-Formel meine ich - sozusagen das hochzählen in Form einer Schleife mit in die Formel einbauen. Aber mir kommt langsam die Dämmerung, daß das wohl nicht geht.
Ich hab nun mal versucht, mit Hilfszellen eine Lösung zu finden
schau mal hier...
https://www.herber.de/bbs/user/61138.xls
AW: spin Teillösg gefunden. Dies ist aktuelle Antw
10.04.2009 21:08:36
Jörg
Thorsten, ich hab für den Drehfeldkram ne einfache Lösung gefunden - siehe aktualisierte Datei
https://www.herber.de/bbs/user/61139.xls
was aber noch ungeklärt ist, ist die Sache mit den Zellnamen statt Bezügen im Code. Magste nochmal drüber nachdenken?
bis später - Jörg
Anzeige
AW: spin Teillösg gefunden. Dies ist aktuelle Antw
11.04.2009 07:48:42
Oberschlumpf
Hi Jörg
Hier nun mein nächster Versuch:
https://www.herber.de/bbs/user/61142.xls
Die Formel, die nur zu Anschauungszwecken in C6 stand, wurde nun in C1 übernommen (da, wo du sie eigtl auch haben willst, wenn ich dich richtig verstanden habe).
Auch der Wert aus Formel in C1 wird nun mit dem Drehfeldwert ADDIERT oder SUBTRAHIERT.
Einziger Nachteil:
Bei jedem Öffnen der Datei wird der Drehfeldwert in C1 auf 0 gesetzt (C1 hat dann die Formel =I13+0).
Der Grund ist, dass der Drehfeldwert vorm Schließen der Datei verloren geht, da der Drehfeldwert ja nur Inhalt einer Variable ist.
Variablenwerte sind nach Schließen einer Datei nicht mehr vorhanden.
Lösen könnte man das, in dem man VOR jedem Schließen der Datei die/den Wert/e von Variablen in freie Zellen speichert.
Da ich aber deine Originaldatei nicht kenne, weiß ich nicht, welche Zellen man dafür verwenden kann, und ich weiß nicht, ob es für dich erforderlich ist, die Drehfeldwerte vor dem Schließen zwischenzuspeichern.
Deine Formeln müssen auch im Code genau so eingetragen werden, wie in den Zellen.
Hilfts denn nun?
Ciao
Thorsten
Anzeige
AW: noch eine Unklarheit wg der Zellnamen
11.04.2009 23:52:07
Jörg
Hallo Thorsten,
du hast meine Gedankengänge vollkommen richtig nachvollzogen. Nach einigem Nachdenken hab ich deine Lösung auch verstanden.
Was ich noch nicht begriffen habe - und das muß ich wohl, bevor ich deinen Code in meine OrigDatei adaptiere - ist die Frage, wieso bei mir in dem Moment Code nicht mehr läuft, wo ich Bezüge durch Namen ersetze.
Zur Veranschaulichung habe ich unsere Ur-BspDatei, also die ohne Formelkram, nochmal hochgeladen. Ich hab da zwei von drei Zellnamen verwendet, in den Code eingebaut, dabei das berücksichtigt, was du in der neusten Variante ausgesagt hattest - trotzdem geht's nicht, und ich versteh nicht, wieso nicht...
https://www.herber.de/bbs/user/61148.xls
Fröhliches Eiersuchen morgen...
Jörg
Anzeige
AW: noch eine Unklarheit wg der Zellnamen
12.04.2009 09:51:33
Oberschlumpf
Hi Jörg
In der Ur-BspDatei steht im SelectionChange-Ereignis (Zellenwechsel-Ereignis) dieser Code

lstrAdr = Target.Address


Es wird also die Zelladresse an die Variable übergeben, was bedeutet, dass die Variable lstrAdr IMMER die Adresse in der Schreibweise "$Spalte$Zeile", z Bsp "$A$1" enthält.
In den SpinUp/Down-Codes steht auszugsweise aber dieser Code:


Select Case lstrAdr
Case "testfeld1" 'wenn der Inhalt von lstrAdr ="testfeld1" ist, dann
Case "$E$1" 'wenn der Inhalt von lstrAdr ="$E$1" ist, dann


Das erste Case wird also nie ausgeführt, da mit lstrAdr = Target.Address nie der Inhalt eines Zellnamens, sondern immer die Zelladresse übergeben wird.
Deswegen "funktioniert" dein Code so nicht.
Mir ist übrigens aufgefallen, dass zumindest in der UrBsp-Datei im SpinUp- und Down-Ereignis der ganze Select/Case Block gegen nur eine einzige Zeile ausgetauscht werden kann.
Lösch also mal in der UrBsp-Datei alles was mit Select Case beginnt und mit End-Select endet, und schreib anstele dessen diese Zeile:
für SpinDown


Range(pstrAdr).Value = Range(pstrAdr).Value - 1


für SpinUp


Range(pstrAdr).Value = Range(pstrAdr).Value + 1


Mehr Code ist nicht erforderlich.
Aber...diese Vereinfachung gilt leider NUR für die UrBsp-Datei.
In der neueren Bsp-Datei und wohl auch in der Originaldatei ist es so einfach leider nicht möglich, da sich der Code bei Verwendung von Formeln die unterschiedlichen Drehfeldwerte "merken" muss.
So, das zur Erklärung für deine Frage.
Meine Frage:
Warum zeigst du uns nicht gleich eine Kopie deiner Originaldatei (mit Bps-Daten, wenn du die Originaldaten nicht zeigen willst/darfst)?
Es reicht, wenn die Kopie der Originaldatei nur den Code, die Daten, die Zellnamen unnnnd die echten Formeln enthält, die erforderlich sind, um das Problem mit dem Spinbutton vielleicht zu lösen.
Wenn du die Kopie so wie eben vorgeschlagen, "abspeckst", dann achte darauf, dass auch die abgespeckte Version so weit funktioniert. Nicht dass ich oder wer anders noch andere Fehler "ausbügeln" muss, die entsehen, weil nun irgendwas fehlt, was in der Originaldatei vorhanden ist.
Denn wie du ja selbst merkst, hast du noch Schwierigkeiten, einen Bsp-Code korrekt in die Originaldatei zu übertragen. Und die Folge ist dieses, ich finde vielleicht unnötige, Frage/Antwort-Spiel.
Puhh..ich finde das ganze hier echt anstrengend.
Na ja, ma schaun, was als nächstes kommt.
Ciao & auch für dich/euch n schönes Osterfest
Thorsten

Anzeige
AW: noch eine Unklarheit wg der Zellnamen
12.04.2009 20:08:42
Jörg
Hallo Thorsten
dank dir ganz herzlich für deine Mühe!! - Ich geh mal der Reihe nach...
Die Sache mit Address und Name
Verstanden hab ich das - Abhilfe konnte ich leider nur "begrenzt" schaffen :-) weil mir die Kenntnisse zur Syntax fehlen.
Ich habe statt lstrAdr = Target.Address
nun geschrieben lstrAdr = Target.Name.Name
Folge: Jetzt funktioniert es, wenn die Zellen Namen haben - aber auch nur dann. Klicke ich irgendwo anders hin (=Zellen ohne Namen), gibt es "anwendungs- oder objekt...usw-Fehler.
Was muß ich denn der lstrAdr im SelectionChange sagen, damit ich auch woanders hinklicken darf?
(Erläuterung am Rande: Ich brauch die Zellnamen außer zum besseren Durchblick bei Formeln auch deswegen, weil ich bei Verwendung von Namen im Code das Blatt noch beliebig ändern kann. Da es noch im Aufbau ist und laufend geändert wird, müßte ich sonst bei jeder eingeschobenen Zeile einige hundert Codestellen anpassen)
Die Sache mit dem Code einsparen
Wenn ich in der Ur-Datei den Select-Abschnitt auskommentiere und Range(pstrAdr).Value = Range(pstrAdr).Value - 1 einsetze, gibt es eine Fehlermeldung
Die Sache mit der Originaldatei
Die kann ich nicht senden, auch nicht mit Beispieldaten, denn sie ist 18MB groß. Natürlich könnte ich einzelne Blätter auskoppeln. Die eigentliche Bremse dagegen aber ist, daß es sich um ein hochspezialisiertes Rechenwerk handelt, in dem eine Menge Nischen-KnowHow steckt - bereits die Idee (ohne Formeln oder Code) zu Aufbau und Struktur des Blattes, in dem sich unser (für euch eher simples) Problem hier befindet, gehört dazu. Mein Auftraggeber würde im Dreieck springen, wenn ich das auf die Reise schicke.
########
Also, es kommt jetzt nix "nächstes" ;-) sondern nur das kleine Ding vom Anfang: Wie muß die Syntax lauten, wenn statt der Adressen Namen im Spiel sind.
Ich hab dazu nochmal eine Datei ohne Schnickschnack hochgeladen https://www.herber.de/bbs/user/61151.xls - schau doch bitte nochmal drüber, woran es da hapert von wegen Adressen und Namen.
Sonnige Grüße aus Hamburg
Jörg
AW: noch eine Unklarheit wg der Zellnamen
13.04.2009 00:09:50
Oberschlumpf
Hi Jörg
Die Sache mit Address und Name
Der Wunsch, einer Variablen oder was auch immer den Namen einer Zelle zuzuweisen, wenn die Zelle gar keinen Namen hat, führt zu einem Fehler, weil...is ja gar kein Name da
Den Code im SelectionChange-Ereignis hab ich jetzt so angepasst, dass der Code nur dann mit Namenszuweisung "reagiert", wenn eine der "richtigen" Zellen ausgewählt wurde - im Code selbst gibt’s zu den "richtigen" Zellen auch ne Erklärung.
Wird eine "falsche" Zelle ausgewählt, wird die Var. pstrAdr mit = "" "geleert".
Die Sache mit dem Code einsparen
Auch hier hab ich den Code angepasst.
Dein Versuch war fast richtig.
Es fehlte nur die zusätzliche Zeile, was passieren soll, wenn pstrAdr "geleert" wurde.
Die Sache mit der Originaldatei
Na ja, der Code in der Bsp-Datei, die du am Ende dieses Textes wieder runterladen kannst, wird auch nur in der Bsp-Datei funktionieren.
Denn der Code verringert/erhöht den Wert einer Zelle und verändert so automatisch auch den Inhalt einer Zelle.
Will sagen....steht in der Zelle vorher eine Formel, so wird diese Formel nach Klick auf den SpinButton durch den Wert, den die Formel ergibt plus oder minus 1 ausgetauscht.
Aber du hast ja auch noch die andere Datei von mir, in der es auch mit Formel funktioniert.
Aber da muss man dann wieder mit Select Case arbeiten, weil unterschiedliche Formeln unterschiedliche Reaktionen erfordern.
(zumindest weiß ich keine bessere Lösung...somit ist es - zumindest für mich - auch nich so simpel, wie du vielleicht denkst)
So...hier nun die Datei:
https://www.herber.de/bbs/user/61154.xls
Ciao
Thorsten (auch aus HH ;-) )
AW: danke!!
15.04.2009 22:45:53
Jörg
Hi Thorsten,
ich dank dir ganz herzlich für deine Gedanken. Neben den Lösungen, die sich ergeben, gibt's ja dann auch immer den Lerneffekt...
Ich war in die Notwendigkeit der VBA-Programmierung so einfach hineingeschliddert. Wenn du auch in HH wohnst - wo hast du denn VBA gelernt? Ich hab außer Crashkursen keine brauchbare Ausbildungsmöglichkeit für VBA gefunden... alle möglichen anderen Programmiersprachen ja, nur das nicht.
so long - Jörg
AW: ach übrigens...
16.04.2009 02:21:09
Jörg
...hab ich alles noch zusammengeworfen und umgerührt und dabei deine verschiedenen Lösungen zu diesem Gebräu gekocht:
For i = 1 To 8
Select Case lstrAdr
Case "Zellname" & i
Range(lstrAdr).Offset(1, 0).Value = Range(lstrAdr).Offset(1, 0).Value + 5
End Select
Next i
Verbraucht zwar etwas mehr Rechenzeit, ist aber codetechnisch netter, als die ganzen Cases einzeln aufzuzählen.
Auf die direkte Veränderung der Zellen mit den Formeln hab ich zugunsten von Hilfszellen verzichtet, weil evtl. später mal der ganze Excelkram ins Internet gestellt wird. Die Software, die Excel internetfähig macht (PALO), kann keine Drehfelder verarbeiten - wohl aber einfache Steuerelemente, mit denen ich dann die Hilfszellen manipulieren könnte.
..... wenn wir so nah beieinander wohnen - warum gehen wir nicht mal 'n Kaffee trinken...?
Schönen Tag morgen -
Jörg

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige