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 ![]()
Denn wenn ihr auf WLAN-Entfernung zusammen hockt, könnt ihr eh auch Kabel nehmen. ![]()
Beiträge von BugFix
-
-
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.
[autoit]Und da die Excel schon vorher offen ist suche ich schon die ganze Zeit, wie ich die Excel-Datei anspreche, anstatt zu öffnen
ObjGet
[/autoit]
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$xls = "C:\Temp\Test.xls"; Wenn Datei geschlossen:
[/autoit] [autoit][/autoit] [autoit]
;~ Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
;~ $oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar
;~ Local $oBook = $oExcel.Workbooks.Open($xls) ; Datei öffnen; Wenn Datei bereits offen:
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $oExcel = ObjGet('', "Excel.Application") ; wir brauchen eine Referenz auf das Excelobjekt..
Local $oBook = ObjGet($xls) ; und eine auf das geöffnete WorkbookLocal $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
[/autoit] [autoit][/autoit] [autoit]
If $oExcel.WorksheetFunction.CountA($oSheet.Range("A" & $zeile & ":G" & $zeile)) = 0 Then
$oSheet.Rows($zeile & ":" & $zeile).Delete
EndIf
NextFunc _GetLastUsedRow(ByRef $oSheet, $sRange) ; in der Variante aber nur bis Spalte Z !!
[/autoit]
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
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. -
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]
[/autoit][autoit][/autoit][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$zeile = 26
[/autoit]
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)
EndIfWenn 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"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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 seinFor $zeile = $oSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row To 1 Step -1 ; -4162 = xlUp
[/autoit]
If $oExcel.WorksheetFunction.CountA($oSheet.Range("A" & $zeile & ":J" & $zeile)) = 0 Then
$oSheet.Rows($zeile & ":" & $zeile).Delete
EndIf
NextJedoch 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.
-
Nen Radio aus Brocken zusammenbauen, die man in der Hosentasche hat, bekomme ich aber auch heute noch hin
..und mit nem Apfel als Spannungsquelle. 
-
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.

-
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. -
$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. -
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.
-
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.
-
Ich würde folgendes Pattern nehmen:
[autoit]$pattern = '\<a\sclass="next_page".*href="([^"]+)'
[/autoit]und das RegEx mit Flag 3 ausführen.
-
Hier mal mein Beitrag als Fast-Mitglied der Grauen Panther

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.
-
- 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. -
Ich habe ein Funktion die mir beim Aufruf drei Lokale Arrays mit Daten befüllt.
Da meinst du wohl eher Globale Arrays

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]
[/autoit] [autoit][/autoit] [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ückFunc _MyArray($retNum, $fill=0)
[/autoit]
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]
EndFuncAber wenn es hier um große Arrays geht, ist der Hinweis auf ByRef die optimale Lösung.
-
Hallo BugFix,
hat WSUS-Offline was gebracht?Ich habe es bisher noch nicht getestet.
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.

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. -
Namensvorschlag: ovumX
Frei interpretierbar als: Das Ei des minx (ovum = Ei)

-
Oder einfach so:
[autoit]
(Die GroupEx.au3 gibt es hier)
[/autoit][autoit][/autoit][autoit]
#include <GroupEx.au3>$hGui = GUICreate('Test')
[/autoit]
$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 -
Das kann ich nicht nachvollziehen. Egal welche SciTE-Version ich auch verwende (SciTE, SciTE4AutoIt, SciTE4AutoItRU, SciTELua).
Hast du vielleicht HotKeys doppelt belegt? -
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.WSUS-Offline
Werde ich mal testen. -
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.
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.
-
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.