Gibt es irgendwo eine Funktion (oder hat jemand was in VBA geschrieben), was die Position des Cursors zurückgibt. Also im Klartext: =WoistderCursor() sollte dann zum Beispiel B55 zurückgeben. Ich brauchte dies um Rechenoperationen mit der Cursorposition als Ausgangsreferenz zu machen.
Danke an alle Helfer
Gruss
Frnaz
-----
> Gibt es irgendwo eine Funktion (oder hat jemand was in VBA geschrieben), was
> die Position des Cursors zur�ckgibt. Also im Klartext: =WoistderCursor()
> sollte dann zum Beispiel B55 zur�ckgeben. Ich brauchte dies um
> Rechenoperationen mit der Cursorposition als Ausgangsreferenz zu machen.
ActiveCell liefert einen Range mit der aktiven Zelle, das ist die, in der der
Cursor sitzt.
N�heres siehe Hilfe.
x=ActiveCell.Address liefert die Adresse der Zelle
y=ActiveCell.Value liefert den momentanen Wert dieser Zelle
Es gibt auch noch Selection, das liefert einen Range mit den markierten Zellen.
Falls mehrere Zellen markiert sind, sind Selection und ActiveCell deutlich
unterschiedlich.
Gru�
Bernhard Sander
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
----
> 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
Das ist ja mehr als erschöpfend! Vielen Dank, ich erspare Dir die
Details, das mit der Summe war nur ein einfaches Beipiel, aber mit
Deinen Angaben komme ich weiter!
Gruss aus Prag
Franz
----