Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1324to1328
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

Zellbezüge in Makros

Zellbezüge in Makros
26.07.2013 10:31:31
Chris
Hallo zusammen,
ich habe in den letzten Tagen eine Reihe recht umfangreicher Makros geschrieben.
Darin sind es öfteren Zellbezüge enthalten, z.B.:
beim Speichern wird in eine bestimmte Zelle das Datum eingefügt

With ActiveSheet
.Unprotect
.Range("F30:G30").Locked = False
End With
Range("F30:G30") = Now
With ActiveSheet
.Range("F30:G30").Locked = True
.Protect
End With

Wenn jetzt in dem Datenblatt, in dem die Zellen F30:G30 enthalten sind darüber eine neue Zeile eingefügt wird, ist die Zielzelle ja nicht mehr F30:G30 sondern F31:G31.
Ergo schreibt das Makro das Datum in den falschen Bereich -.-
Ist das bei Makros einfach so oder lässt sich das irgendwie umgehen? Weil Zellbezüge in Formeln passen sich solchen Änderungen ja automatisch an. Also wenn sagen wir in Zelle A1 die Formel "=F30" steht, wird daraus automatisch "=F31" wenn eine neue Zeile darüber eingefügt wird...
Danke schonmal :)

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellbezüge in Makros
26.07.2013 10:37:09
Rudi
Hallo,
gib dem Bereich einen Namen und sprich den an.
.Locked=True/False ist überflüssig, da nur wirksam, wenn das Blatt geschützt ist.
Gruß
Rudi

benutze definierte Namen ...
26.07.2013 10:41:13
Matthias
Hallo
Die wandern dann mit wenn Du eine neue Zeile einfügst
z.B für Range("F30:G30") definierst Du einen Namen.
Definierter Name:= MeinBereich1
Im Code dann:
Range(MeinBereich1) = Now
Gruß Matthias

AW: benutze definierte Namen ...
26.07.2013 11:24:28
Chris
@Matthias:
Das mit dem Namen definieren geschieht nter Formeln - Namen definieren, oder? Also außerhalb von VBA? Das wäre die Lösung :) Danke!!
@Rudi:
Wer sagt dir, dass das Blatt nicht geschützt ist? ;)
In der Tat ist es geschützt und muss "entschützt" werden bevor die Eingabe erfolgt. Oder hab ich n Denkfehler? ^^

Anzeige
Denkfehler
26.07.2013 11:32:58
Rudi
Hallo,
ja, hast du.
Du hebst erst den Blattschutz auf, dann setzt du .Locked auf False.
.Locked greift aber nur, wenn das Blatt geschützt ist.
Gruß
Rudi

AW: Denkfehler
29.07.2013 08:32:48
Chris
Ohja, stimmt...
Ich dachte, ich hebe mit dem ersten Befehl den Arbeitsmappenschutz auf (dieser ist nämlich auch aktiv) damit ich überhaupt erst den Zellschutz aufheben kann ;)

AW: Denkfehler
29.07.2013 08:40:05
Chris

With ActiveSheet
.Unprotect
End With
Range("F30:G30") = Now
With ActiveSheet
.Protect
End With
ActiveWorkbook.Save

Oder kann ich den Code noch weiter komprimieren? Sind diese beiden "with" und "end with" nötig? Sieht in meinen Augen irgendwie aufgeblasen auf :D

Anzeige
Nöö, With ist nicht 2x nötig ...
29.07.2013 19:36:25
Matthias
Hallo
Einmal reicht.
dann aber auch konsequent
With ActiveSheet
.Unprotect
.Range("F30:G30") = Now
.Protect
End With
Der Punkt vor Range ist tatsächlich nicht nötig,
da sich Range (ohne Referenz auf ein anderes Blatt) immer auf das aktive Blatt bezieht.
Wenn Du aber schon mit With arbeitest, solltest Du auch vor Range den Punkt setzen.
Schon das Bild des Prgr.Codes sieht so sauberer aus ;-)
Gruß Matthias

AW: Nöö, With ist nicht 2x nötig ...
30.07.2013 08:37:25
Chris
Super, vielen Dank :)
Das ganze sieht nun so aus:
    With ActiveSheet
.Unprotect
.Range("Datum") = Now
.Protect
End With
@Matthias: Ohne Gänsefüßchen innerhalb der Range-Klammer hat es nicht funktioniert :/

Anzeige
Ja richtig! Sorry, das hatte ich "verbockt" owT
30.07.2013 15:35:08
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige