hehe und ich dummer Junge ich habe mich für die Variante mit dem Array entschieden.
Meinen größten Angstgegner bei Autoit.
Naja kann ja sein das ich da mal was Lerne in der Richtung. ![]()
mfg
oh-ha
hehe und ich dummer Junge ich habe mich für die Variante mit dem Array entschieden.
Meinen größten Angstgegner bei Autoit.
Naja kann ja sein das ich da mal was Lerne in der Richtung. ![]()
mfg
oh-ha
hehe Danke blubbstar
Das es auch ohne Array geht hätte ich so nü nicht gedacht.
Überhaupt das es so viele Lösungsmöglichkeiten für ein und dasselbige Problem gibt.
Führen halt doch viele Wege nach Rom.
Den meinigen in dieser Sache habe ich schon gefunden.
mfg
oh-ha
XTC99
hehe da hätte ich nun doch ein kleines Verständnis Problem ![]()
Bekomme schon Fluchtgedanken vorm Rechner wenn ich nur an Arrya´s Denke.
Hoffe mal das BugFix das nicht liest. ![]()
mfg
oh-ha
Jo geht so einwandfrei
Sowohl das von ideas2code, was mir sogar besser gefällt als mein Ansatz, als auch die anderen.
Bedanke mich bei euch und setzte das mal auf gelöst.
mfg
oh-ha
moin moin,
Habe einen Pfad zu einer Datei den ich über den "FileOpenDialog" bekomme.
Dieser Pfad ist immer verschieden.
#include <Array.au3>
$message = "Um mehrere Dateien auszuwählen, ist die Strg-Taste oder die Shift-Taste zu drücken."
$var = FileOpenDialog($message, @WindowsDir & "\", "Bilder (*.jpg;*.bmp)", 1 + 4 )
$splitten = StringSplit($var,"\")
_ArrayDisplay($splitten)
Damit bekomme ich ja den Pfad gesplittet als Array und der Dateiname ist immer an letzter stelle egal wie lang der Pfad ist.
Nur wie bekomme ich das letzte Array als Variable ?
mfg
oh-ha
Habe es raus bekommen.
Verstehe zwar noch nicht warum aber zumindest geht es jetzt.
Hier mal der richtige Code:
$Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row
$Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
$Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column
$rech = $Zeilenanzahl -7
$rechnung = -99 * $rech
Func neunundneun()
For $Zeilen = $Zeilenanzahl To 7 Step -1
While 1
$wandeln2 = _ColNrToLetter($Spaltenanzahl)
If $Spaltenanzahl = 4 Then ExitLoop
$Spaltenanzahl = $Spaltenanzahl-1
If $oExcel.Application.Sum($oExcel.Cells("7", $wandeln2).Resize($Zeilenanzahl,1)) = $rechnung Then
$oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
$oExcel.Selection.Delete.Shift = -4161
EndIf
WEnd
Next
EndFunc;==>neunundneun
Func _ColNrToLetter($iColNr)
If $iColNr <= 26 Then Return Chr($iColNr+64)
$iColNr -= 26
Local $1 = 65, $2 = 90, $tmp, $diff = 1
$tmp = Mod($iColNr,26)
If $tmp Then
$2 = 64 +$tmp
$diff = 0
EndIf
$1 += Int($iColNr/26) - $diff
Return Chr($1) & Chr($2)
MsgBox(0,"$iColNr",$iColNr)
EndFunc
Haut irgendwie nicht hin wenn ich in Zeile 12 die Zelle Variabel mache.
mfg
oh-ha
Habe das von dir mal in einen Autoit code gemacht.
[autoit]#include <Excel.au3>
$sFilePath = @DesktopDir & "\muster.xls"
$oExcel = _ExcelBookOpen($sFilePath)
If $oExcel.Target.Column <> 3 Then Exit
$oExcel.Application.EnableEvents = 0 ;0 = False
If $oExcel.Target.Value = "autoit" Then $oExcel.Target.EntireRow.Delete
$oExcel.Application.EnableEvents = 1 ;1 = True
Mein Problem ist einfach das es auf mehreren Rechnern zum einsatz kommt und die da meist sehr eigen sind was Makros angeht.
mfg
oh-ha
hehe da sind wir ja schon zwei ![]()
ups,
nü haben wir uns missverstanden.
Die -4161 = xlup bei Excel
Der Tabelle wird damit mitgeteilt das sie nach oben verschieben soll.
Kannst du im Visual-Basic-Editor in Excel nachschauen wenn du die F2 klickst und da, im Objektkatalog, mal xlup eingibst in der Suche.
Dann sollte da unten stehen
Const xlUp = -4162 (&HFFFFEFBE)
So hole ich mir alle Const. in Excel um sie mit Autoit direkt anzusprechen.
mfg
oh-ha
Hallo Alina,
Erst einmal Danke für die Antwort.
Excel wird mitgeteilt wohin es verschieben musss. Ist diese Zeile im Code
$oExcel.Selection.Delete.Shift = -4161
[/autoit]
xlup = -4161
mfg
oh-ha
Moin moin,
Versuche aus einer Tabelle Zeilen zu löschen die eine bestimmte Summe haben.
$Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row ; -4162 = xlUp
$Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
$Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column
Func nullzeilenloeschen()
For $Zeilen = $Zeilenanzahl To 8 Step -1
While 1
$wandeln2 = _ColNrToLetter($Spaltenanzahl)
If $Spaltenanzahl = 4 Then ExitLoop
$Spaltenanzahl = $Spaltenanzahl-1
If $oExcel.Application.Sum($oExcel.Cells($Zeilen, $wandeln2).Resize($Zeilenanzahl,1)) = 0 Then
$oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
$oExcel.Selection.Delete.Shift = -4161
EndIf
WEnd
Next
EndFunc;==>nullzeilenloeschen
Func _ColNrToLetter($iColNr)
If $iColNr <= 26 Then Return Chr($iColNr+64)
$iColNr -= 26
Local $1 = 65, $2 = 90, $tmp, $diff = 1
$tmp = Mod($iColNr,26)
If $tmp Then
$2 = 64 +$tmp
$diff = 0
EndIf
$1 += Int($iColNr/26) - $diff
Return Chr($1) & Chr($2)
EndFunc
Das geht auch so weit.
Nur wenn ich das selbe Variabel gestalte also anstatt der festen 0 eine Variable benutze geht es nicht.
$Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row
$Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row
$Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column
$rech = $Zeilenanzahl -7
$rechnung = -99 * $rech
Func neunundneun()
For $Zeilen = $Zeilenanzahl To 7 Step -1
While 1
$wandeln2 = _ColNrToLetter($Spaltenanzahl)
If $Spaltenanzahl = 4 Then ExitLoop
$Spaltenanzahl = $Spaltenanzahl-1
If $oExcel.Application.Sum($oExcel.Cells($Zeilen, $wandeln2).Resize($Zeilenanzahl,1)) = $rechnung Then
$oExcel.Columns($wandeln2 & ":" & $wandeln2).Select
$oExcel.Selection.Delete.Shift = -4161
EndIf
WEnd
Next
EndFunc;==>neunundneun
Func _ColNrToLetter($iColNr)
If $iColNr <= 26 Then Return Chr($iColNr+64)
$iColNr -= 26
Local $1 = 65, $2 = 90, $tmp, $diff = 1
$tmp = Mod($iColNr,26)
If $tmp Then
$2 = 64 +$tmp
$diff = 0
EndIf
$1 += Int($iColNr/26) - $diff
Return Chr($1) & Chr($2)
MsgBox(0,"$iColNr",$iColNr)
EndFunc
Das Ergebnis von $rechnung ist so weit richtig in diesem Fall -11781 nur löscht er mir die zeilen halt nicht.
Kann es sein das autoit mit dem (-) Zeichen nicht klar kommt ?
Hatte es auch schon in klammern ( $rechnung ) versucht mit dem selbigen ergebnis.
mfg
oh-ha
Oh man,
ein dickes DANKE dafür und das auch noch zweifarbig. Kannst dir nicht Vorstellen wie lange ich schon darüber am Grübeln bin.
mfg
oh-ha
Sorry fürs warten,
wollte es nur komplett durchtesten bevor ich was sage.
Also bei mir geht es so nicht. Die Formatierung der Spalten geht immer noch über die Tabelle hinaus.
Kann oder könnte man nicht während der Formatierung der Spalten die länge bestimmen ?
Ist nur so ein Gedanke von mir, da ich auch nicht weiß wie man das machen könnte.
Das Ende der Tabelle bekomme ich ja, müßte das " nur " in die Schleife mit einbauen in der jede zweite Spalte blau gemacht wird.
mfg
oh-ha
Danke schon mal für die Antwort.
Das Problem ist auch das die Tabellen unterschiedlich lang sind also das Ende nicht festgelegt ist.
Und da bin ich schon wieder in meiner Denk-schleife.
Du hast mir ja mal das gegeben damit ich die Bezeichnung von letter auf Zahl und umgekehrt machen kann.
Func _LetterToColNr($sLetter)
If StringLen($sLetter) = 1 Then Return Asc(StringUpper($sLetter)) -64
Return (Asc(StringUpper(StringLeft($sLetter, 1)))-64)*26 + (Asc(StringUpper(StringRight($sLetter, 1)))-64)
EndFunc
Func _ColNrToLetter($iColNr)
If $iColNr <= 26 Then Return Chr($iColNr+64)
$iColNr -= 26
Local $1 = 65, $2 = 90, $tmp, $diff = 1
$tmp = Mod($iColNr,26)
If $tmp Then
$2 = 64 +$tmp
$diff = 0
EndIf
$1 += Int($iColNr/26) - $diff
Return Chr($1) & Chr($2)
EndFunc
Nur komme ich damit gar nicht klar.
mfg
oh-ha
Hallo,
Versuche nun schon seit Tagen es hinzubekommen das meine Tabellen richtig ausgedruckt werden.
Derzeitig sieht das so aus:
[Blockierte Grafik: http://www.imgbox.de/users/jojono/autoit/Bild1.JPG]
Habe dank BugFix es hinbekommen jede zweite Spalte blau zu hinterlegen.
[autoit]$Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row ; -4162 = xlUp
$i = 8
While $i <= $Zeilenanzahl
$oExcel.Rows($i).Interior.ColorIndex = 34
$i += 2
WEnd
Wenn ich nun die Tabelle ausdrucke werden die blauen Spalten leider über der Tabelle hinaus auch mit ausgedruckt.
Habe so einiges probiert" siehe hier " aber bekomme es einfach nicht hin.
kann man die Spalten so formatieren das sie am Ende der Tabelle aufhören ?
kann man am Ende der Tabelle alles abschneiden (löschen) ?
Komme einfach nicht weiter.
mfg
oh-ha
Habe mal das von BugFix bekommen, würde mir dabei ja schon helfen, nur komme ich damit nicht klar.
Func _LetterToColNr($sLetter)
If StringLen($sLetter) = 1 Then Return Asc(StringUpper($sLetter)) -64
Return (Asc(StringUpper(StringLeft($sLetter, 1)))-64)*26 + (Asc(StringUpper(StringRight($sLetter, 1)))-64)
EndFunc
Func _ColNrToLetter($iColNr)
If $iColNr <= 26 Then Return Chr($iColNr+64)
$iColNr -= 26
Local $1 = 65, $2 = 90, $tmp, $diff = 1
$tmp = Mod($iColNr,26)
If $tmp Then
$2 = 64 +$tmp
$diff = 0
EndIf
$1 += Int($iColNr/26) - $diff
Return Chr($1) & Chr($2)
EndFunc
mfg
oh-ha
hat keiner Idee wie man das machen könnte ?
moin moin,
Habe mal " WIEDER " ein problem mit Excel.
Möchte die Tabelle komplett auschneiden, da über die Ränder hinaus noch Rahnenlinien sind und andere Formatierungen die man sieht.
Dann die kopierte Tabelle in einen neuen Sheet wieder einfügen.
Nur bleibe ich immer an dieser Zeile hängen " $oExcel.Range($oExcel.cells($Spaltenanzahl,1)).Select " und " $oExcel.Range($oExcel.cells($Spaltenanzahl,1)).Activate "
wobei diese geht "$oExcel.Range($oExcel.cells(1,1),$oExcel.cells($Zeilenanzahl2,$Spaltenanzahl)).Select "
Der Code:
[autoit]
;Enden der Tabelle bestimmen
$Zeilenanzahl = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 1).End(-4162).Row ; -4162 = xlUp
$Zeilenanzahl2 = $oExcel.ActiveSheet.Cells($oExcel.Rows.Count, 3).End(-4162).Row ; -4162 = xlUp
$Spaltenanzahl = $oExcel.ActiveSheet.Cells(10, $oExcel.Columns.Count).End(-4159).Column ; -4159
;Tabellensheed kopieren und in neuen Sheed einfügen
$oExcel.Range($oExcel.cells($Spaltenanzahl,1)).Select ;Vormals = $oExcel.Range("AM1").Select
$oExcel.ActiveCell.FormulaR1C1 = ""
$oExcel.Range($oExcel.cells(1,1),$oExcel.cells($Zeilenanzahl2,$Spaltenanzahl)).Select ;$ Vormals = oExcel.Range("A1,1:AM47").Select
$oExcel.Range($oExcel.cells($Spaltenanzahl,1)).Activate ; Vormals = $oExcel.Range("AM1").Activate
$oExcel.Selection.Copy
$oExcel.Sheets("TestTabelle").Select
$oExcel.Sheets.Add
$oExcel.ActiveSheet.Paste
$oExcel.Sheets("TestTabelle").Select
$oExcel.application.displayalerts = false
$oExcel.ActiveWindow.SelectedSheets.Delete
$oExcel.Sheets("Tabelle1").Select
$oExcel.Sheets("Tabelle1").Name = "Zweite Testtabelle"
$oExcel.application.displayalerts = True
Wie muß ich die Zeilen ändern damit Excel damit arbeiten kann ?
mfg
oh-ha
Ok habe es nun,
Danke für die Denkanstöße ![]()
Habe da wohl so einiges verwechselt.
So geht es nun:
$sFilePath3 = @ScriptDir & "\test.xls" ; Pfad bestimmen zu der Tabelle allgemein
$oExcel = _ExcelBookOpen($sFilePath3, $fVisible = 0); Tabelle öffnen
$oExcel.ActiveSheet.Range("A7:A7" ).Select ; Makieren
$oExcel.ActiveCell.EntireRow.Insert(1) ; fügt eine Zeile hinzu
$read1 = _ExcelReadCell($oExcel, 6, 1) ; Wird die Zelle A6 eingelesen
$array = StringSplit($read1, ",", 1) ; Wird der Text der Zelle A6 gesplittet. Splitzeichen = ,
_ExcelWriteCell ($oExcel, $array[1], 6, 1) ; Array[1] in die Zelle A6 einlesen
_ExcelWriteCell ($oExcel, $array[2], 7, 1) ; Array[2] in die Zelle A7 einlesen
MsgBox(0, "$result:", $array[1]) ; Zum testen ( Array[1] wird richtig angezeigt)
MsgBox(0, "$result:", $array[2]) ; Zum testen ( Array[2] wird richtig angezeigt)
MsgBox(0, "$result:", @error) ; @error = 0
_ExcelBookSaveAs($oExcel, @ScriptDir & "\Test123.xls")
_ExcelBookClose($oExcel)
mfg
oh-ha