Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
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

Fehler in Function aber wieso?

Fehler in Function aber wieso?
Dirk
Hallo Freunde :-)
ich bin gerade wiedereinmal beim experimentieren auf ein Problem gestoßen, das ich nicht verstehe
in der angefühten Datei sind einige Funktionen, die ich nachgeschriebn habe.
maxbez und maxbezug sollten das Gleiche resultat liefern.
Funktionen.xls
ich wollte eigendlich nur ein kleine Function noch schreiben, die mir aus einer Liste den Maximalwert ausliest und den Datugehöhrigen Namen zurückliefert.
Es sah auch alles sehr gut aus.
als ich allerdings den bereich von der ersten Zeile aus bis zur x Zeile erweitern wollte (beim testen war es Ziele 2 bis 10) lieferte die Function nicht mehr das gewünschte Ergebniss.
Rückgabe #Wert.
Waran kann das liegen?
Gruß
Dirk

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
zwei Fehler und ein Mangel
03.03.2012 20:08:23
Erich
Hi Dirk,
in maxbez muss die For-Schleife nicht von i, sondern von 1 an laufen.
(Das ist einer der Gründe dafür, dass ich keine Einzelbuchstaben als Variablennamen verwende,
also statt i vielleicht ii, statt z vielleicht rngC.)
Zweites Problem:
Bei der ersten Zahl ist tmpc noch 0, wenn du mit
If Zahlen(i).Value > Zahlen(tmpc)
prüfen willst, ob der neue Wert größer ist. Zahlen(tmpc) gibt es aber nicht, wenn tmpc=0 ist - Fehler.
Probier mal

Function maxbez(Zahlen As Range, bezug As Range)
Dim z As Range, i, tmpc As Long
For i = 1 To Zahlen.Count
If TypeName(Zahlen(i).Value) = "Double" Then
If tmpc = 0 Then
tmpc = i
ElseIf Zahlen(i).Value > Zahlen(tmpc) Then
tmpc = i
End If
End If
Next i
maxbez = bezug(tmpc)
End Function
Und der Mangel: Option Explicit fehlt oben im Modul!
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
Abgesehen mal von dem, was Erich schreibt, ...
03.03.2012 20:30:04
dem,
…Dirk,
geht's dir ja wohl um dieses angebliche Bereichsphänomen, das aber gar keines ist, weil man dazu auch etwas in der Hilfe findet.
Erläuterung:
1. Die Zählung von Bereichen beginnt auch in VBA stets mit 1 ⇒ 1.Feldindex, sowohl in Spalten als auch Zeilen.
2. Wird ein Index verwendet, der kleiner ist als der 1.Feldindex des verwendeten Bereichs, wird ein Zellwert außerhalb dieses Bereichs zurückgegeben (entsprd Anzahl Zellen rückwärts). Das fktt bei der 2.Variante, weil noch eine 1.Zeile existiert, die mit Index 0 angesprochen wird. Bei der 1.Variante nicht, weil Index 1 ja schon die 1.Zeile wäre — eine 0.Zeile gibt's ja bekanntlich nicht. Das hättest du auch ganz leicht beim Debuggen im Einzelschrittmodus selbst herausfinden können, denn der VBE-Intellisense zeigt das an. Übrigens greifen auch zu große Indizes weiter (bis zum Blattende).
3. Bei Datenfeldern kann das anders sein: Ist ihre Entstehung formelbasiert, beginnen sie idR mit Index1 (auch bei WorksheetFunction-Einsatz), ist sie VBA-prozedurbasiert, beginnen sie standardmäßig mit Index 0. Interessanterweise ist das auch bei bestimmten UserForm-Elementen so, bei Objektgruppierungen aber nicht (blattbasiert!).
Gruß+schöSo, Luc :-?
PS@Erich: i=i wäre völlig unschädlich, falls i zuvor nicht auf 0, sondern 1 gesetzt worden wäre. Ich mache so etwas mitunter absichtlich. ;-) schöSo!
Anzeige
AW: Fehler in Function aber wieso?
04.03.2012 10:38:27
Dirk
Hallo ihr beiden
Erstaml Danke
@ Erich
du hast ja recht ich sollte längere Variablen verwenden.
das Option Explicit vergesse ich ständig.
@ Luc
Bereichsphänomen ja schon irgendwie.
Ich wuste garnicht, das in den Bereich noch innerhalb der Function "manipulieren/erweitern" kann.
wenn der bereich A2:a10 gewählt wurde ich ich count 0 abfage erhalte ich den wert aus A1.
i=i war in dem Fall wirklich ein Tippfehler (bei Array´s funktioniert das :-D)
Danke nachmal
Dirk
Option Explicit vergesse ich ständig ...
04.03.2012 12:59:48
Erich
Hi Dirk,
zu deinem Betreff-Problem kann ich dir nur raten, VBA selbst dafür sorgen zu lassen, dass jedes neue Modul
mit "Option Explicit" beginnt. Das ist ganz einfach:
Userbild
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige