Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kreuz bei Klick inZelle

Kreuz bei Klick inZelle
28.06.2014 11:18:54
Lars
Hallo Zusammen,
bin noch recht neu hier und beschäftige mich mit Exel 2003. Hier möchte ich in bestimmten Zellen eines Arbeitsblattes durch einfachen Klick ein Kreuz erzeugen, dass dann erscheint. Dazu habe ich bereits wie folgt eine gute Anlehnung gefunden:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Bereich1
Dim Bereich2
Set Bereich1 = Application.Union([A1], [A2], [A3], [A4], [A5], [A6], [A7], _
[B1], [B2], [B3], [B4], [B5], [B6], [B7], _
[C1], [C2], [C3], [C4], [C5], [C6], [C7], _
[D1], [D2], [D3], [D4], [D5], [D6], [D7], [D8], [D9])
Set Bereich2 = Application.Union([E1], [E2], [E3], [E4], [E5], [F1], [F2], [F3], [F4], [ _
_
F5], [G1], [G2], [G3], [G4], [G5], [H1], [H2], [H3], [H4], [H5], [I1], [I2], [I3], [I4], [I5], [ _
J1], [J2], [J3], [J4], [J5])
If Not Intersect(Target, Bereich1) Is Nothing Or _
Not Intersect(Target, Bereich2) Is Nothing Then
If Target = "x" Then
Target = ""
Else
Target = "x"
End If
End If
End Sub

(Die Zellen in den Bereichen sind nur für den Versuch hintereinander benannt!)
Problem ist: Ich habe reichlich mehr Zellen und kann aber hier nur bis 30 Stück pro SetBereich eingeben. Sie müssen aber immer einzeln angesprochen werden, da zwischen Ihnen Zellen liegen, die nicht mit Kreuz ausgewählt werden
Kann mir da wer helfen. Ich tät mich sehr freuen :-)

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kreuz bei Klick inZelle
28.06.2014 12:12:37
Beverly
Hi Lars,
die Bereiche lassen sich doch zusammenfassen, du musst nicht jede Zelle einzeln aufführen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Application.Union(Range("A1:D7"), Range("D8:D9"), Range("E1:J5"))
If Not Intersect(Target, Bereich1) Is Nothing Then
If Target = "x" Then
Target = ""
Else
Target = "x"
End If
End If
Set Bereich = Nothing
End Sub


@ beverly
28.06.2014 12:37:56
Spenski
Huhu
Problem ist: Ich habe reichlich mehr Zellen und kann aber hier nur bis 30 Stück pro SetBereich eingeben. Sie müssen aber immer einzeln angesprochen werden, da zwischen Ihnen Zellen liegen, die nicht mit Kreuz ausgewählt werden
gruss

Anzeige
AW: @ beverly
28.06.2014 12:55:51
Beverly
Hi,
nicht jede Zelle muss einzeln angesprochen werden (wie schon geschrieben) - man kann zusammenhängende Bereiche zusammenfassen (siehe Beispiel). Außerdem kann man mehrere Teilbereiche zusammenfassen.
   Dim Bereich As Range
Set Bereich = Application.Union(Range("A1:D7"), Range("D8:D9"), Range("E1:J5"))
Set Bereich = Union(Bereich, Range("L2:N3"), Range("P1:R5"))


AW: @ beverly
01.07.2014 13:58:42
lamenz
Ihr Lieben,
erst einmal ganz doll Danke für die Hilfe.
Ich habe nun mit meiner noch recht laienhaften Kenntis in Anlehnung an Eure Vorlagen alles durchgespielt. Das klappt auch alles ganz gut, nur bleit es noch bei meinem Problem der Begrenzung.
Auch wenn ich mehrere Bereiche mit Range zusammenfasse, komme ich nicht über 30 Möglichkeiten hinaus. Ab Eintrag 31 meldet sich der Debugger und sagt:
"Falsche Anzahl oder Argumentation oder ungültige Zuweisung zu einer Eigenschaft"
Ich habe mal gezählt: Ich benötige ca. 45 Range Gruppen und 1 x die Ansprache an eine Zelle in einer Spalte. Da käme also im unteren Beispiel meines derzeitig letzten Standes bei Spalte DF noch 15 x (Range("DF?:DF?") hinzu und 1x (DF546) am Ende der Spalte. Von diesen Spalten habe ich 20 Stück. Ich kann die leider aus bestimmten Gründe nicht am Stück zusammenfassen. (Also ("DF10:DF540") Ich denke mal, das es bestimmt für den Kenner da die Lösung in der richtigen Ansprache an die Programmierung gibt, um das Problem der Begrenzung aufzuheben. Vielleicht in der Aufteilung zu Bereichen a 30 Stück oder so!? Ich wüsste mir da leider keinen Rat,aber für das Tool wäre es super Klasse, da ich es für Kinder einer Förderklasse bastelt, die es natürlich gern einfach und mit Klick hätten, anstatt ein Kreuz eintragen zu müssen.
Ob Ihr da noch einmal kurz drüberschauen könntet!?!?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Application.Union(Range("DF10:DF12"), Range("DF18:DF24"), Range("DF30:DF36"),  _
Range("DF42:DF49"), Range("DF54:DF60"), Range("DF66:DF72"), Range("DF78:DF84"), Range("DF90:DF96"), Range("DF102:DF108"), Range("DF114:DF120"), Range("DF126:DF132"), Range("DF138:DF144"), Range("DF150:DF156"), Range("DF162:DF168"), Range("DF174:DF180"), Range("DF186:DF192"), Range("DF198:DF204"), Range("DF210:DF216"), Range("DF222:DF228"), Range("DF234:DF240"), Range("DF246:DF252"), Range("DF258:DF264"), Range("DF270:DF276"), Range("DF282:DF288"), Range("DF294:DF300"), Range("DF306:DF312"), Range("DF318:DF324"), Range("DF330:DF336"), Range("DF342:DF348"), _
Range("DF354:DF360"))
If Not Intersect(Target, Bereich) Is Nothing Then
If Target = "x" Then
Target = ""
Else
Target = "x"
End If
End If
Set Bereich = Nothing
End Sub

Anzeige
AW: @ beverly
01.07.2014 14:56:26
Beverly
Hi,
du hast meinen Beitrag anscheinend nicht richtig gelesen: schreibe den ersten Bereich bestehend(aus 30 Unterbereichen) in einen gemeinsamen Bereich mit den nächsten maximal 29 Unterbereichen - siehe die 3. Codezeile in meinem Post. Der neue Gesamtbereich wird also aus sich selbst + den neuen Unterbereichen zusammengesetzt.


AW: @ beverly
01.07.2014 20:34:22
lamenz
Es tut mir richtig leid euch so zu strapazieren. Aber ich habe mich da wohl etwas falsch ausgedrückt. Sorry. Ich fang mal mit Beverly an: Auch dir erst mal Dank für deine Mühen. Ich glaube aber, habe das schon richtig verstanden. Du hast aber die 30 Zellen am Stück in einem Bereich eingegrenzt. Ich "darf" aber nur 6 Zellen eingrenzen, weil dann erst mal eine Lücke kommen muß und dann die nächsten 6 Zellen kommen, die angesprochen werden sollen. Dazwichen darf nichts mit x liegen. So ereiche ich dann leider rasch die Grenze von 30 Möglichkeiten an EINGRENZUNGEN, die scheinbar unter Set Bereich = usw... möglich sind. Meine Hoffnung ist, daß ich irgendwie die Zuordnung von Set Bereichen noch nicht ganz richtig mache, denn wenn Ihr mal nachfolgenden Stand der Dinge anschaut, funktionieren alle Keuze bei DF und auch die Kreuze bei den Einzelansprachen (Set Bereich = Union(Bereich, [H546], [Q546], [Z546], [AI546], [AR546], [BA546], [BJ546], [BS546], [CB546], [CK546], [DF54 ..usw... aber alles unter H funktioniert nicht. Zur Vereinfachung habe ich in der Ansicht mal die funktionierenden Sachen Fett markiert. Jetzt wird zwar kein Debugger mit Fehlmeldung mehr geöffnet, es innitiiert sich aber auch kein Kreuz bei den Zellen unter Spalte H. Und auf diese Art hätte ich wie bei DF oder auch H noch weitere ST Bereiche mit gleichen Zellenzahlen unter 18 weiteren, (also ingesamt 20) Spalten anzusprechen (also Q,Z,AI,AR usw...), auf das da ein Kreuz bei Klick erscheint. Meine Hoffnung liegt also nicht in der Erklärung der zusammenfassenden 30 Zellenbereiche, sondern in der scheinbar falschen SetBereich Ansprache , so fern eben überhaupt mehrere SET Bereiche mit je 30 solcher Ansprachen wie zum Beispiel ("DF10:DF540") möglich sind.
So siehts momentan aus:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Application.Union(Range("H10:H12"), Range("H18:H24"), Range("H30:H36"), Range(" _
H42:H49"), Range("H54:H60"), Range("H66:H72"), Range("H78:H84"), Range("H90:H96"), Range("H102:H108"), Range("H114:H120"), Range("H126:H132"), Range("H138:H144"), Range("H150:H156"), Range("H162:H168"), Range("H174:H180"), Range("H186:H192"), Range("H198:H204"), Range("H210:H216"), Range("H222:H228"), Range("H234:H240"), Range("H246:H252"), Range("H258:H264"), Range("H270:H276"), Range("H282:H288"), Range("H294:H300"), Range("H306:H312"), Range("H318:H324"), Range("H330:H336"), Range("H342:H348"), _
Range("H354:H360"))
Set Bereich = Union(Bereich, Range("H366:H372"), Range("H378:H384"), Range("H390:H396"),  _
Range("H402:H408"), Range("H414:H420"), Range("H426:H432"), Range("H438:H444"), Range("H450:H456"), Range("H462:H468"), Range("H474:H480"), Range("H486:H492"), Range("H498:H504"), Range("H510:H516"), Range("H522:H528"), Range("H534:H540"))
  Set Bereich = Application.Union(Range("DF10:DF12"), Range("DF18:DF24"), Range("DF30:DF36") _
, Range("DF42:DF49"), Range("DF54:DF60"), Range("DF66:DF72"), Range("DF78:DF84"), Range("DF90:DF96"), Range("DF102:DF108"), Range("DF114:DF120"), Range("DF126:DF132"), Range("DF138:DF144"), Range("DF150:DF156"), Range("DF162:DF168"), Range("DF174:DF180"), Range("DF186:DF192"), Range("DF198:DF204"), Range("DF210:DF216"), Range("DF222:DF228"), Range("DF234:DF240"), Range("DF246:DF252"), Range("DF258:DF264"), Range("DF270:DF276"), Range("DF282:DF288"), Range("DF294:DF300"), Range("DF306:DF312"), Range("DF318:DF324"), Range("DF330:DF336"), Range("DF342:DF348"), _
Range("DF354:DF360"))
Set Bereich = Union(Bereich, Range("DF366:DF372"), Range("DF378:DF384"), Range("DF390:DF396") _
, Range("DF402:DF408"), Range("DF414:DF420"), Range("DF426:DF432"), Range("DF438:DF444"), Range("DF450:DF456"), Range("DF462:DF468"), Range("DF474:DF480"), Range("DF486:DF492"), Range("DF498:DF504"), Range("DF510:DF516"), Range("DF522:DF528"), Range("DF534:DF540"))
Set Bereich = Union(Bereich, [H546], [Q546], [Z546], [AI546], [AR546], [BA546], [BJ546], [ _
BS546], [CB546], [CK546], [DF546], [DO546], [DX546], [EG546], [EP546], [EY546], [FH546], [FQ546], [FZ546], [GI546])
If Not Intersect(Target, Bereich) Is Nothing Then
If Target = "x" Then
Target = ""
Else
Target = "x"
End If
End If
Set Bereich = Nothing
End Sub

Anzeige
AW: @ beverly
01.07.2014 22:00:27
Beverly
Ich kann dir leider nicht folgen. Bei meinem Code wird genau in den Bereichen und NUR in den Bereichen ein X gesetzt, die mittels Union zusammengefasst wurden - in den dazwischen liegenden Bereichen wird kein X gesetzt. Wenn das bei dir der Fall ist, dann hast du die falschen Bereiche eingebunden.


AW: @ beverly
01.07.2014 22:56:23
lamenz
Hallo Beverly alias Karin :-)
du hast da auch in allem Recht. Ich dachte erst, du wolltest mit z.B. an Hand des Bsp. E1:J5 aufzeigen, daß so bis zu 30 Zellen auf einen Schlag verarbeitet werden können und ich so über die Begrenzung der 30 weit hinaus komme. Mein Problem ist aber, das keine 30 Zellen in eine solche Verbindung unterbekomme, da zwischen den Zellen bereit nach 6 Zellen nicht zu berührende Lücken liegen. Wenn ich also z.B. E1:J5 machen würde, wäre H2 auch betroffen und das ginge nicht. Wenn ich dann deine Vorlage aus Zeile 3 Set Bereich = Application.Union(Range("A1:D7"), Range("D8:D9"), Range("E1:J5")) auf meine Befürnisse modifiziert weiter verwende, funktioniert das auch alles, bis auf den Umstand, das ich so halt auch eine Grenze von 30 Möglichkeiten stoße, da solch Positionen wie z.B. Range("E1:J5")..usw. auch innerhalb der Klammern nur 30 mal vergeben werden kann. Dann geht nichts mehr. Das ist mein Problem. Ich hoffe das war jetzt verständlicher. Sorry, bin halt echt noch der Laie und kann mich nicht so recht in der Programmiersprache ausdrücken. Liebe Grüße nach Freiberg und trotzdem nochmal dickes Danke für die Mühen, Grüße Lars

Anzeige
AW: @ beverly
02.07.2014 01:36:23
Lamenz
So, Liebe Excelfreaks und solche die es noch werden wollen,
nu hab ichs...
Hatte bereits ja schon gleich anfänglich die richtig Richtung bekommen und eigentlich auch schon eingeschlagen, die da hieß:
Dim Bereich As Range
Set Bereich = Application.Union(Range("A1:D7"), Range("D8:D9"), Range("E1:J5"))
Set Bereich = Union(Bereich, Range("L2:N3"), Range("P1:R5"))
Und auf die darauf folgende Frage, warum ich denn nun dann den Debugger "Falsche Anzahl oder Argumentation oder ungültige Zuweisung zu einer Eigenschaft" bekam, beantwortet sich wie folgt:
WEIL BBEREITS "UNION" ALS EIN WERT GERECHNET WIRD UND DAHER NUR 29 EINTRÄGE IN JEDEM WEITEREM SET BEREICH (Set Bereich = Union(Bereich, usw..) EINGETRAGEN WERDEN KÖNNEN. Da lag ich also in der Anzahl einen drüber. Hoffe, so habe ich euch auch noch was genützt, denn darauf ist ja so recht keiner gekommen ;-). Und falls jemand hier noch als Laie von diesem Beitrag zehren will, nochmal die klare Aussage:. Es muß nach der ersten Zeile (Set Bereich = Application.Union(Range("A1:D7"), Range("D8:D9"), Range("E1:J5"))mit 30 Möglichkeiten dann jede weitere Zeile sich an Set Bereich = Union(Bereich, Range("L2:N3"), Range("P1:R5"))anlehnen und, natürlich immer inhaltich bei den Zellenbezügen auf die eigenen Bedürfnisse umgestrickt, die Einschränkung auf 29 Möglichkeiten berücksichtigt werden. Dann klappts auch mit dem Nachbarn ;-)
Danke nochmals an alle Helfer und Gute Nacht
Der Lars

Anzeige
AW: @ beverly
02.07.2014 10:15:27
Beverly
Hi Lars,
du kannst zwar auf einen Ritt immer nur 30 Unterbereiche einem Bereich zuweisen, aber das kannst du mehrmals wiederholen, indem du weitere 29 Unterbereiche mit dem (bereits aus mehreren Unterbereichen zusammengefassten) Hauptbereich zusammenfasst, sodass am Ende alle deine Unterbereiche in dem Hauptbereich vereint sind. Dass man das so machen kann, hatte ich bereits in meinem Beitrag vom 01.01.2014 15:56 gschrieben - bist also nicht selbst darauf gekommen. ;-))
Vielleicht ein (selbstverständlich wie immer hinkender) Vergleich: du hast 500 kleine Flaschen mit einer breiten Öffnung, die du alle in eine großen Behälter mit einer sehr kleinen Öffnung umfüllen willst - das ist aber problematisch, weil man aus der breiten Öffnung schlecht in eine sehr schmale füllen kann ohne etwas von der Flüssigkeit zu verlieren. Du benutzt deshalb als "Zwischenspeicher" eine mittelgroße Flasche mit einer Öffnung, die nur etwas größer als die kleine Öffnung der großen Flasche, aber kleiner als die große Öffnung der kleinen Flaschen ist und die den Inhalt von 30 kleinen Flaschen aufnehmen kann. Nun füllst du zuerst so viele kleine Flaschen in die mittlere, bis diese voll ist. Dann füllst du die mittlere Flasche in den großen Behälter um. Das ganze wiederholst du so oft, bis alle kleinen Flaschen in den großen Behälter umgefüllt sind.


Anzeige
AW: @ beverly
28.06.2014 13:20:22
Daniel
Hi
Wenn's sehr viele Einzelzellen sind, kannst du auch in mehreren Schritten arbeiten, indem du ab dem zweiten Union die Sammelvariable mit dazu nimmst:
Set Bereich = Union([a1], [a3], [a5], [a7])
Set Bereich = union(bereich, [b2], [b4], [b6], [b8])
Du kannst auch mit Range mehrere nicht zusmmenhängende Zellen gleichzeitig ansprechen, indem du Kommagetrennt die Adressen angibt.
set Bereich = Range("a1,a3,a5,a7,b2,b4,b6,b8")
Gruß Daniel

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige