Re: Funktion zur Rückgabe der Cursorposition

29/01/2011 - 13:45 von Franz | Report spam
Hallo Bernhard

Vielen Dank! Darf ich vielleicht noch etwas nachfassen: ich bin bei Access VBA einigermassen bei den Leuten, vor allem bei Formularen etc. aber hier bei Excel noch ziemlich ohne Erfahrung. Wie muss ich nun das ganze programmieren, damit ich z.B. in der Zelle A1 immer die Summe der 4 Zellen über dem Cursor kriege. (Das Endresultat ist viel komplexer, das ist hier nur ein Beispiel).

Also ich würde in VBA so etwas schreiben:

Sub Sum_above_cursor()
On Error GoTo ErrorHandler
Sum(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-5, 0)).Select)
ErrorHandler:
End Sub

Wie würde dann diese Funktion "aufgerufen"?

Sorry, wenn das blöde Fragen sind, aber ich steh mir da irgendwie auf dem Schlauch?

Thx aus Prag

Franz

-
 

Lesen sie die antworten

#1 Reiner Wolff
29/01/2011 - 21:42 | Warnen spam
Moin Franz,

*Franz* schrieb:
Vielen Dank! Darf ich vielleicht noch etwas nachfassen: ich bin bei
Access VBA einigermassen bei den Leuten, vor allem bei Formularen etc.
aber hier bei Excel noch ziemlich ohne Erfahrung.

Wie muss ich nun das ganze programmieren, damit ich z.B. in der Zelle A1
immer die Summe der 4 Zellen über dem Cursor kriege.
(Das Endresultat ist viel komplexer, das ist hier nur ein Beispiel).



Es ist beim Helfen immer interessant, wenn man weiß, wohin Du willst.

Also ich würde in VBA so etwas schreiben:
Sub Sum_above_cursor()
On Error GoTo ErrorHandler
Sum(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-5, 0)).Select)
ErrorHandler:
End Sub

Wie würde dann diese Funktion "aufgerufen"?



Schon ein netter Anfang.
Aber Du schreibst es richtig: Es muss eine Funktion sein, schließlich
möchtest Du Excel ja einen Rückgabewert zurückgeben.
Die Fehlerabfangroutine kannst Du Dir hier sparen, da sie a) sowieso nichts
macht und b) Dir der Fehlerhinweis sowieso in der Zelle angezeigt wird.

Die Funktion könnte also zB so aussehen:
Public Function Sum_above_cursor() As Variant
Dim rng As Excel.Range
'zu summierenden Bereich festelegen
Set rng = Range(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-4, 0))
'Summe in VBA ermitteln
Sum_above_cursor = WorksheetFunction.Sum(rng)
End Function

Die Funktion solltest Du in ein Standardmodul schreiben.
In A1 schreibst Du dann:
=Sum_above_cursor()

Sorry, wenn das blöde Fragen sind, aber ich steh mir da irgendwie auf
dem Schlauch?



Keine blöde Frage.
Du hast dann als nàchstes nàmlich das Problem, dass Excel Formeln nur dann
neu berechnet, wenn es benötigt wird. Das versetzen der aktiven Zelle, löst
keine Neuberechnung aus.

Daher müsstest Du dann das Worksheet_SelectionChange-Ereignis nutzen, damit
die Formel neu berechnet wird.
Um die Zelle neu berechnen zu lassen, schreibt man eigentlich
Tabelle1.Range("A1").Calculate

Leider sorgt das allerdings auch nur beim ersten Wechsel der Auswahl für
eine Neuberechnung. Die einzige Variante, die ich gefunden habe für die
Aktualisierung sieht so aus:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CalculateFull '<- hierzu solltest Du Dir die OnlineHilfe ansehen
End Sub


Da Du für die Aktualisierung aber eh auf das Ereignis zurückgreifen musst,
brauchst Du eigentlich auch nicht mehr die Formel und kannst das Ergebnis
direkt entweder in die Zelle schreiben oder in der Statusleiste anzeigen
oder sonstwas. Denn ohne das SelectionChange-Ereignis wird's wohl nichts.

Normaler Weise benutzt man Tabellenblattfunktionen ja unabhàngig von der
aktiven Zelle. Du könntest aus Deiner Anforderung zB eine SumAbove-Funktion
schreiben, die die normale Summen-Funktion verkürzt, zB:

Public Function SumAbove(Offset As Long) As Variant
Dim Zelle As Excel.Range
Dim rng As Excel.Range
'zu summierenden Bereich festelegen
Set Zelle = Application.Caller
Set rng = Range(Zelle.Offset(-1, 0), Zelle.Offset(-Offset, 0))
'Summe in VBA ermitteln
SumAbove = WorksheetFunction.Sum(rng)
End Function

Schreibst Du dann halt als Formel unterhalb Deiner Zahlen hinein.
Ändert sich aber nichts, wenn Du die aktive Zelle versetzt.


Du solltest Dich bei Deinen Excel-Fragen übrigens an die neue Newsgroup
wenden. Diese hier wird seit vielen Monaten schon von Microsoft nicht mehr
unterstützt. Die neue Newsgroup findest Du unter
de.comp.office-pakete.ms-office.excel

HTH
Gruß aus Kiel
Reiner
Ein Buch ist wie ein Spiegel: wenn ein
Affe hineinsieht, so kann kein Apostel
herausgucken.
Georg Christoph Lichtenberg

Ähnliche fragen