Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1232to1236
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

excel soll immer dasselbe Makro ausführen

excel soll immer dasselbe Makro ausführen
Udo
Hallo zusammen,
ich möchte gerne, wenn ich in b76 (egal was) eine Eingabe mache, dass dann ein von mir geschriebenes Makro ausgeführt wird. Geht das ?
Viele Grüsse Udo
Lass es aus der Ereignisprozedur ...
14.10.2011 17:05:13
Luc:-?
Worksheet_SelectionChange aufrufen, Udo,
wenn die Bedingung dafür erfüllt ist.
Gruß Luc :-?
Bspp gibt's dafür im Archiv zuhauf!
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 17:15:40
Udo
ich kann leider überhaupt nicht programmieren und ich hab grade 5 Beispiele für worksheet im Archiv gelesen, ich Blick da überhaupt nicht durch.
Bedingung soll irgendeine Eingabe sein egal welche.
dies ist mein Makro, soll nur was nach oben verschieben.

Sub getroffenezahlen()
' getroffenezahlen Makro
' Tastenkombination: Strg+w
Range("B40:B84").Select
Range("B84").Activate
Selection.Cut
Range("B39").Select
ActiveSheet.Paste
Range("B39").Select
Selection.ClearContents
End Sub

Anzeige
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 18:24:34
Reinhard
Hallo Udo,
Rechtsklick auf den Blattnamen, "Code anzeigen" anklicken , Code reinkopieren:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B76" Then Call getroffenezahlen
End Sub

Gruß
Reinhard
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 18:59:19
Udo
Hi Reinhard,
verflixt da kommt Syntaxfehler. Den Macronamen hab ich so angepasst

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then PERSONAL.xlsb!getroffenezahlen
End Sub

AW: Lass es aus der Ereignisprozedur ...
14.10.2011 19:14:50
Reinhard
Hallo Udo,
wenn ich nicht mit der Selecterei durcheinander komme müßte dieser Code das gleiche tun wie deiner:

Sub getroffenezahlen()
' getroffenezahlen Makro
' Tastenkombination: Strg+w
Range("B40:B84").Cut Range("B39")
Range("B39").ClearContents
End Sub
Syntaxfehler? Ich glaube nicht bei meinem Code so wie ich ihn zeigte.
Egal, funktioniert es jetzt wie gewünscht? Warum jetzt B77?
Wenn nicht zeige mal die beiden Codes, reinkopieren, nicht hier reinschreiben!.
Und genaue Fehlernbeschreibung, welcher Fehler in welcher Zeile usw.
Gruß
Reinhard
Anzeige
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 19:49:55
Udo
also wenn ich rechtsklick auf meine Registerkarte mache, den Code dort reinkopiere, dann öffnet sich ne Box
den Inhalt dieser Box kann ich aber hier nicht reinkopieren, in der Box steht:
Fehler beim Kompilieren:

Sub oder 

Function nicht definiert
der andere makro code ist immer noch dieser:

Sub getroffenezahlen()
' getroffenezahlen Makro
' Tastenkombination: Strg+w
Range("B40:B84").Select
Range("B84").Activate
Selection.Cut
Range("B39").Select
ActiveSheet.Paste
Range("B39").Select
Selection.ClearContents
End Sub

oder kann auch den von Dir probieren.
B77 ist das richtige Feld !
Anzeige
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 21:19:30
Reinhard
Hallo Udo,
lade mal eine Beispielmappe hoch wo das so auftritt.
Hochladen geht wenn du mir antwortest rechts oberhalb des Eingabefeldes beim Link
"hier gehts zum File-Upload"...
Gruß
Reinhard
AW: Lass es aus der Ereignisprozedur ...
14.10.2011 22:22:41
Reinhard
Hallo Udo,
was ist das nun mit den letzten 37 Zahlen haben? Wohin damit dann wenn du sie "hast" ?
Bislang ging es doch um Code der nicht funktioniert, in der mappe ist aber kein Code, wie soll ich da nachvollziehen was da bei dir schiefläuft.
Erklär mal das mit den 37 genauer bitte.
Und zeige die vorhanden Codes und sag in welchen Modulen sie stehen.
Frage auf noch offen gestellt.
Gruß
Reinhard
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 10:29:48
Udo
Guten Morgen Reinhard,
ich hab hier den Code reinkopiert
https://www.herber.de/bbs/user/77018.xlsm
die Sache ist eigentlich recht simpel:
in B40 bis B76 stehen 37 Zahlen, nun gebe ich ins Feld B77 eine Zahl ein. Nun hab ich 38 Zahlen. Die obere Zahl in Feld B40 soll gelöscht werden und die Zahlen von B41 bis B77 nach oben (B40:B76) verschoben werden, so dass ich wieder 37 Zahlen habe.
Meine Idee war nun, dass mit dem Makro zu machen, und dieses soll automatisch gehen, sobald ich eine Zahl in Feld B77 eingebe.
Ich hoffe, ich konnte mich verständlich ausdrücken.
LG Udo
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 11:40:10
Reinhard
Hallo Udo,
drei Möglichkeiten, mußt dich entscheiden, kann bloß eine geben pro Blattmodul:

***************  Makro steht in einem Standardmodul in personl.xlsb***************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then Application.Run "Personl.xlsb!getroffenezahlen"
End Sub
***************  Makro steht in einem Standardmodul deiner mappe****************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then Call getroffenezahlen
End Sub
***************  es gibt kein Makro******************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then
Application.Enabled = False
Range("B41:B77").Cut destinatuon:=Range("B40")
Application.Enabled = True
End If
End Sub
Hier das Makro für die ersten beiden Fälle:
Sub getroffenezahlen()
Application.Enabled = False
Range("B41:B77").Cut destinatuon:=Range("B40")
Application.Enabled = True
End Sub

Standardmodul= Modul1, Modul2 usw, oben Einfügen---Modul.
Im engl Excel heißt die Mappe personal.xlsb, immer dt. Excel personl.xlsb
Gruß
Reinhard
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 12:40:48
Udo
Ich versteh dass mit personal.xlsb nicht. Hab ca . 50 makros dort , die Datei steht im Startordner von excel.
Beim Start wird diese Datei geladen und ich kann auf meine Makros zugreifen. Warum soll die denn jetzt auf einmal personl.xlsb heissen ? Dann läuft ja gar nichts mehr.
So wie ich es verstehe soll ich jetzt eine Personl.xlsb anlegen, ich weiss aber nicht wie ich meine Makros dann in diese neue Datei bekomme.
Also hab ich mich für Möglichkeit 3 entschieden es gibt kein Makro.
Füge ich nun den Code in Arbeitsblatt ein:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then
Application.Enabled = False
Range("B41:B77").Cut destinatuon:=Range("B40")
Application.Enabled = True
End If
End Sub
passiert gar nichts.
Denke mal das liegt an destinatuon. Hab ich geändert in destination. Aber auch dann passiert nix.
seufsz
LG Udo
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 12:48:22
Hajo_Zi
Hallo Udeo,
der Teil destinatuon:= kann auch gelöscht werden. Du gibst schon was in B77 ein?

AW: Lass es aus der Ereignisprozedur ...
15.10.2011 12:53:55
Udo
Grüß Dich Hajo,
ja sicher :-)
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 12:57:33
Hajo_Zi
Hallo Udo,
nach Deinem Schreiben bin ich davon ausgegangen der Code läuft. Das ist aber falsch.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B77" Then
Application.EnableEvents = False
Range("B41:B77").Cut Range("B40")
Application.EnableEvents = True
End If
End Sub

Gruß Hajo
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:10:18
Udo
ok, der code zeigt korrekt die Ergebnisse an.
Leider sehe ich aber nicht, meine letzten 37 Zahlen in B41:B76. Die Zahl die ich in B77 eingebe wird lediglich gezählt, die Zahlenreihe von B41:B76 ist aber unverändert.
Oben soll ja die erste Zahl rausfliegen und die Zahl die ich in B77 eingebe soll in B76 erscheinen
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:12:10
Hajo_Zi
Hallo Udo,
bei mir erscheint B77 in B76
Gruß Hajo
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:20:52
Udo
https://www.herber.de/bbs/user/77020.xlsm
hier im aktuellen Beispiel geben ich in Feld B77 die 2 ein. Diese wird nun korrekt gezählt.
Oben soll aber in Feld B40 die 3 rausfliegen. Die 15 in Feld B41 soll in Feld B40 stehen, Die 25 in Feld B42 soll in B41 stehen .... die 2 von Feld B77 soll in Feld B76 stehen und so weiter . Das tuts leider nicht.
Anzeige
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:26:10
Udo
das hier soll der noch machen. Wenn ich das noch einbaue funktioniert das aber nicht. Nur als einzelnes Makro
Range("B41:B77").Select
Selection.Copy
Application.CutCopyMode = False
Selection.Cut
Range("B40").Select
ActiveSheet.Paste
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:29:14
Hajo_Zi
Hallo Udo,
ich kann das in Deiner Datei nicht nachvollziehen, ich habe B77 in B77 eingetragen und ale Einträge wandern um eins nach oben und der erste ist fort.
Gruß Hajo
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:31:30
Udo
lach das gibts doch nicht, bei dir gehts das und bei mir nicht ...
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:35:17
Hajo_Zi
Hallo Udo,
Makros hast Du schon aktiviert?
Gruß Hajo
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 13:34:19
Udo
Ich verstehe gar nichts mehr. Hab grade meine eigene Datei , die ich hochlud selber downgeloaded und jetzt gehts
Danke Euch jedenfalls, kann es nicht nachvollziehen aber es geht.
Schönes WE
Udo
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 15:45:40
Reinhard
Hallo Udo,
wenn du in einer oder mehreren Zellen gleichzeitig, etwas änderst so ist das das Change-Ereignis für das jeweilige Blatt.
Wenn nun im Blattmodul Code zum Change_Ereignis steht, also hier die Codehülle:

Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

dann wird dieser Code, diese Prozedur ausgeführt.
Nun habe ich aber
Application.EnableEvents =False
benutzen müssen, damit wenn der Code da den Wert aus B77 nach B76 "cut"-tet nicht nochmals das Change-Ereignis ausgelöst wird.
Nach den Zellenverschiebungen steht im Code Application.EnableEvents =True.
D.h., ab jetzt wird wieder auf das Change-Ereignis reagiert.
Versuche diese notwendige Logik zu verstehen. Dann verstehst du auch besser wie du wenn was bei
Ereignis-Codes vorgehen mußt um überhaupt zu prüfen daß auch aufgerufen werden.
Passiert nämlich etwas innerhalb der Codezeilen
Application.EnableEvents =False
und
Application.EnableEvents =True
und der Debugger kommt und du brischst den Code ab, so gilt weiterhin das Application.EnableEvents =False.
Um das auszuschließen, grad beim testen von so Codes.
Schreib dir fix sowas:
Sub xyz()
Application.EnableEvents =True
end sub
und laß das laufen bevor du wieder was in B77 änderst.
Ansonsten, um Code zu prüfen, der z.B. augenscheinlich nichts tut, beschäftige dich mal mit Haltepunkt setzen und F8 ...
Gruß
Reinhard
AW: Lass es aus der Ereignisprozedur ...
15.10.2011 17:38:00
Udo
Hallo Reinhard,
vielen vielen Dank für Deine Mühe. Funzt ja jetzt alles wunderbar. Tu mich etwas schwer zu verstehen, aber ich versuchs auf jeden Fall.
An Hajo auch lieben Dank.
Biba Udo
Das geht so nicht ...
15.10.2011 14:40:12
Luc:-?
PERSONAL.xlsb! bei Call (auch, wenn es nicht dasteht, ist es das!) in einem Makro, Udo,
nur wie später im Thread umgestellt mit Run. Bei dir hätte Reinhards Version oder eine Form mit dem internen Namen von PERSONAL.xlsb gereicht, also internname.getroffeneZahlen. Aber wahrscheinl hat die keinen sinnvollen eigenen und damit wäre der Weg sinnlos, es sei denn, du gibst ihr einen.
Gruß+schöWE, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige