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

Vba Function

Vba Function
03.02.2016 14:52:44
Björn
Hallo zusammen,
mit folgender Funktion sollen alle Werte einer Spalte summiert werden, die eine bestimmte Bedingung erfüllen. Im Debug.Print wird aber nur der Wert 0 ausgegeben.
Leider finde ich den Fehler nicht. Es wäre nett, wenn mir jemand weiterhelfen könnte...
https://www.herber.de/bbs/user/103262.xlsm
Option Explicit
Public Function summeA(vatTabelle1 As Variant, lngKto As Long) As Double
On Error GoTo Step
With Worksheets(varTabelle1)
summeA = Application.WorksheetFunction.SumIf(.Range("B1:B22"), lngKto, .Range("C1:100"))
End With
Step:
End Function
Sub TestIt()
Debug.Print summeA(1, 1)
Debug.Print summeA("Tabelle1", 1)
Debug.Print summeA("KeinenWertGefunden", 1)
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Vba Function
03.02.2016 15:08:54
Rudi
Hallo,
scheiß On Error!
summeA = Application.WorksheetFunction.SumIf(.Range("B1:B22"), lngKto, .Range("C1:C100"))
Warum unterschiedliche Bereichsgrößen?
Gruß
Rudi

AW: Vba Function
03.02.2016 15:30:56
Björn
Danke!

AW: Vba Function
03.02.2016 16:07:53
Björn
Folgende Frage wollte ich noch stellen:
Im Falle einer Alphanumerischen Kontonummer DE1234xxx möchte ich gerne in die Sumif Funktion eine mid()-Funktion integrieren. Ich habe mich an die Microsoft-Doku gehalten. Bekomme aber immer eine Fehlermeldung bzw. eine 0 als Ausgabewert.
https://www.herber.de/bbs/user/103266.xlsm
summeA = Application.WorksheetFunction.SumIf(.Range("B1:B22"), mid(B2:B22,2,4)=lngKto, .Range("C1:100"))
Vollständiger Quellcode:
Option Explicit
Public Function summeA(varTabelle1 As Variant, lngKto As Long) As Double
With Worksheets(varTabelle1)
summeA = Application.WorksheetFunction.SumIf(.Range("B1:B22"), mid(B1:B22,2,4)=lngKto, . _
Range("C1:C100"))
End With
End Function
Sub TestIt()
Debug.Print summeA(1, 1234)
End Sub

Anzeige
Na, na, Rudi! 'On Error GoTo' ist nützlich, ...
03.02.2016 18:43:13
Luc:-?
…wenn man das auch zu einer ordentlichen FehlerBehandlung nutzt, was du nicht tust, Björn!
Der Fehler, der durch deine falsche Argumentierung von .SumIf entsteht, führt zu einem Fehler und der zum Sprung ans PgmEnde, wobei der Wert von summeA natürlich immer noch 0 ist.
Es ist nicht erforderlich, Application.WorksheetFunction.SumIf zu schreiben, WorksheetFunction.SumIf reicht. Falls du dagegen Application.SumIf schreiben würdest, könnte summeA den zurückgegebenen Fehlerwert (wahrscheinlich #BEZUG!) aufnehmen, wenn es nicht As Double, sondern gar nicht deklariert wäre (As Variant). So wie hier würde deine UDF allenfalls den allgemeinen Standard­Fehlerwert #WERT! zurückgeben, was wenig aussage­kräftig wäre. Xl-Standard-Fktt sind deshalb idR nicht explizit deklariert (meine UDFs auch nicht!). Mit der vbFkt CVErr kann man einen passenden Fehlerwert in einen XlStandard­Fehler umwandeln.
Zu deiner neuen Frage:
Versuche das, was du mit der WorksheetFunction.SumIf vorhast, mal in einer ZellFml! Du wirst schnell merken, dass Xl die Annahme verweigert. Die HptArgumente etlicher nachträglich dem ursprüng­lichen Xl-Konzept hinzu­gefügter Fktt* verlangen zwingend Zell­Bereichs­Bezüge. Ein Ausdruck (expression) als Argument hat aber keinen bzw verliert ihn, falls es sich dabei um eine Fml handelt, die dann ein Datenfeld (Array) zurückgibt. Dafür reicht schon eine einfache Multi­plikation eines Bereichs mit 1, was allerdings nur in einer ZellFml fktionieren würde, nicht in VBA! Außerdem ist zu beachten, dass WorksheetFunctions immer nur im vorgesehenen Argumen­tierungs­Rahmen fktio­nieren, weil die Unter­stützung durch die Xl-Steuerung in VBA idR fehlt (die hat man nur mit vbFkt Evaluate!). D.h., ein skalar vorgesehenes Argument muss auch zwingend ein Einzelwert sein, kein Datenfeld! Man erkennt das an der Argument­Anzeige des Fml-Assis bzw in der Xl-Hilfe zur jeweiligen Xl-Fkt.
* Das ist höchstwahrscheinlich dem Umstand zu verdanken, dass damit Pgmmierer beauftragt wurden, die in Datenbank-Kategorien dachten oder den in der verwendeten Pgmier­Sprache zusätzlichen Aufwand zur Zulassung von Datenfeldern scheuten. Dadurch ist die schizophrene Situation entstanden, dass es in bestimmten Bereichen 2 Typen von Fktt gibt, die nur auf ZellBereiche zugreifen können, aber keine, die auch Datenfelder verarbeiten könnte, so wie es mit dem ursprünglichen Xl-Konzept vorgesehen war. Das hat MS auch mit den Xl-Vss 12+14 nicht korrigiert!
Gruß, Luc :-?
Besser informiert mit …
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige