Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
156to160
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
156to160
156to160
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

in festwerte kopieren

in festwerte kopieren
09.09.2002 16:58:43
kalli
hallo ihr helfer,

ich beginne erst grad damit, mich in das programm einzuarbeiten. mein problem:

ich möchte gerne in einer zelle das datum automatisch speichern, an dem die nachbarzelle geändert oder zum ersten mal beschrieben worden ist. ich finde keine funktion dazu.

meine idee nun: in die zelle kommt

wenn([zelle links nicht leer];heute();"")


in die nächste nachbarzelle kommt ein in vba geschriebene funktion:

wenn([datumszelle nicht leer];infestwert();"")

so. nun hab ich also eine funktion "infestwert()" geschrieben, die als ergebnis 1 liefert und nebenbei die inhalte (!) der (datums-) - zelle in eine andere kopiert. der code:

--------------------------------------------------------
Function infestwertrechts()

ActiveCell.Offset(0, -2).Range("A1").Select
Selection.Copy
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "dd mm yy"
ActiveCell.Offset(0, 1).Range("A1").Select

infestwertrechts = 1

End Function
-----------------------------------------------------


so. der witz ist nun: im einzelschrittmodus funktioniert das, doch bei der eingabe nicht (der wert 1 wird zurückgegeben, die zelleninhalte aber nicht kopiert. was mach ich nur falsch?

ähem - hab ich mich verständlich ausgedrückt? *indierundeschau* ich könnte es auch nochmal erklären, was ich will... *g*

vielen dank allen helfern!
kalli

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

Betreff
Datum
Anwender
Anzeige
Re: in festwerte kopieren
09.09.2002 17:29:04
PeterW
Hallo Kalli,

wie sieht Deine Tabelle aus? Sind die "Festwerte" wahllos über das Blatt verteilt oder gibt es dafür bestimmte Spalten? Und Deinen Umweg verstehe ich auch nicht, warum erst per Funktion einen Wert schreiben und dann per VBA umwandeln? Erledige doch alles per VBA, im besten Fall direkt bei der Eingabe über Worksheet_Change.

Gruß
Peter

Re: in festwerte kopieren
09.09.2002 17:52:52
kalli
hallo,

ja, meine tabelle ist im moment recht durcheinander. es gibt spalten, in denen ich mir nur etwas "merke" um dann hinterher in abhängigkeit dieser zellen wenn() funktionen auszuführen :-/ ich wüsste keinen anderen weg. alle zellen, zeilen, spalten, die nur sozusagen "intern" für mich sind, blende ich aus. wie gesagt: ich fange grad erst mit excel an, es sind meine ersten gehversuche.

also konkret: ich mache eingaben untereinander, sagen wir in spalte A. direkt daneben, in der selben zeile möchte ich einen datumsstempel haben: es erscheint immer das datum, an dem die nachbarzelle das letzte mal geändert worden ist.

es gibt keine solche funktion. heute() bleibt nicht konstant, denn morgen werden die werte wieder aktualisiert. also hatte ich die idee, die werte (also die inhalte) einer heute()-zelle zu kopieren. daher die dreifach-zellen. zu deiner antwort:

1. was ist ein Worksheet_Change?
2. ich kann doch kein makro schreiben, das nur bei eingaben in best. zellen aufgerufen wird, oder? also brauch ich ne funktion. diese funktion soll copy´n´paste machen, der rückgabewert ist mir egal
3. diese funktion (siehe code im originalartikel) funktioniert toll im step-by-step-modus mit F8 - aber nicht automatisch. warum?
4. wenn du eine bessere idee für das problem hast - sag an :-) ich lerne gerne und schnell und bin sogar ein wenig stolz darauf, nach zwei tagen excel die o.g. funktion geschrieben zu haben, auch wenn sie nicht funzt ;-) also das basis-problem hab ich beschrieben, die function war nur ein lösungs-versuch. wie gehts besser?


danke!

kk

Anzeige
Re: in festwerte kopieren
09.09.2002 18:37:47
PeterW
Hallo Kalli,

1) Worksheet_Change ist ein Ereignis (das immer bei Änderungen auf dem Worshhet ausgelöst wird), über das man ein Makro starten kann.
2) Man kann ganau festlegen, welche Zellen berücksichtigt werden sollen.
3) Die Funktion hab ich mir nicht näher angesehen, da sie schon zu verworren anfing. ;)
4) Öffne den VBA-Editor und klicke im Projektfenster doppelt auf die Tabelle, in der das Makro wirken soll. Füge dann einfach den Code ein und schau, was passiert.

Gruß
Peter


wow
09.09.2002 19:05:48
kalli
vielen vielen dank!! das find ich echt richtig klasse von dir, ich hoffe, ich kann mich irgendwann irgendwie revangieren...

ich habs gemacht und es funktioniert - ich hab noch keine ahnung warum, aber es geht. du bist mir einer - ich werd den ganzen abend mit meinen büchern verbringen müssen, um das zu verstehen :-/ aber fein, endlich KANN ich jetzt versuchen zu verstehen, wies geht.

deine antwort auf 3) kommentier ich nicht weiter, sondern erröte nur leicht und gelobe besserung *g*


bist ein netter!


bye

kalli

Anzeige
Re: wow
09.09.2002 19:31:16
PeterW
Hallo Kalli,

vielleicht helfen neben Deinen Büchern auch einige Kommentare.

Option Explicit
Wäre hier nicht nötig gewesen (ist aber als Standard bei mir eingestellt) zwingt dazu, Variablen zu dimensionieren

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Wie schon erwähnt, startet immer dann, wenn ein Worksheet sich per Eingabe verändert.

If Target.Column = 1 Then
Target liefert die Adresse der geänderten Zelle (bei Bereichen die Zelle oben, links); Column ist die Spalte, also die Bedingung, wenn die Zelle der Änderung in der ersten Spalte steht dann

Cells(Target.Row, 2) = Now()
Target.Row liefert die Zeile der Änderung. Mit Cells kann man einzelne Zellen ansprechen; Syntax ist Cells(Zeile, Spalte). Wenn die Eingangsbedingung (Target.Column=1) erfüllt ist dann in Cells(Target.Row, 2) (die 2 steht, wie Du schon erkannt hast für Spalte B), den Zeitstempel einfügen.

End If
Und wenn die Änderung nicht in Spalte A stattgefunden hat dann eben nicht.

Gruß
Peter

Anzeige
Re: wow
09.09.2002 20:13:02
kalli
hallo peter,

vielen dank, du bist einfach zu lieb! die kommentare sind in der tat hilfreich (sie ersetzen allerdings das lesen und lernen nicht) ich bin noch am lesen und da schreibst du schon erklärungen :-)
ich kommentier mal die kommentare:

>Option Explicit
>Wäre hier nicht nötig gewesen (ist aber als Standard bei mir >eingestellt) zwingt dazu, Variablen zu dimensionieren

das ist eine der sachen, bei denen ich im mom nix raffe: das dimensionieren. ich hab das gefühl, dass sich viele texte widersprechen. egal, das bekomm ich schon hin.


>Private Sub Worksheet_Change(ByVal Target As Excel.Range)
>Wie schon erwähnt, startet immer dann, wenn ein Worksheet sich >per Eingabe verändert.

ja, das tut es offensichtlich, aber es verwirrt mich. mal abgesehen davon, dass es sich reimt: ist das ein makro? ist das eine sonderform? ich finde nix darüber, ich versuchs mal zu erklären:

Private Sub Worksheet_Change (...) ist ein programm, das sich auf "innere" vorgänge in excel (einem sheet, einer tabelle..)bezieht und dort die funktionsweise ändert oder ergänzt. es wird ausgeführt, wenn in der tabelle änderungen (rechtsklicks, doppelklicks, berechnungen...je nach dem, was nach _ kommt) durchgeführt werden und beeinflusst so die arbeitsweise von excel selber. seh ich das richtig?

>If Target.Column = 1 Then
>Target liefert die Adresse der geänderten Zelle (bei Bereichen >die Zelle oben, links); Column ist die Spalte, also die >Bedingung, wenn die Zelle der Änderung in der ersten Spalte >steht dann

das hab sogar ich gleich verstanden ;-)

>Cells(Target.Row, 2) = Now()
>Target.Row liefert die Zeile der Änderung. Mit Cells kann man >einzelne Zellen ansprechen; Syntax ist Cells(Zeile, Spalte). >Wenn die Eingangsbedingung (Target.Column=1) erfüllt ist dann >in Cells(Target.Row, 2) (die 2 steht, wie Du schon erkannt hast >für Spalte B), den Zeitstempel einfügen.

jupp, hab ich gerafft. sieht auch logisch aus und liest sich gut. insgesamt find ichs verblüffend einfach.

lässt sich die ausgabe von now() beeinflussen, so dass die zeit unterdrückt wird?

>End If
jau, klare sache


gibst du eigentlich seminare? vhs? kurse? ich glaub, bei dir würd ich mich anmelden :-)


hab dank

kalli

Anzeige
damit gehts
09.09.2002 20:27:18
kalli
ich habs geändert in

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim datt
If Target.Column = 1 Then
datt = Mid(Now, 1, 10)
Cells(Target.Row, 2) = datt
End If
End Sub


ist das gut so? das ergebnis ist jedenfalls richtig *lach*


Re: wow
09.09.2002 20:50:04
PeterW
Hallo Kalli,

Opion Explicit
ich kann nur raten, diese Option in der Entwicklungsumgebung zu setzen (Extras - Optionen - Editor - Variablendeklaration erforderlich). Zum einen spart es Speicherplatz (ist sicherlich heute nicht mehr *das* Thema aber es erleichtert die Eingabe und vor allem die Fehlersuche. Benutze in jeder deklarierten Variablen einen Großbuchstaben und im Code werden die eigegebenen Kleinbuchstaben entsprechend umgewandelt. Buchstabendrehre :)lassen sich so leicht erkennen.

Worksheet_Change
IST ein Makro, eben ausgelöst durch eine Änderung im Arbeitsblatt. Wie sollte Excel wissen, dass eine einfache Formel wie =A1+B1 neu berechnet werden muss? Eben, durch eine Änderung im Arbeitsblatt.

Zeit unterdrücken
Zwei Möglichkeiten: entweder im Code mit Format (schau in der VBA-Hilfe nach) oder per Formatierung der Spalte B als Zeit.

Seminare
Noch nicht - aber Du bringst mich auf einen Gedanken. ;) Empfehlen kann ich die CD des Forumbetreibers!

Gruß
Peter

Anzeige
Nur das Ergebnis zählt :) (o.T.)
09.09.2002 20:51:58
PeterW

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige