Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
232to236
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
232to236
232to236
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro ausführen mit Enter-Taste

Makro ausführen mit Enter-Taste
17.03.2003 13:02:39
Matthias H.
Hallo,

ich habe ein Makro geschrieben, das folgendes bewirkt:
die Zahl der aktiven Zelle wird zum Wert in einer anderen Zelle hinzugezählt:

Sub add()

Dim iCol As Integer
Dim iRow As Integer
iCol = ActiveCell.Column
iRow = ActiveCell.Row
Cells(iRow, iCol + 2) = Cells(iRow, iCol + 2) + Cells(iRow, iCol)
ActiveCell.ClearContents

End Sub

Bisher muß ich dazu eine Schaltfläche drücken. Ich möchte es jedoch nach Drücken der Enter-Taste ausführen, aber nur wenn eine Zelle in der Spalte iCol markiert ist.
Könnt ihr mir helfen?

Gruß
Mattias


7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Makro ausführen mit Enter-Taste
17.03.2003 13:17:05
ChrisL

Hallo Mattias

Was du suchst ist ein Worksheet_Change Ereignis d.h. das Makro reagiert auf jede Änderung einer Zelle. Alt + F11, links Doppelklick auf Tabelle, neues Fenster oeffnet sich, links oben Dropdown auf Worksheet aendern, rechts oben auf Change, Code einfügen, Fenster schliessen.

"...aber nur wenn eine Zelle in der Spalte iCol markiert ist."
Da iCol die aktive Spalte ist, ist die Spalte iCol sowieso markiert bzw. verändert. Verstehe also nicht ganz, was du damit meinst.

Du kannst allerdings Einschränkungen vornehmen. z.B.
If Target.Column = 5 Then
'Dein Makro
End If

Dadurch würde das Makro nur auf Änderungen in der 5. Spalte (Spalte E) reagieren.

Gruss
Chris

Anzeige
Geht schon fast
17.03.2003 13:31:16
Matthias H.

Hallo Chris,

danke für den Tip. Ich habe jetzt folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Dim iCol As Integer
Dim iRow As Integer
iCol = ActiveCell.Column
iRow = ActiveCell.Row
Cells(iRow - 1, iCol + 2) = Cells(iRow - 1, iCol + 2) + Cells(iRow - 1, iCol)
ActiveCell.ClearContents

End If

End Sub

Die Beschränkung auf eine Spalte kommt daher, daß ich in den anderen Zellen nach wie vor Werte eingeben möchte ohne das Makro auszuführen. Das If Target.Column... funktioniert.

iRow-1 habe ich geschrieben, weil nach dem Enter die aktive Zelle nach unten springt.

Allerdings wird die Berechnung nicht richtig durchgeführt. Wenn z.B. in Zelle L20 "1" steht, und ich trage in J20 auch "1" ein, sollte dann nach "Enter" in L20 "2" stehen. Statt dessen läuft aber der Wert in L20 in Einerschritten wie in einer Schleife auf "242" hoch.
Weißt Du warum?

Gruß Matthias


Anzeige
Re: Geht schon fast
17.03.2003 13:50:03
ChrisL

Hallo Matthias

Wenn ich das Problem richtig verstanden habe, dann müsste es so funktionieren:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
Cells(Target.Row, 12) = Cells(Target.Row, 12) + Cells(Target.Row, 10)
Range(Target.Address).ClearContents
End If
End Sub


Anstatt mit ActiveCell.Row resp. ActiveCell.Column kannst du mit Target.Row und Target.Column arbeiten. Dies entspricht der Zelle, die verändert wurde.

Gruss
Chris

Das ist es!
17.03.2003 13:59:54
Matthias H.

Hallo Chris,

genau das ist es.
Noch eine Frage: Weißt Du warum Excel nach dem Drücken auf "Enter" für einige Sekunden ausgelastet ist (Sanduhr)?
Das Hochzählen auf 242 das ich beobachtet hatte, ließ mich auf eine Schleife schließen, die alle 256 Spalten durchläuft. Aber selbst mit If Target.Column = 10 passiert das.

Danke
Matthias


Anzeige
Das ist es!
17.03.2003 13:59:54
Matthias H.

Hallo Chris,

genau das ist es.
Noch eine Frage: Weißt Du warum Excel nach dem Drücken auf "Enter" für einige Sekunden ausgelastet ist (Sanduhr)?
Das Hochzählen auf 242 das ich beobachtet hatte, ließ mich auf eine Schleife schließen, die alle 256 Spalten durchläuft. Aber selbst mit If Target.Column = 10 passiert das.

Danke
Matthias


Re: Das ist es!
17.03.2003 14:11:59
ChrisL

Hallo Matthias

Das mit der Sanduhr kann ich nicht genau sagen. Wenn du das Makro in eine leere Tabelle einträgst, dann geht es eigentlich recht schnell.

Vielleicht bringt es etwas, wenn du den Bereich noch weiter einschränken kannst. z.B.
If Target.Column = 10 And Target.Row <= 1000 Then...
Dadurch werden nur bis Zeile 1000 berücksichtigt. Ob es etwas bringt ist allerdings ne andere Frage.

Gruss
Chris

Anzeige
Re: Das ist es!
17.03.2003 14:28:24
Matthias H.

Mmmh, kann sein daß es daran liegt daß meine Datei ziemlich groß ist (20 Blätter)...

Vielen Dank nochmal
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige