Excel UDF

  • Hi an alle,


    kurze Frage zur Excel UDF...ich öffne eine Excel Datei, um Daten in einer Variablen zu speichern. Das klappt auch soweit, aber das sauber schließen haut nicht hin, d.h. ich bekomme immer "Alerts" aus der Excel Marke "Es befindet sich schon eine Datei am Speicherort mit selben Namen" oder "soll die Datei ersetzt werden?" (wenn ich das Speichern force)...


    liegt es daran, dass es eine xlsm ist? Damit gab es in der Vergangenheit ja Probleme....danke euch im Voraus



    Lieben Gruß Thomas


  • Tipp1: Auch wenn es wohl nur ein Workbook-Passwort ist, solltest du es hier nicht mit veröffentlichen.

    Tipp2: Die Fehlermeldung sagt doch schon alles. Bevor du die Datei schließt solltest du eine der folgenden Funktionen nutzen:

    Denn aktuell änderst du nur etwas, ohne den Speicherbefehl auszuführen. Dann ist klar das du solch eine Fehlermeldung bekommst.


    Sorry, hab nicht gesehen, das du nur die Daten einlesen willst. Dann würde ich an deiner Stelle folgendes probieren:

    Tipp 3: Ich hoffe, dass dies alles in einer Funktion steht, ansonsten sind alle deine Variablen Global, auch wenn du sie als Local definiert hast!

  • hey Moombas,


    das Passwort war extra Forumtauglich gewählt ;)


    danke für deine Tips, ich werde es direkt gleich testen und melde mich dann!


    Liebe Gruß Thomas

  • Hmm, müsste man sich noch einmal anschauen.

    Mich macht aber nun stutzig, das du in deinem Screenshot einen Teil des Dateinamens unkenntlich machst.

    Zusätzlich assoziiert der Name "SkillDB" das du hier Spielautomation versuchst, was laut Forenregeln verboten ist. Bitte daher um Erklärung bevor ich weiter helfe.

  • Also, dass was ich geschwärzt habe, ist der Name meiner Abteilung. Anhand des Namens könnte man herausfinden, in welchem Unternehmen ich tätig bin. SkillDB heißt einfach, dass es eine Excel Tabelle (als Quelle eine Datenbank) ist, in der die Mitarbeiter meiner Abteilung mit ihren verschiedenen "Rängen" und Fähigkeiten gelistet ist. Das ganze wird für ein Freistellungsantragtool, sprich mein Autoit Script soll den @Username in der liste finden, dann gucken, in welcher Schicht er ist und daraus dann erkennen, welches die Schcihtleiter sind, damit diese die Abwesenheitsantrag per Mail bekommen.


    Hoffe, das ganze wird so klar. Für Spielautomaten bin ich zu alt ^^


    Lieben Gruß Thomas

  • Hmm, das akzeptiere ich jetzt mal :P

    Also ein Test bei mir war erfolgreich (habe jedoch "nur" eine normale xlsx als xlsm gespeichert und dann getestet), teste das ganze mal mit einer anderen Datei.

    Ich gehe davon aus das die in der Datei hinterlegten Makros diese verändern.

    Sollte dich dies nicht stören dann solltest du folgenden Befehl vor dem schließen mit einbauen: _Excel_BookSave()


    Aber eigentlich sind alle Hebel gesetzt es nicht zu speichern und trotzdem zu schließen...bei mir klappt das im manuellen Test (nach dem öffnen warte ich 5sekunden im Program in der ich die Datei bearbeite).


    Versuch sonst auch ma: _Excel_Open($bVisible, True, True, False)

    Damit schaltetst du interaktiv aus, ich habe beim probieren festgestellt, das er das Workbook nicht schließt wenn ich es manuell geändert habe.

  • Hey Moombas, ja dem ist so


    das Makro in der Excel zieht sich jedes mal die neuen Daten aus der DB...von mir aus kann es auch gespeichert werden sprich ich baue den


    _Excel_BookSave()


    mal vor dem close mit ein und teste es


    Liebe Gruß Thomas

  • Ok, ich habe ggf. die Lösung für dein Problem, erklären kann ich es nicht direkt:

    Vor dem Schließen des Excelblatts, ein "Enter" oder "ESC" senden:

    Warum: Durch irgendwelche Makros ist das Sheet im "Bearbeitungsmodus" und wird daher nicht geschlossen (soweit bei mir im Test). Durch das Senden von Enter wird der Bearbeitungsmodus abgeschlossen (oder durch ESC abgebrochen) und ermöglicht das schließen.


    Aber wie gesagt ich bekomme niemals die Nachfrage zum Speichern der Änderungen.

  • Ich bin mir nicht sicher ob Excel mit "Links" auch die Links zu den Datenbanken einbezieht.

    Wenn ja versuch mal das hier:

    AutoIt
    Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, $bReadOnly, $bVisible, $sPassword, 0)

    Die 0 am Ende verhindert das Updaten der Links und somit sollte die Datei als "nicht bearbeitet" stehen bleiben und somit auch nicht zum Speichern auffordern..