Thema Datum  Von Nutzer Rating
Antwort
17.08.2021 12:18:29 Alexander
NotSolved
17.08.2021 13:32:35 Gast86125
NotSolved
17.08.2021 14:11:11 Alexander
NotSolved
17.08.2021 14:38:35 Alexqander
NotSolved
Rot Benutzerdefinierte Funktion "Mittel"
17.08.2021 19:14:54 Gast22906
NotSolved
19.08.2021 10:18:57 Alexander
NotSolved
19.08.2021 22:46:16 Gast32926
NotSolved

Ansicht des Beitrags:
Von:
Gast22906
Datum:
17.08.2021 19:14:54
Views:
270
Rating: Antwort:
  Ja
Thema:
Benutzerdefinierte Funktion "Mittel"

So scheint es zu funktionieren. Ich verstehe trotzdem nicht so ganz, warum an der Stelle nicht direkt zu dem ElseIf übergegangen wird.

 Betrachten wir das mal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'Beispiel: kommt eigentlich aus der Parameterliste
Dim Argument As Excel.Range
Set Argument = Range("A1:C3")
 
Dim Zelle As Excel.Range
Dim Summe As Double
Dim Anzahl As Double
 
If IsNumeric(Argument) And Argument >= 0 Then
  Summe = Summe + Argument
  Anzahl = Anzahl + 1
   
ElseIf TypeName(Argument) = "Range" Then
   
  For Each Zelle In Argument
    If IsNumeric(Zelle.Value) And Zelle.Value >= 0 Then
      Summe = Summe + Zelle.Value
      Anzahl = Anzahl + 1
    End If
  Next
   
End If

Was passiert den in dem Fall (markierte Zeile)?

Argument ist ein Objekt, noch genauer, es ist ein Range-Objekt.


Betrachten wir das mal anders:

Frage: Was passiert wenn man folgendes schreibt?

1
2
3
4
Dim retVal As Variant
 
retVal = Range("A1")    '#1
retVal = Range("A1:C4") '#2

Im Fall #1 steht in retVal der Zelleninhalt von A1 drin.

Im Fall #2 steht in retVal ein 2D-Array (4 Zeilen, 3 Spalten) mit den jeweiligen Zelleninhalten von A1 bis C4 drin.

 

Was erwartet die Funktion IsNumeric()? Laut Dokumentation erwartet sie einen Ausdruck - ein Array ist aber kein Ausdruck; Argument >= 0 würde auch einen Fehler verursachen.

Du erinnerst dich sicher noch an eines deiner anderen Themen, wo es kurz darum ging das jemand meinte: "Wozu der Test auf Objekt, ist doch egal?"

Tja, nun sieht man wie "egal" das ist - nämlich gar nicht egal. ;o) (Ich hoffe die Trantüte von damals liest das hier.)


Entweder du löst es wie du es hast, oder du änderst die Reihenfolge:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'...
 
For Each Argument In AlleArgumente
    If NurPosZahlen = True Then
        If TypeName(Argument) = "Range" Then
            For Each Zelle In Argument
                If IsNumeric(Zelle.Value) And Zelle.Value >= 0 Then
                    Summe = Summe + Zelle.Value
                    Anzahl = Anzahl + 1
                End If
            Next
        Else
            If IsNumeric(Argument) And Argument >= 0 Then
                Summe = Summe + Argument
                Anzahl = Anzahl + 1
            End If
        End If
 
'...

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
17.08.2021 12:18:29 Alexander
NotSolved
17.08.2021 13:32:35 Gast86125
NotSolved
17.08.2021 14:11:11 Alexander
NotSolved
17.08.2021 14:38:35 Alexqander
NotSolved
Rot Benutzerdefinierte Funktion "Mittel"
17.08.2021 19:14:54 Gast22906
NotSolved
19.08.2021 10:18:57 Alexander
NotSolved
19.08.2021 22:46:16 Gast32926
NotSolved