none
UDF mit Range Argument

    Frage

  • Hallo,

    ich habe eine UDF, die ein Range als Argument erhält:

    Function MySum(r As Range) As Variant
      Dim col As Integer
      Dim row As Long
      Dim locSum As Double
      locSum = 0
      For col = 1 To r.Columns.Count
        For row = 1 To r.Rows.Count
          If IsNumeric(r.Cells.Item(row, col)) Then
            locSum = locSum + r.Cells.Item(row, col).Value
          Else
            MySum = "Text Entry"
            Exit Function
          End If
        Next row
      Next col
      MySum = locSum
    End Function

    Die Funktion arbeitet genau so, wie sie soll. Ich habe jetzt das Problem, dass das Funktionsergebnis nicht in der Zelle abgespeichert wird, wenn der Range in einem anderen Worksheet liegt.

    Erst wenn das andere Worksheet geladen ist, wird das Ergebnis angezeigt:

    Source MySum Sum
    Link to this sheet 10 10
    Link to other sheet 10 10
    Link to other workbook #WERT! 10

    Hat jemand eine Idee?

    Lothar


    Dienstag, 2. Januar 2018 11:54

Alle Antworten

  • Die Funktion arbeitet genau so, wie sie soll. Ich habe jetzt das Problem, dass das Funktionsergebnis nicht in der Zelle abgespeichert wird, wenn der Range in einem anderen Worksheet liegt.

    Hm, ich denke Du meinst andere Datei, also Workbook...

    Dann fangen wir mal beim Anfang an. Zuerst sind beide Dateien geöffent, die UDF berechnet das Ergenbis, Datei(en) speichern und alle zu.

    Wenn Du nun die Datei mit der UDF öffnest, dann sollte eine Meldung kommen:

    Wenn die Meldung nicht kommt, dann liegt das in den Einstellungen unter
    Daten\Verknüpfungen bearbeiten\Eingabeaufforderung beim Start

    Klickst Du auf "Nicht aktualisieren", dann bleibt der Wert. Ansonsten kommt der Fehler #WERT!.

    Das Verhalten ist normal, eine UDF kann nicht aus einer geschlossenen Datei lesen.

    Das geht zwar theoretisch, aber nur mit einigem Aufwand, denn die Daten musst Du zuerst über einen 2ten DDE Kanal einlesen.

    Wenn Du das wirklich willst, dann google mal nach "harlan grove's pull function". Eine vereinfachte Version gibt es hier:
    https://answers.microsoft.com/en-us/office/forum/office_2010-customize/how-do-i-use-a-variable-for-the-file-name-when/0763d750-d6cc-4f7c-9fb1-c6b0c1de78d0

    Andreas.


    Mittwoch, 3. Januar 2018 10:48
  • Danke für die Rückmeldung.

    Tatsächlich war bei meinem Excel die automatische Neuberechnung beim laden aktiviert. Damit wird der zwischengespeicherte Wert überschrieben. Wenn nun die UDF nicht ohne weiteres auf das andere (nicht geladene) Workbook zugreifen kann, gibt es als Ergebnis #WERT!.

    Noch eine kleine Rückfrage: Gibt es die Möglichkeit, dass ich diesen Fall bei der Programmierung der UDF abfangen kann und den zwischengespeicherten Wert nicht überschreibe?

    Lothar.

    Mittwoch, 3. Januar 2018 17:26
  • Gibt es die Möglichkeit, dass ich diesen Fall bei der Programmierung der UDF abfangen kann und den zwischengespeicherten Wert nicht überschreibe?

    Machst Du ja nicht, das macht die Calculation-Engine von Excel. ;-) Feiner, aber bedeutender Unterschied.

    Die UDF muss einen Wert liefern wenn Sie aufgerufen wird. Liefert sie keinen (oder es kommt zu einem RTE egal welcher Art) dann zeigt diese den Fehler #WERT! in der Zelle.

    In Deinem Fall kommt der RTE schon beim Aufruf, da die übergebene Referenz nicht geöffnet ist schlägt die Initialisierung von "r as Range" fehl.

    Andreas.

    Donnerstag, 4. Januar 2018 07:21