1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Netzwerk ohne Router erstellen

    • BugFix
    • 11. Oktober 2014 um 18:29

    Genau, wozu WLAN! Ein Switch mit der Anzahl Ports der Mitspieler, fixe IP an allen beteiligten Rechnern vergeben, Kabel einstöpseln - ferdisch!
    Ist dann wenigstens 'ne echte LAN-Party :D
    Denn wenn ihr auf WLAN-Entfernung zusammen hockt, könnt ihr eh auch Kabel nehmen. :thumbup:

  • Excel - Leere (Zwischen-) Zeilen löschen

    • BugFix
    • 10. Oktober 2014 um 10:11
    Zitat von tobius

    Wie kann ich ihm sagen, dass er ab dem Zeitpunkt alle darüberliegenden Leerzeilen löschen soll, ab dem er von hinten beginnend das erste mal in einer der Spalten A-J Inhalt findet. Also sozusagen wie dein Code, nur dass die Spalte A mit den anderen Spalten "oder" verknüpft wird?

    Dazu brauchst du eine Funktion, die für jede Spalte deines Bereiches einzeln abprüft, welches die letzte benutzte Zeile ist und den höchsten Wert verwendest du dann. Ich habe das mal in meinem Bsp. erstellt.

    Zitat von tobius

    Und da die Excel schon vorher offen ist suche ich schon die ganze Zeit, wie ich die Excel-Datei anspreche, anstatt zu öffnen

    [autoit]

    ObjGet

    [/autoit]

    ;)

    Spoiler anzeigen
    [autoit]


    $xls = "C:\Temp\Test.xls"

    [/autoit] [autoit][/autoit] [autoit]

    ; Wenn Datei geschlossen:
    ;~ Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
    ;~ $oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar
    ;~ Local $oBook = $oExcel.Workbooks.Open($xls) ; Datei öffnen

    [/autoit] [autoit][/autoit] [autoit]

    ; Wenn Datei bereits offen:
    Local $oExcel = ObjGet('', "Excel.Application") ; wir brauchen eine Referenz auf das Excelobjekt..
    Local $oBook = ObjGet($xls) ; und eine auf das geöffnete Workbook

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $oSheet = $oBook.Sheets(1) ; erstes Tabellenblatt verwenden - bei Bedarf ändern, kann auch Name sein

    [/autoit] [autoit][/autoit] [autoit]

    For $zeile = _GetLastUsedRow($oSheet, 'A:G') To 1 Step -1
    If $oExcel.WorksheetFunction.CountA($oSheet.Range("A" & $zeile & ":G" & $zeile)) = 0 Then
    $oSheet.Rows($zeile & ":" & $zeile).Delete
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetLastUsedRow(ByRef $oSheet, $sRange) ; in der Variante aber nur bis Spalte Z !!
    Local $aRange = StringSplit($sRange, ':')
    Local $iStart = Asc(StringUpper($aRange[1])) -64
    Local $iEnd = Asc(StringUpper($aRange[$aRange[0]])) -64
    Local $iLastRow = 0, $iTmp
    For $i = $iStart To $iEnd
    $iTmp = $oSheet.Cells($oSheet.Rows.Count, $i).End(-4162).Row ; -4162 = xlUp
    If $iTmp > $iLastRow Then $iLastRow = $iTmp
    Next
    Return $iLastRow
    EndFunc

    [/autoit]


    Um die entsprechenden Methoden und Properties zu finden ist meine erste Anlaufstelle Excel Object Model Reference und auch VBA Language Reference.
    Aber häufig sind die Probleme schon aufgetaucht und wurden in einem VBA-Forum gepostet. Somit ist Google-Suche mit "VBA SUCHWORT" allererste Wahl. ;)
    Der Großteil an Funktion des täglichen Gebrauchs mit Excel wurde aber in der neuen Excel-UDF von water integriert - also auch immer mal da nen Blick reinwerfen, wenn man mit den VBA-Funktionen nicht so vertraut ist.

    Achja: Für dein Thema Duplikate löschen - Google mal "vba excel duplikate löschen", den Rest schaffst du dann bestimmt selbst. ;)
    Einen Hinweis noch, wenn du dich mit VBA-Funktionen beschäftigst um diese nach AutoIt zu portieren:
    In VBA werden beim Funktionsaufruf generell nur Parameter übergeben, die nicht mit den Standardwerten belegt sind. Das kennen wir auch von AutoIt-Funktionen. Jedoch muss die AutoIt-Variante der VBA-Funktion immer alle Funktionsparameter übergeben bekommen. D.h., wenn du in einem VBA-Code eine Funktion findest musst du zuerst in der Doku nach allen Parametern und den vorbelegten Werten suchen um diese in AutoIt verwenden zu können.

  • Excel - Leere (Zwischen-) Zeilen löschen

    • BugFix
    • 8. Oktober 2014 um 20:37

    Das Prüfen auf leer solltest du keinesfalls Zelle für Zelle machen, viel zu langsam.

    Hier mal ein Bsp. wie man einen Bereich (Range) auf leer prüft:

    [autoit]


    $xls = "C:\Temp\Test.xls"
    Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
    $oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar
    Local $oBook = $oExcel.Workbooks.Open($xls) ; Datei öffnen
    Local $oSheet = $oBook.Sheets(1) ; erstes Tabellenblatt verwenden - bei Bedarf ändern, kann auch Name sein

    [/autoit][autoit][/autoit][autoit]

    $zeile = 26
    If $oExcel.WorksheetFunction.CountA($oSheet.Range("A" & $zeile & ":G" & $zeile)) = 0 Then
    ConsoleWrite('Zeile ' & $zeile & ' ist leer.' & @CRLF)
    Else
    ConsoleWrite('Zeile ' & $zeile & ' ist nicht leer.' & @CRLF)
    EndIf

    [/autoit]

    Wenn du die Zeilen löschen willst: Durchlaufe das Tabellenblatt in einer Schleife von hinten beginnend! Sonst stimmt nach dem Löschen die verwendete Zeilennummer nicht mehr. ;)

    Edit:
    Die einfachste Variante wäre also:

    Spoiler anzeigen
    [autoit]

    $xls = "C:\Temp\Test.xls"
    Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
    $oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar
    Local $oBook = $oExcel.Workbooks.Open($xls) ; Datei öffnen
    Local $oSheet = $oBook.Sheets(1) ; erstes Tabellenblatt verwenden - bei Bedarf ändern, kann auch Name sein

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $zeile = $oSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row To 1 Step -1 ; -4162 = xlUp
    If $oExcel.WorksheetFunction.CountA($oSheet.Range("A" & $zeile & ":J" & $zeile)) = 0 Then
    $oSheet.Rows($zeile & ":" & $zeile).Delete
    EndIf
    Next

    [/autoit]

    Jedoch wird hier nur das "normale" Ende des Inhalts berücksichtigt. Dazu muss die erste Spalte einen Inhalt haben um erkannt zu werden. Sollten deine Zeilen nicht immer auch in der ersten Spalte inhalte haben, würden Zeilen ohne Inhalte in A, die am Ende der Tabelle sind, ignoriert werden.

  • Elektronik, RasPI, Transistor, Widerstand

    • BugFix
    • 5. Oktober 2014 um 22:07
    Zitat von Andy

    Nen Radio aus Brocken zusammenbauen, die man in der Hosentasche hat, bekomme ich aber auch heute noch hin


    8o ..und mit nem Apfel als Spannungsquelle. :thumbup:

  • Elektronik, RasPI, Transistor, Widerstand

    • BugFix
    • 5. Oktober 2014 um 21:11

    Ja, für diesen Einsatz wirds wohl auch ohne Strombegrenzung gehen. Aber zu meiner Zeit (boah, wie sich das anhört) waren Transistoren so saumäßig teuer, dass man Ströme immer begrenzt hat, damit das jute Zeuchs nicht abfackelt. :D

  • Elektronik, RasPI, Transistor, Widerstand

    • BugFix
    • 5. Oktober 2014 um 10:05

    Das Lösungswort ist: Spannungsteilerschaltung. Die Gesamtspannung muss in den von dir gewollten Wert und dem Rest geteilt werden.
    Soll die Ausgangsspannung variabel sein nimmt man ein Potentiometer, soll sie fix sein, wie bei dir, brauchst du dafür zwei Widerstände.
    Da es sich um eine belastete Schaltung handelt, sollte der Strom aber im Steuerzweig des Transistors begrenzt werden.
    Erklärungen und Formeln dazu dindest du hier.

  • Funktion aus Dictionary aufrufen

    • BugFix
    • 4. Oktober 2014 um 21:26
    Zitat von Christoph54

    $obj("func")("world 1")


    Dies ist eine unzulässige Syntax, Dictionary(Key) muss erst ausgewertet werden, bevor der Parameter übergeben werden kann.
    Man sollte sich überlegen, wie sinnvoll diese neuerdings ständig anzutreffenden Syntax Vergewaltigungen sind. Da geht dann leider sehr schnell der Überblick verloren.

  • Link finden, der eine bestimmte class hat

    • BugFix
    • 2. Oktober 2014 um 22:03
    Zitat von rynow

    Somit hast du dann den vollständigen Link.


    Du brauchst das End-Tag-Zeichen nicht im Pattern. Über "<a" ist garantiert, dass ein Link-Tag abgefragt wird, Die class wird explizit genannt und das Ergebnis wird gecaptured. Somit ist alles, was nach dem Capture kommt nicht mehr erforderlich für den Match. ;)

  • Array in Array verändern

    • BugFix
    • 2. Oktober 2014 um 09:31

    Das gibt die AutoIt-Syntax noch nicht her. Zum Verändern von Elementen eines Array-ImArray muss dieses leider zwangsläufig in ein Tmp-Array ausgelesen werden. Zumindest ist mir bis heute kein anderes Verfahren bekannt.

  • Link finden, der eine bestimmte class hat

    • BugFix
    • 30. September 2014 um 21:43

    Ich würde folgendes Pattern nehmen:

    [autoit]

    $pattern = '\<a\sclass="next_page".*href="([^"]+)'

    [/autoit]

    und das RegEx mit Flag 3 ausführen.

  • Generation Smartphone

    • BugFix
    • 30. September 2014 um 12:02

    Hier mal mein Beitrag als Fast-Mitglied der Grauen Panther :D
    Ich beschäftige mich seit über 40 Jahren mit Computern/Programmierung. Das bedingt auch eine gewisse Technik Affinität ;). Allerdings kaufe ich mir niemals Technik, weil es "in" ist oder irgendein neues Modell herausgekommen ist. Für mich steht der Nutzen im Vordergrund.
    Auch als es schon Smartphones gab, bin ich noch lange mit meinem Nokia 6330 unterwegs gewesen. Für mich ist wichtig (berufsbedingt): Telefonieren (logisch), Faxe empfangen, eMail-Verkehr, Office-System für die Datenverwaltung (Kunden/Gerätedaten).
    Das ging im Wesentlichen schon mit dem Nokia, allerdings war gerade das Handling des Office doch recht frickelig. Auch die Darstellungsgröße war auf die Dauer etwas anstrengend. Das war letztlich auch für mich der Anlaß auf ein Smartphone umzusteigen (nebenbei war auch mein Bluetoothmodul im Nokia defekt).
    Und es ist schon ein wesentlich angenehmeres Arbeiten damit.

    Eines hat sich allerdings durchaus im Zusammenhang mit der Smartphone Nutzung verändert: Ich nutze viel intensiver als vorher die Möglichkeit Nachrichten aus dem Web zu beziehen über das Smartphone. Zeitung lese ich schon ewig nicht mehr. Seit Jahren habe ich auf allen PC entsprechende Newsreader laufen um mich gezielt mit den Nachrichten zu versorgen, die mich interessieren. Dasselbe läuft nun auch über das Smartphone. Und da ich ein "Nachrichtenjunkie" bin, ist das eine angenehme Lösung.

    Nur eines mag ich nicht: Wenn man in Gesellschaft ist, dass dann alle nur ihr Smartphone in der Hand halten und irgendwo rumsurfen.

  • Link finden, der eine bestimmte class hat

    • BugFix
    • 30. September 2014 um 11:37

    - Quellcode auslesen
    - mit Regex matchen auf gesuchten Teil des Quellcodes und den Link dabei in ein Capture packen
    Ist die Class nicht dabei, gibt es auch kein Ergebnis.

  • Mehrdimensionales Array mit Return übergeben

    • BugFix
    • 30. September 2014 um 11:21
    Zitat von AutoTim

    Ich habe ein Funktion die mir beim Aufruf drei Lokale Arrays mit Daten befüllt.

    Da meinst du wohl eher Globale Arrays ;)

    Zitat von AutoTim

    Mit einem Übergabeparameter in die Funktion wähle ich aus welches dieser drei Arrays mit Return zurückgegeben wird.
    Benötigen tue ich immer alle drei Array Inhalte, das heißt ich rufe aktuell die Funktion 3 mal hintereinander auf weil ich nicht weiß wie ich mit Return alle drei Arrays übergeben kann.


    Wenn du sowieso alle 3 Array als Return brauchst, diese immer in der Funktion befüllt werden, würde ich diese, wie bereits vorgeschlagen auch nur als lokale statische Array in der Funktion führen. Mit einem Unterschied: Nicht 3 Array zurückgeben, sondern die Funktion so gestalten, dass sie einen Füllparameter bekommt und einen Returnparameter. Letztlich bleibt die Summe des Aufwandes aber gleich, da die zurückgegebenen Array wieder selektiert werden müssen oder halt 3 Aufrufe erfolgen um diese einzeln zu erhalten.

    Spoiler anzeigen
    [autoit]


    $arA = _MyArray(0, 1) ; füllt alle 3 Arrays und gibt das erste zurück
    $arB = _MyArray(1) ; gibt das zweite Array zurück
    $arC = _MyArray(2) ; gibt das dritte Array zurück

    [/autoit] [autoit][/autoit] [autoit]

    Func _MyArray($retNum, $fill=0)
    Local Static $arData[3]
    Local $arTmp
    If $fill = 1 Then
    For $i = 0 To 2
    $arTmp = $arData[$i]
    ; Code zum Befüllen der Arrays
    $arData[$i] = $arTmp
    Next
    EndIf
    Return $arData[$retNum]
    EndFunc

    [/autoit]

    Aber wenn es hier um große Arrays geht, ist der Hinweis auf ByRef die optimale Lösung.

  • Updateproblem Windows 7

    • BugFix
    • 30. September 2014 um 10:57
    Zitat von Schumi

    Hallo BugFix,
    hat WSUS-Offline was gebracht?

    Ich habe es bisher noch nicht getestet.

    Zitat von Xorianator

    Ist der IE aktiviert

    IE ist aktiv. Das Problem ist bekannt, dass MS-Updates mit anderen Browsern häifig nicht funktionieren. Somit umgeht M$ auf diese Weise doch die freie Browserwahl und man muss den Drecks-IE immer mitinstallieren und aktuell halten. X(

    Inzwischen weiß ich wenigstens, in welchem Pfad Windows die heruntergeladenen Updatepakete speichert: "C:\Windows\SoftwareDistribution\Download"
    Den kann man dann einfach umbenennen und Windows weiß dann nicht, dass Updatepakete vorliegen, somit wird dann auch nicht bei jedem Start versucht zu installieren. Der Ordner wird von Windows neu erstellt, wenn er nicht vorhanden ist.

  • The Perseus Programming Language

    • BugFix
    • 24. September 2014 um 10:23

    Namensvorschlag: ovumX
    Frei interpretierbar als: Das Ei des minx (ovum = Ei)
    8o

  • HTML ähnliche Horizontale Linie (hr) erstellen

    • BugFix
    • 20. September 2014 um 16:19

    Oder einfach so: ;)
    (Die GroupEx.au3 gibt es hier)

    [autoit]


    #include <GroupEx.au3>

    [/autoit][autoit][/autoit][autoit]

    $hGui = GUICreate('Test')
    $tCtrl = _GuiCtrlGroup_Create($hGui, 'System (19)', 10, 10, 200, 10, -1, 0x00008B)
    _GuiCtrlGroup_Set($hGui, $tCtrl, 0x00008B, $_GROUPBORDER_TOPR)
    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $tCtrl.Text, $tCtrl.TopR
    ConsoleWrite('Klick' & @CRLF)
    EndSwitch
    WEnd

    [/autoit]
  • HotKeys in SciTE

    • BugFix
    • 19. September 2014 um 19:51

    Das kann ich nicht nachvollziehen. Egal welche SciTE-Version ich auch verwende (SciTE, SciTE4AutoIt, SciTE4AutoItRU, SciTELua).
    Hast du vielleicht HotKeys doppelt belegt?

  • Updateproblem Windows 7

    • BugFix
    • 15. September 2014 um 22:24
    Zitat von alpines

    Du solltest aber trotzdem die Updateliste im Auge behalten falls ein Sicherheitsupdate oder ähnliches rauskommt.


    Nun ja - aber ganz sicher nicht per Windows Update - sonst fängt das wieder von vorne an.

    Zitat von Schumi

    WSUS-Offline


    Werde ich mal testen.

  • Updateproblem Windows 7

    • BugFix
    • 15. September 2014 um 21:32

    So, neues von der Front:
    Ich habe mir jetzt auf dem Laptop meines Chefs (Updateinstallation wird bei jedem Neustart und beim Herunterfahren wiederholt) mal den Updateverlauf angeschaut. Alle aktuellen Updates waren fehlgeschlagen (Fehler: 80071A91)
    Das Web spuckt nicht allzuviel zu diesem Fehler aus. Am sinnvollsten erschien mir dieses hier.
    Aber letztlich hatte auch ich das Problem, dass ich die Dateien nicht löschen konnte, da noch ein Prozeß darauf zugriff (trotz deaktiviertem Update-Prozeß und abgesichertem Modus).
    Mein letzte Idee war dann: Windows im Systemreparatur-Modus starten, auf Konsole wechseln, in die Installation wechseln und dort die Schritte entsprechend wiederholen. Diesmal gabs keinen Fehler. Beim Booten versuchte der Rechner dann auch nicht Updates zu konfigurieren. Ich dachte: Heureka, ich habs! - Typischer Fall von "Denkste". Beim Herunterfahren fing das Drecksding schon wieder an mit Updatekonfiguration. 8|
    Nun habe ich als Notlösung die Dienste: "Windows Update" und "Windows Modules Installer" dauerhaft deaktiviert. Bis jetzt scheint das zu funzen. Der "Windows Modules Installer" ist augenscheinlich dafür verantwortlich die heruntergeladenen Updates zu installieren bzw. zu konfigurieren. Leider kann man nicht sagen: Nu is mal gut, auch nach dem 20.ten Konfgurieren schlägt das Update fehl. Und M$ hat solch eine Situation noch nie ins Auge gefasst. Es gibt keine Rollback-Möglichkeit für ein fehlgeschlagenes Update. Da es nicht installiert wurde, kann man es auch nicht deinstallieren. :evil:

  • Updateproblem Windows 7

    • BugFix
    • 14. September 2014 um 13:40

    Wir updaten über die Standard-Updatefunktion im Windows, also keinen extra Server zum Verteilen.
    Aber ich bin nächste Woche wieder vor Ort, da kann ich bei meinem Chef mal schauen welche Updates zuletzt aufgespielt wurden und diese ggf. killen. Am Besten die Update-Funktion ganz deaktivieren und immer erst am Patchday des Folgemonats die Updates des letzten Monats aufspielen. In einem Monat wird dann sicher bekannt sein, ob und welche Probleme das letzt Update aufgeworfen hat. ;)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™