Microsoft Excel

Herbers Excel/VBA-Archiv

Benutzerdefinierte Funktion macht Unsinn

Betrifft: Benutzerdefinierte Funktion macht Unsinn von: ines
Geschrieben am: 30.08.2004 20:06:28

Guten Abend Profis,
ich möchte mit einer benutzerdefinierten Funktion Daten aus einem Datenblatt holen und in Fallblätter eintragen. Dazu habe ich mir eine Funktion programmiert, die auch funktioniert. Leider nur, wenn ich damit auf einem Blatt bleibe. Wenn ich damit auf ein zweites Blatt gehe, die Formeln eintrage und Excel alles berechnet werden mir die Ergebnisse im ersten und den andern Blättern überschrieben. Wie mir scheint, rechnet Excel die Funktionen in den andern Blättern mit Variableninhalten für Zeilen und Spalten, die aus dem zweiten Blatt stammen. Ist übrigens egal, auf welches Blatt ich gehe, es stimmt bei den anderen hinterher immer nicht mehr. Ich habe schon 2 Varianten, aber beide gehen nicht (Fall1a und Fall1b mit holemirwas() und Fall2a und Fall2b mit holemirwas2(Zelle).
https://www.herber.de/bbs/user/10312.xls
Kann mir bitte jemand helfen ?
Danke, Ines

  


Betrifft: AW: Benutzerdefinierte Funktion macht Unsinn von: Luschi
Geschrieben am: 30.08.2004 21:42:39

Hallo Ines,

wenn man eine selbstgeschriebene Vba-Funktion in mehreren Tabellenblättern einsetzt,
ist Präzision im Ansprechen von Cell- bzw. Range-Bereichen erforderlich.
In Deinem Code steht:

PreisRegZ = Cells(meineZeile, spaltePreisRegZ.Column)
KuNumZ = Cells(meineZeile, spalteKuNumZ.Column)
HoMiWaZ = Cells(1, meineSpalte)

Excel interpretiert Cells(...) bei jedem Funktionsaufruf immer auf das ActiveSheet,
also auf das gerade sichtbare Tabellenblatt und somit steht in allen Tabellen der
selbe Wert für die Funktion.
Deshalb mußt Du es wie folgt machen:

Public Function holemirwas(ByRef AktuelleZelle As Range, Optional Blattname_Datenblatt As String = "Datenblatt") As Variant
Application.Volatile
...
...
Dim tabName As String
Dim ws As Worksheet
'ermitteln des Tabellenname der übergebenen Zelle
tabName=AktuelleZelle.Parent.Name
Set ws = Application.ActiveWorkbook.Worksheets(tabName)
Set spaltePreisRegZ = ws.Rows(1).Find(what:="Rabattstufe")
Set spalteKuNumZ = ws.Rows(1).Find(what:="Kundennummer")
PreisRegZ = ws.Cells(meineZeile, spalteKuNumZ.Column)
HoMiWaZ = ws.Cells(1, meineSpalte)

usw. Damit sind die Zellen eindeutig angesprochen und die Funktion wird die
korrekten Werte liefern. In der 2. Funktion (ohne Übergabeparameter) mußt Du
einfach eine Zelle als Dummy-Parameter übergeben, un den Tabellennamen ermitteln
zu können.

Gruß von Luschi
aus klein-Paris


  


Betrifft: AW: Benutzerdefinierte Funktion macht Unsinn von: ines
Geschrieben am: 30.08.2004 22:21:59

Hallo Luschi,
danke schön, funktioniert. Was ähnliches hatte ich in der Variante ohne Parameterübergabe probiert, aber das gab's nicht: application.caller.parent.name. Da bleibe ich bei der Variante mit der Übergabe der eigenen Zelle.
Danke nochmal,
Ines


 

Beiträge aus den Excel-Beispielen zum Thema "Benutzerdefinierte Funktion macht Unsinn"