Office: Funktion aus AddIn startet nicht automatisch

Helfe beim Thema Funktion aus AddIn startet nicht automatisch in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Ich bin mir sogar sehr sicher, dass es daran liegt. In deiner Testmich.xlam steht z.B. For ii = 0 To (Anzahl - 1) EW_Vektor(ii) = Cells(ZeilenNr + ii,... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von hapevo, 15. Juli 2018.

  1. Funktion aus AddIn startet nicht automatisch


    Ich halte mich bei UDFs eisern an die Regel, diese frei von Zellzugriffen zu halten. Wenn die UDF Daten verarbeiten soll, dann kommen diese über die Argumente hinein (z. B. als Angabe des Bereichs).
    Und natürlich immer: Sauber referenzieren!
     
    EarlFred, 19. Juli 2018
    #16
  2. So mache ich es auch immer.
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Groetzki, 19. Juli 2018
    #17
  3. hallo zusammen, das ist der Knackpunkt: der Funktionsaufruf bezieht sich immer auf das aktive sheet, bei kompletter Neuberechnung des workbooks greifen die Funktionsaufrufe der anderen Sheets damit auf undefinierte Werte zu...#Werte!... besten Dank!!! kein "Phänomen"...
    Da ich immer größere Sätze von Daten zum Funktionsaufruf laden muss bleibt die Frage nach dem besten Weg diesen Fehler zu umgehen:
    1) kann man die Neuberechnung via "CalculateFullRebuild" (oder mit anderem Befehl) sheet-weise abarbeiten, dann stimmen die Zugriffe, oder besser
    2) innerhalb des Funktionsaufrufes das jeweilige sheet, von welchem der Funktionsaufruf aktiviert wurde, aktivieren, oder
    3)...?
    Da die Sheets untereinander auch über Funktionszugriffe voneinander abhängen, ist das ein wirklich kritischer Punkt für mich, hier "sauber" zu arbeiten. Aber da gibt es bestimmt gute Ideen?
    Habe das Testmich-Beispiel noch mal modifiziert angehängt, um das Problem offensichtlicher zu machen.
    Danke für die Hilfe!!!
     
    hapevo, 19. Juli 2018
    #18
  4. Funktion aus AddIn startet nicht automatisch

    Hallo,

    Code:
    -> wie im Beitrag #16 bereits skizziert!

    Starte die Sub "Vorbereitung" und schau Dir die Unterschiede der folgenden 3 Beispiele an:
    Code:
    Machwas1 bekommt den zu untersuchenden Bereich A1 als Argument übergeben
    Machwas2 greift auch auf A1 zu, allerdings nicht über ein Argument, sondern per Zellzugriff innerhalb der Prozedur
    Machwas3 bekommt die Zelle A1 als Argument zugewiesen, greift dann aber per Zellzugriff innerhalb der Prozedur auf A2 zu.

    Ändere jetzt mal wechselweise die Werte in A1 und A2 und beobachte die Werte, die die 3 Funktionen ausgeben.

    Um eine zuverlässige Neuberechnung anzustoßen, brauchst Du einen Bezug auf den zu überwachenden Bereich, indem Du diesen als Argument an die Funktion übergibst. Mit Übergabe des Bereichs an die Funktion ist auch geklärt, zu welcher Mappe/Tabelle der Bereich gehört. Damit ist der Bereich eindeutig referenziert und es ist egal, welche Mappe / Tabelle aktiv ist.

    Grüße
    EarlFred
     
    EarlFred, 19. Juli 2018
    #19
  5. sorry, die Sub "Vorbereitung" war nicht komplett:
    Code:
     
    EarlFred, 20. Juli 2018
    #20
  6. Hallo EarlFred, o.k., Übergabe des Range-Bereiches als Argument ist eine eindeutige Zuordnung. Da ich die Funktionsaufrufe flexibel mehrfach in verschiedene Sheets kopieren möchte, erscheint mir der Weg über Cells praktischer. Das "Beobachten" aller relevanten Werte erfolgt beim Funktionsaufruf via Zeilen(Bereich)=benötigte Anzahl der Werte im Spaltenvektor:

    =testmich(ZEILEN(D2*biggrin.gif*11);ZEILE(D2);SPALTE(D2);"test2")

    um die Zuordnung zum sheet zu realisieren, muss ich aber den sheet-Namen aber immer mit übergeben, damit das Einlesen der Werte via der testmich.xlma funktioniert:


    Function testmich(Anzahl As Integer, ZeilenNr As Integer, SpaltenNr As Integer, BlattName As String)
    .......
    'Einlesen EW-Werte aus Excel
    For ii = 0 To (Anzahl - 1)
    EW_Vektor(ii) = Worksheets(BlattName).Cells(ZeilenNr + ii, SpaltenNr).Value
    Next ii

    Die Übergabe des jeweiligen sheet-Namens ist aber unpraktisch, wenn der Funktionsaufruf immer wieder in verschiedene Sheets kopiert werden soll. Und wenn der sheet-Name geändert wird, stimmt die Zuordnung natürlich nicht mehr.
    Aber wie kann ich die Range-Bereiche mit flexiblen Zellbezügen als Argument übergeben?
     
    hapevo, 22. Juli 2018
    #21
  7. natürlich musst du praktisch erprobte Tipps nicht annehmen, das steht Dir frei. Gerade, wenn man auf die Zuverlässigkeit angewiesen ist, ist es immer besser, irgendwelche Bastelmethoden anzuwenden als eindeutige Zuordnungen. Da muss man dann auch die Eindeutigkeit der Praktikabilität unterordnen. Das verstehe ich voll und ganz.
    (vorstehender Text könnte Spuren von Ironie enthalten)

    Der Blattname ist ebenfalls nicht eindeutig (in jeder Mappe kann ein Blatt mit diesem Namen vorkommen!) und benötigt also zur Eindeutigkeit unbedingt auch die Mappe, zu der das Tabellenblatt gehört.

    Wenn Du anstelle ZEILE(D2) einfach D2 (den Bereich) übergeben würdest, hättest Du wieder einen definierten Zustand (die Bereichsinformation enthält alle Angaben über Blatt und Mappe!), die Du auch weiterverwenden könntest.

    Code:
    Die Function gibt immer den Wert aus C1 des Blattes aus, auf den rng verweist. Zur Aktualisierung des Ergebnisses siehe meine Testcodes, die Du Dir sicher angeschaut hast und deren Konsequenzen Du verinnerlicht hast.

    Um es nochmal ganz klar zu machen: Entscheide Dich für praktisch (nicht eindeutig, fehleranfällig) und etwas weniger praktisch (warum überhaupt??) und dafür sicher. Du weißt ja am besten, ob es wichtiger ist, dass das Ergebnis stimmt oder Du etwas weniger Arbeit hast (warum eigentlich??)
    Der von Dir eingeschlagene Weg ist nicht der, den ich vorschlage.
     
    EarlFred, 22. Juli 2018
    #22
  8. Funktion aus AddIn startet nicht automatisch

    Hallo EarlFred, danke für die Hinweise. Aber es scheint, hier ist etwas falsch rüber gekommen, mein Fehler. Sehe die Vorteile direkt Range-Bereiche zu benutzen, aber ich weiß nicht, wie ich innerhalb der function den übergebenen Range-Bereich auswerten kann, alles Einzelwerte raushole, Gesamtanzahl der Werte etc. Deshalb der "Bastelweg" via Cells, was anderes via Range habe ich nicht hinbekommen... Hat also nichts mit Belehrungsresistenz oder Ignoranz zu tun, sorry. Kleiner Tipp als Ansatz wäre hilfreich, bzw. wo findet man etwas zu dieser Herangehensweise? Gruß hapevo
     
    hapevo, 23. Juli 2018
    #23
  9. wenn Du einen Bereich an die Funktion übergibst, hast Du ein Range-Object. Dann stehen Dir auch alle Methoden und Eigenschaften dieses Objekts zur Verfügung:
    Code:
     
    EarlFred, 23. Juli 2018
    #24
  10. o.k., Lücke geschlossen, besten Dank! So einfach... Läuft jetzt schon alles via Range :-)

    Nachtrag: was macht folgende Zuweisung Bereich=[rng] konkret?

    function testmich(rng as range)
    dim Bereich
    Bereich=[rng]
    testmich=Bereich(1,1)
    end function

    Funktioniert auch, aber diese Zuweisung ist mir unklar und nirgends was dazu gefunden...
     
    hapevo, 23. Juli 2018
    #25
  11. die eckigen Klammern stehen als alternative Schreibweise für die Evaluate-Methode.
    Wäre gleichzusetzen mit Bereich = Evaluate(rng.Address)

    Um einen Bereich auszuwerten, ist diese Methode also nicht notwendig und zu umständlich und zu langsam.
    Verwende einfach die Methoden und Eigenschaften, die das Range-Objekt mitbringt und nicht diese Krücke (wo man sie hier nichtmal braucht), die sich lästig im Netz hält wie ein frischer, duftender Hundehaufen am Schuh.

    Nimm also stattdessen:
    Code:
     
    EarlFred, 23. Juli 2018
    #26
Thema:

Funktion aus AddIn startet nicht automatisch

Die Seite wird geladen...
  1. Funktion aus AddIn startet nicht automatisch - Similar Threads - Funktion AddIn automatisch

  2. Probleme mit bedingter Formatierung

    in Microsoft Excel Hilfe
    Probleme mit bedingter Formatierung: Hallo ihr Lieben, folgende Herausforderung: Ich möchte die Formatierung des Wertes in B7 (bzw. auch alle weiteren Werte in Spalte B) nach folgenden Bedingungen anpassen: 1. WENN C7<0,05 DANN...
  3. neue Filter Funktion

    in Microsoft Excel Hilfe
    neue Filter Funktion: Hallo zusammen, wieder habe ich für meine Nebenkostenabrechnung (privat) ein paar Änderungen gemacht. Soweit so gut Nun habe ich , für mich, die neue Filter Funktion entdeckt. Wow ist richtig...
  4. Zahlenreihe addieren

    in Microsoft Excel Hilfe
    Zahlenreihe addieren: Hallo, ich habe folgende Zahlenreihe: -5; -9; -11; 35; -2; -4; -8; 33; -3; -6; -9 Jetzt würde ich gerne mit einer Funktion nur die Zahlen von rechts nach links, ab dem letzten Eintrag -9,...
  5. DropDown Auswahl mit 2 Funktionen

    in Microsoft Excel Hilfe
    DropDown Auswahl mit 2 Funktionen: Liebes Forum-Team, ich habe eine Tabelle mit Kundendaten, die von mehreren Mitarbeitern befüllt wird. Ich möchte, dass der Mitarbeiter seinen Namen im DropDown Auswahl auswählt, Aber im...
  6. ISOKalenderwoche Powerquery

    in Microsoft Excel Hilfe
    ISOKalenderwoche Powerquery: Hallo Ich möchte in einer Powerquery Abfrage in einer benutzerdefinierten Spalte die Kalenderwoche errechnen, nur schaffe ich das leider so überhaupt nicht. Als normale Excelformel kein Problem...
  7. Bei meinem Outlook (new) fehlen wichtige Funktionen!

    in Microsoft Outlook Hilfe
    Bei meinem Outlook (new) fehlen wichtige Funktionen!: Hallo, wie der Titel bereits andeutet, habe ich Probleme mit Outlook. Zum Beispiel ist es mir nicht möglich, Add-ins zu installieren. Es gibt keinen Button dafür, und auch wenn ich über die...
  8. AddIn: Excel Funktionen

    in Microsoft Excel Hilfe
    AddIn: Excel Funktionen: Hallo Ich habe mir ein Excel Add-Inn erstellt, in welchem ich eigene Excel-Funktionen mit VBA erstellt habe. Das Add-Inn besteht somit nur aus dem VBA (-Editor) und die Funktionen befinden sich...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden