Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
408to412
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
408to412
408to412
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Zellenbearbeitung durch Doppelklick unterbinden
Georg
Hallo alle zusammen,
ich habe folgendes Problem:
Mit einem Makro1 soll durch einen Doppelklick auf eine Zelle deren Wert mit einem weiteren Doppelklick in eine andere Zelle des selben Arbeitsblattes kopiert werden. Dabei kommt aber für die Zielzelle nur ein bestimmter Bereich (z.B. nur Spalten A,C,E,G,I ..)in Betracht.
Mit einem anderen Makro2 soll durch Doppelklick auf eine Zelle deren Wert in eine andere Zelle kopiert werden, wobei auch hier wieder nur ein bestimmter Bereich (z.B. nur die Spalten B,D,F,H, ...) in Frage kommt.
Dies funktioniert soweit recht gut.
Um eine Fehlbedienung zu verhindern dachte ich an folgende Lösung:
Im Makro1 wird überprüft, ob die Zelle im verbotenen Bereich liegt. Wenn ja wird das Makro (über Worksheet_beforeDoubleClick) abgebrochen, evt. Fehlermeldung, wenn nein, wird das Makro weiter ausgeführt.
Im Makro2 wird überprüft, ob die Zelle im anderen verbotenen Bereich liegt. Wenn ja wird das Makro abgebrochen, evt. Fehlermeldung, wenn nein, wird das Makro weiter ausgeführt.
Ich suche daher eine Lösung, die je nach Aufruf, verschiedene Bereiche des selben Arbeitsblattes sperrt bzw. freigibt.
Wo muss die Private Sub Worksheet_beforeDoubleClick abgelegt werden?
Wie wird diese Private Sub von anderen Makros aufgerufen?
Vielleicht weiß jemand auch eine andere Lösung für das Problem?
Viele Grüße
und schöne Feiertage
Georg
AW: Zellenbearbeitung durch Doppelklick unterbinden
09.04.2004 13:12:22
Christoph
Hi Georg,
so ganz stieg ich durch deine Beschreibung noch nicht durch.
Aber du kannst z.b mit
If Selection.Column &gt 5 then Exit Sub
den Bereich auf die Spalten A bis D begrenzen, wenn es das ist was su willst.
Ebenso geht das mit den Zeilen
die WorkSheet-spezifischen Subs werden in das Klassenmodul der Tabelle geschrieben, also im VBA-Editor z.B in "Tabelle1", wenn du das Makro für diese Tabelle erzeugen willst.
Gruß
Christoph
('ne Rückmeldung wäre nett)
Anzeige
Zellenbearbeitung... hier: Danke
Georg
Danke für die Tipps
An Thomas:
Habe die Stelle gefunden und werde versuchen den Code für mein Problem umzustricken.
An Christoph
Habe die entsprechende Sub eingefügt - es funktioniert.
Ich habe jetzt aber verschiedene Spalten(mal alle ungeraden, mal alle geraden). Kann man vorher einen Bereich definieren, der jeweils diese Spalten enthält, oder muss man diese Spalten alle über "or" verknüpfen?
Vielleicht kannst Du mir damit auch helfen?
Ihr habt Euch beide Eure Ostereier verdient!
Gruß
Georg
nur die geraden Spaltenzahl
Christoph
Hi Georg,
ich könnte mir vorstellen, dass das eleganter geht, hab aber im Moment nicht den Code parat.
Aber prinzipiell kannst du gerade Zahlen durch "2*x" erzeugen und ungerade durch "2*x -1"
also mal als Bsp für die Zahlen von 1 bis 10:

Sub gerade()
Dim x As Byte
For x = 2 To 10 Step 2 'hier mit Step 2
MsgBox x
Next x
End Sub


Sub ungerade()
Dim x As Byte
For x = 1 To 5
MsgBox 2 * x - 1
Next x
End Sub

Ebenso geht das natürlich, um bestimmte Spalten anszusprechen, siehe Code von meiner ersten Antwort
Gruß
Christoph
('ne Rückmeldung wäre nett)
Anzeige
AW: nur die geraden Spaltenzahl
Georg
Hallo Christoph,
das mit der der geraden Zahl (x = 2 * n) ist mir schon klar.
Nur wie kriege ich Deine Zeile
"If Selection.Column = 5 then Exit Sub"
so abgeändert, dass statt der 5 alle geraden Spalten stehen.
Kann man hinter "If Selection.Column = " einen Bereich, den man evt. vorher definiert, angeben?
Danke für Deine Überlegungen
Georg
AW: nur die geraden Spaltenzahl
Bjoern
Hallo Georg,
hab zwar nicht den ganzen Thread gelesen, glaube aber helfen zu können.
If Selection.Column / 2 = Int(Selection.Column / 2) Then
MsgBox "Gerade!"
Else
MsgBox "Ungerade!"
End If
Also in Deinem Code:
If Selection.Column/2 = Int(Selection.Column/2) then Exit Sub
Gruß
Björn
Anzeige
der "Int" hat mir schon die ganze Zeit gefehlt
09.04.2004 16:39:07
Christoph
Hi Björn,
Ich wusste doch, da war noch was...
so geht's noch einfacher, da hast du recht...
Außerdem ist in meinem Bsp mit dem Array ein "=" Zeichen statt "" reingerutscht.
wie auch immer, ich denke, Georg kann zufrieden sein.
Gruß
Christoph
AW: nur die geraden Spaltenzahl
Christoph
Hi Georg,
erstmal noch 'ne kleine Verbesserung. Beim "BeforeDoubleClick" ist Target als Variable schon definiert. Insofern kannst du auf Selection verzichten.
Doch jetzt zu deiner Frage:(so schwer ist das doch eigentlich nicht)
wenn du deinen Code also nur in den geraden Spaltennummern ausführen willst, dann schreib:
Dim x As Byte
For x = 1 To 5
If Target.Column = 2 * x - 1 Then Exit Sub
Next x
'...und jetz dein weiterer Code
wenn du deinen Code nur in Spalte 5 bis 7 ausführen willst, dann so:
If Target.Column 7 Then Exit Sub
und jetzt noch als AddOn:
wenn du deinen Code nur in Splate 2, 3 6, 7, und 11 ausführen willst, dann geht das, indem du diese Spaltennummern in ein Array eingibst und in einer For-Schleife wie im 1.Bsp jetzt dieses Array durchläuftst.
Dim arr, i As Byte
arr = Array(2, 3 6, 7, 11)
For i = 0 To UBound(arr)
If Target.Column = arr(i) Then Exit Sub
Next i
für zusammenhängende Bereiche Bsp: A1 bis H15 ist
If Intersect(Target, [A1:H15]) Is Nothing Then Exit Sub
auf jeden Fall die beste Methode.
Gruß
Christoph
('ne Rückmeldung wäre nett)
Anzeige
AW: nur die geraden Spaltenzahl
Georg
Hallo alle zusammen,
ich glaube, dass es so funktioniert - werde es gleich ausprobieren.
Nochmals vielen Dank für Eure Mühen!
Schöne Feiertage!
Georg
Danke für die Rückmeldung
09.04.2004 17:16:07
Christoph
auch dir schöne Feiertage,
Gruß
Christoph

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige