_Excel_RangeRead($oWorkbook, Default, $c & ":" & $z)
Hahaha, ich kann selbst keine Strings verketten. ![]()
_Excel_RangeRead($oWorkbook, Default, $c & ":" & $z)
Hahaha, ich kann selbst keine Strings verketten. ![]()
$c & ":" & $z
Das war doch schon völlig korrekt (wenigstens, wenn die Inhalte der Variablen stimmen). Die Funktion erwartet einen String wie etwa A1:D8 Den kannst du wie jeden String auch so bauen. Etwa:
Local $c = "A1", $z = "D8"
_Excel_RangeRead($oWorkbook, Default, $c & ":" $z)
Dein Problem im zitierten Beitrag war, dass du vergessen hast den Arbeitsblatt-Parameter anzugeben (der zweite).
das ist ja eine Steilvorlage
Erinnert mich daran: https://de.wikiquote.org/wiki/Jean-Claude_Juncker das erste Zitat
Hahaha, ![]()
Wenn du schreibst "nicht mehr (direkt) brauchbar", gibt es denn eine Möglichkeit, "indirekt" auf diese Threads zuzugreifen?
Ich hatte direkt nach der Umstellung Probleme mit einem Link. alpines hat mir da weiterhelfen können: Forenupdate - September 2017 - Probleme / Anregungen / Feedback - Sammelthread
Hallo Andy
Ich mag die Benachrichtigungen im blauen Forum auch sehr.
Aber es ist eben eine andere Forensoftware und es werden hier auch Äpfel mit Birnen verglichen. Es ist ja auch nicht so, dass es dort eine Shoutbox gäbe, deren letzten Beiträge als Benachrichtigung kämen. Hier wird die Anzahl der neuen Beiträge direkt (ohne neues Laden) neben der Glocke angezeigt. Da fehlt eigentlich nur das akkustische Signal.
Als ich hier recht frisch aktiv war, gab es ein Update, bei dem alle Anhänge erst einmal ein halbes Jahr weg waren! Seit dem letzten Update sind alle alten Links nicht mehr (direkt) brauchbar. Dass jetzt mal seit zwei Tagen die Shoutbox nervt, ist doch fast nichts. ![]()
PS: Ich hoffe, du bleibst uns noch eine ganze Weile erhalten. ![]()
Ich weiß es leider nicht.
Hallo Sonderbaar
häufig wird VeraCrypt empfohlen.
Hallo fakeraol
erst einmal muss ich eingestehen, dass ich überhaupt kein Speicherexperte bin.
Ich sehe jetzt auf den ersten Blick nicht den Grund für ein Speicherleck in diesem Ausschnitt einer der Funktionen in deinem Programm...
Allerdings lässt dieser Irrtum darauf schließen, dass noch mehr im Argen liegen könnte:
Um den Speicherverbrauch bei tagelanger Laufzeit zu reduzieren, habe ich schon alle Variablen global deklariert, so daß eigentlich nach dem Start kein weiterer Speicher mehr benötigt werden sollte.
Global und Local betreffen den Gültigkeitsbereich einer Variable. Es macht wenig Sinn Global innerhalb einer Funktion zu deklarieren. Und es bedeutet auch nicht, dass sie nur einmal erstellt werden! Wenn du die Funktion wiederholt aufrufst, werden die Variablen erneut deklariert und bestehen neben den schon deklarierten Variablen (da ist es ein Problem, dass du dich für globale Variablen entschieden hast, weil sie nicht automatisch ungültig werden, nach dem Verlassen der Funktion). Du hast hier also keine neue Zuweisung, sondern du erstellst eine zweite Variable.
Wenn du 10mal die Funktion verlässt, weil es einen Fehler bei DllCall gab und die Funktion immer wieder erneut aufgerufen würde, hättest du 11 mal $hDLL im Speicher (in dem Fall sehe ich auch kein DllClose und dass ist immer notwendig).
Aber wie geschrieben. Das ist ja nur ein Code-Ausschnitt und es kann auch ganz anders sein.
Hallo Tweaky
hmm, das kann ich nicht nachvollziehen. Eben habe ich mit dem InetGet-Beispiel Raspbian heruntergeladen. Das hat einwandfrei funktioniert. Vielleicht ist die Verbindung über die App nicht so stabil und die Browser sind da toleranter? Keine Ahnung. Vielleicht hast du einfach einen Fehler gemacht?
Ich kenne nur noch InetRead
Alternativ würde ich vorschlagen, du probierst es noch mal mit _DownloadWithProgress von Oscar. Das ist zwar auch InetGet, aber sicherlich eine einwandfreie Umsetzung mit einer sicher gerne gesehenen Statusanzeige während des Downloads größerer Dateien.
Hallo Grufti39
beschreibe mal in Worten, was in dem Skript passieren soll.
(Es ist nicht lauffähig, der Dateiname passt für mich nicht, du hast mehrere Syntaxfehler drin)
EDIT: Wobei ich dir gleich sagen muss, wenn ich den richtigen Dateinamen eintrage, scheitert das Skript nur noch an den Syntaxfehlern und nicht daran, dass $oExcelU kein Objekt sei. Du musst doch nach _Excel_BookOpen in deiner Messagebox schon einen Fehlerwert gesehen haben.
Was meinst Du damit?
Du glaubst dein Problem sei:
Das Hauptproblem ist die Meldung zur Anweisung "_Excel_RangeDelete($oWorkbook.ActiveSheet, "1")"
Dabei bricht hier nur das Skript ab, weil $oWorkbook kein Objekt ist. Das liegt daran, dass die Funktion _Excel_BookOpen nicht erfolgreich war. Water hatte einfach nur die Fehlermeldungen entfernt. Sonst hättest du immer noch die gleiche Meldung wie bei deinen ersten Versuchen mit dem Beispiel aus der Hilfe erhalten.
Es liegt nicht am Format. Ich kann die txt, die water dir in Beitrag 17 verlinkt hatte in csv umbennen und aus Excel heraus als xls oder xlsx speichern und es würde immer noch funktionieren (nach Angabe des korrekten Dateinamens im Skript). Die UDF ist auch sehr gut erprobt und gilt als absolut zuverlässig. Man geht in der Regel nur andere Wege, wenn man Dinge machen möchte, die von der UDF nicht berücksichtigt werden.
Bei dir funktioniert das aber nicht. Daher sage ich, es liegt ganz sicher an deiner speziellen Konfiguration. Irgendetwas mit deinem System, deiner Installation, deiner Art das Auszuführen, was auch immer. Ich weiß es nicht. Es ist aber kein allgemeines Problem.
Ich fürchte, hier wird kein besserer Code kommen, um dein Problem zu lösen. Ich glaube, das Problem muss auf deinem Rechner gelöst werden.
Welche Dateiendung haben diese Exceldateien?
Noch hoffe ich auf eine funktionierende Idee.
Es liegt bei dir lokal irgendein Problem vor. Da ist es schwer Lösungen zu bringen.
Die Exceldateien haben alle vertrauliche Daten. Ich werde morgen Testdateien erstellen.
Bei mir funktioniert es unter Windows 10.
Wie in Beitrag 23 geschrieben, gibt es auch alternative Herangehensweisen.
Wenn du gar kein Excel hast, oder wir an dieser Stelle nicht weiter kommen, dann ist das eigentlich auch kein Problem.
Da du csv-Dateien vorliegen hast, aus denen du bestimmte Zeilen löschen möchtest, kann man auch die ganz normalen String-Funktionen verwenden (csv-Dateien sind nämlich ganz normale Textdateien, die diesen in einem bestimmten Format organisieren).
Ich will nicht übertreiben aber mit den Stringfunktionen ist die Aufgabe wahrscheinlich tausendmal schneller in der Ausführung.
Hallo Grufti39
Aussserdem enthält der Lösungsansatz eine Text-Datei statt einer Exceltabelle.
Ich denke water konnte hier einfach keine Datei mit Endung csv anhängen. Die Datei ist aber schon im richtigen Format. Du kannst die Datei auch von test.txt in test.csv umbenennen und das dann auch im Skript ändern.
Allerdings funktioniert es bei mir einwandfrei (auch als test.txt).
_Excel_RangeDelete($oWorkbook.ActiveSheet, "2:4")
liefert zur Anweisung ".ActiveSheet" die Meldung "Variable must be of txpe Object".
Du hast das Beispiel (txt und au3) von water heruntergeladen? Sie lagen im selben Ordner, als du das Skript ausgeführt hast?
Kann es sein, dass du gar kein Office installiert hast, sondern nur den Office- oder Excel-Viewer?
Mit der Punktnotation musst du dich aktuell nicht kümmern. (Es bringt sich an dieser Stelle einfach nicht weiter..). Aber hier der Link zu MS. Links siehst du die Liste mit den Objekten https://msdn.microsoft.com/de-de/vba/exce…ns-object-excel
Hey Grufti39
Ich habe gerade dein Profil betrachtet..
Einfach klasse, dass du dich immer noch mit neuen Sachen beschäftigst. ![]()
Du bist ein tolles Vorbild. ![]()
-->> NEVER RUN A CHANGING SYSTEM ! <<--
![]()
![]()
Gerade habe ich mir das Beispiel 2 in der Hilfe noch einmal angesehen. Ist dir bewusst, dass da Inhalte aus dem dritten Arbeitsblatt gelöscht werden sollen und nicht aus dem ersten?
1:1 kopiert wird dieses Beispiel nicht mit Exceldateien funktionieren, die nicht drei Arbeitsblätter enthalten...
Sorry Grufti39
Ich kann das nicht nachvollziehen und kann dir ja auch nicht direkt über die Schulter schauen. Außerdem sehe ich deinen Code ja nicht, obwohl du der Meinung bist, nur kopiert zu haben.
Die MsgBox Zeile, die du hier immer schreibst, ist nicht der Fehler, sondern wird im Fehlerfall angezeigt. Es bringt auch nichts @error oder @extended abzuschreiben, weil wir ja nicht sehen, welche Werte sie zur Laufzeit hatten...
Nur mal so nebenbei. Warum startest du nicht ganz einfach und probierst es mal mit dem Ausführen des Beispiels direkt aus der Hilfe, bevor du daran herumspielst?
Hast du AutoIt installiert, hast du SciTE4AutoIt3 installiert? Dann klick doch einfach mal das Wort _Excel_RangeDelete im Editor an und drücke F1. In der Hilfe klickst du dann auf "Open this Script" und dann führst du es aus dem Editor mit F5 direkt aus.
Halllo Grufti39
Hast du das Beispiel von der Website kopiert? Wenn ja, passt der Pfad nicht. Normalerweise ist das so gedacht, dass du die lokale Hilfedatei öffnest und den Link "Open this Script" benutzt. Dann liegt das ausgeführte Skript in deinem AutoIt Installationsverzeichnis bei den Helpfiles.
Du kannst den Pfad anpassen. Statt @ScriptDir & "\Extras\_Excel1.xls" verwende StringTrimRight(@AutoItExe, 11) & "\Examples\Helpfile\Extras\_Excel1.xls".
Edit:
Wie unterscheidet Autoit zwischen .xls,- .xlsx- und .csv-Exceldateien?
Überhaupt nicht. Das macht Excel.
Hallo Grufti39
kein Beispiel für Zeilen zu löschen und für Range-Adressen mit Variablen gefunden.
Beispiel 1: Ich möchte die zu lesenden Zellen über Variable ansprechen, also etwa so:
_Excel_RangeRead ($oExcel, $c & ":" & $z, 1)
Naja, du weißt ja schon, wie man Strings mit Variablen und Text erstellt. Wenn hier etwas nicht klappt, liegt es entweder an den Inhalten der Variablen, die du nicht zeigst, oder an dem Fehler, dass du hier einen Punkt, statt einem Doppelpunkt verwendest.