Beiträge von P1xelfehler
-
-
-
Hallo,
mein Programm soll Zeile für Zeile eine Datei durchlaufen, und in einem anderen Format in einer anderen Datei speichern.
Aber es dauert eeeewig. Und als ich vorhin ausversehen die ganze Zeit die gleiche Zeile in die Zieldatei geschrieben habe, ging das wesentlich schneller.
Geht das irgendwie schneller?
Hier der Code:Code
Alles anzeigen#include <File.au3> $Path = "C:\Users\testdatei.xyz" $Datei = FileOpen($Path) $Zieldatei = FileOpen("C:\Documents\Projekte\fertig_testdatei.xyz",1) $Lines = _FileCountLines ($Path) $Counter = 0 While $Counter < $Lines $ZeileNow = FileReadLine($Datei,$Counter) $X = StringTrimRight($ZeileNow, 19) $Y = StringTrimLeft(StringTrimRight($ZeileNow, 8), 12) $Z = StringTrimLeft($ZeileNow, 25) FileWriteLine($Zieldatei, $X & ";" & $Y & ";" & $Z & @CRLF) $Counter = $Counter + 1 WEnd
-
Ich melde mich hier doch nochmal
Habe das jetzt erstmal so gemacht (so wird nur neu importiert, wenn noch nicht importiert wurde - Idealfall also):
C
Alles anzeigen#include <Excel.au3> #include <ExcelConstants.au3> Opt("WinTitleMatchMode", 2) Global $oExcel = _Excel_Open() Global $__goCOMErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc") HotKeySet("{ESC}","_Beenden") ;ESC-Taste zum Beenden Local $Pfad = RegRead("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ProjektExcel\Andere","Ordnerpfad") ;Ordnerpfad aus Registry auslesen $Title = WinGetTitle("Microsoft Excel") ;Titel auslesen Loeschen() Func _Beenden () Exit EndFunc Func _COMErrFunc() ;Wenn ein Fehler auftritt... Importieren() ;Importiert deshalb nur, wenn noch nicht importiert wurde, also das Löschen fehlschlägt! Exit EndFunc ;==>Template_COMErrFunc Func Loeschen() Global $oWorkbook = _Excel_BookAttach($Title,"Title") $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Neubau")) $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Neubau.bas") EndFunc Func Importieren() $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Neubau.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Renovierung.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Reparatur.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Tabelle.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Sortieren.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmAnfangsdialog.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmSortierenFehler.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmTabellenAendern.frm") EndFunc
Dass nur ein Fehler beim Löschen abgefangen wird, ist sehr gut. Jetzt möchte ich aber eine Fehlermeldung haben, wenn Excel nicht geöffnet ist, das Skript aber gestartet wurde. Wie mache ich das?
-
-
Hallo,
irgendwie stehe ich auf dem Schlauch... Das hier müsste doch das Skript beenden, wenn schon eines läuft oder? Aber es funktioniert nicht.
CodeIf ProcessExists("Hilfsskript.exe") = 1 Then ;Beenden, falls schon ein Hilfsskript läuft! MsgBox(0,"","HALLO!") Exit EndIf
Und ja, ich compiliere erst und starte die .exe. Das Programm steht auch als "Hilfsskript.exe" im Task Manager...
Danke im Voraus
-
Habs rausgefunden!!!!
Man muss es so machen, dann gehts:
Hier nochmal der komplette Code (bisschen aufgeräumter):
C
Alles anzeigen#include <Excel.au3> #include <ExcelConstants.au3> Opt("WinTitleMatchMode", 2) Global $oExcel = _Excel_Open() Global $__goCOMErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc") HotKeySet("{ESC}","_Beenden") ;ESC-Taste zum Beenden Local $Pfad = RegRead("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ProjektExcel\Andere","Ordnerpfad") ;Ordnerpfad aus Registry auslesen $Title = WinGetTitle("Microsoft Excel") ;Titel auslesen Loeschen() Importieren() Func _Beenden () Exit EndFunc Func _COMErrFunc() ;Wenn ein Fehler auftritt... ;...nichts tun und mit Code fortfahren! EndFunc ;==>Template_COMErrFunc Func Loeschen() Global $oWorkbook = _Excel_BookAttach($Title,"Title") $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Neubau")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Renovierung")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Reparatur")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Tabelle")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Sortieren")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmAnfangsdialog")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmSortierenFehler")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmTabellenAendern")) EndFunc Func Importieren() $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Neubau.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Renovierung.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Reparatur.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Tabelle.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Sortieren.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmAnfangsdialog.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmSortierenFehler.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmTabellenAendern.frm") EndFunc
-
Hm... Es funktioniert weiterhin nur bei der ungespeicherten Mappe1.
Code:
C
Alles anzeigen#include <Excel.au3> #include <ExcelConstants.au3> Opt("WinTitleMatchMode", 2) Global $oExcel = _Excel_Open() Global $__goCOMErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc") Func _COMErrFunc() ;Wenn ein Fehler auftritt... ;...nichts tun und mit Code fortfahren! $a = 1 EndFunc ;==>Template_COMErrFunc ;Ordnerpfad aus Registry auslesen Local $Pfad = RegRead("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ProjektExcel\Andere","Ordnerpfad") $a = 0 ;Titel auslesen $Title = WinGetTitle("Microsoft Excel") $Title = StringTrimLeft($Title,18) Global $oWorkbook = _Excel_BookAttach($Title) Loeschen() If $a = 1 Then $Title = StringTrimRight($Title,5) Global $oWorkbook = _Excel_BookAttach($Title) Loeschen() EndIf Importieren() Func Loeschen() $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Neubau")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Renovierung")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Reparatur")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Tabelle")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("mdl_Sortieren")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmAnfangsdialog")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmSortierenFehler")) $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("FrmTabellenAendern")) EndFunc Func Importieren() $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Neubau.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Renovierung.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Reparatur.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Tabelle.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\mdl_Sortieren.bas") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmAnfangsdialog.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmSortierenFehler.frm") $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import ($Pfad & "\Module\FrmTabellenAendern.frm") EndFunc
Gibt es hier eigentlich "nur" water im forum?^^
-
Nicht ganz:
Wenn ich die Datei nicht gespeichert habe, geht es, da im Titel nur z.B. "Mappe1" steht
Wenn ich allerdings eine gespeicherte Datei öffne, geht es nicht mehr, da im Titel "Mappe1.xlsx" steht. Rechts die Endung abschneiden hat seltsamerweise auch nichts gebracht. Ich prüfe morgen mal, ob es am Leerzeichen im Dateinamen liegt. Heute ist erstmal Feierabend
-
Du bist ein Gott!
Danke, funktioniert jetzt so wie ich es will!
-
"C:\Users\peter\Documents\AutoIT\test 5.au3" (18) : ==> The requested action with this object has failed.:
$oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("Modul1"))
$oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject^ ERROR
>Exit code: 1 Time: 0.3428Also, dass er das Modul nicht findet im Grunde.
-
So? Der Fehler kommt jedenfalls noch immer.
Code
Alles anzeigenGlobal $__goCOMErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc") ;Löschen des Moduls $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("Modul1")) MsgBox(0,"","Das Modul wurde gelöscht.") Func Template_COMErrFunc() ; Do nothing special, just check @error after suspect functions. EndFunc ;==>Template_COMErrFunc
-
-
Ohne Abragen gibt es doch auch einen Fehler? Wie soll man den denn nicht abragen?^^
Code
Alles anzeigen#include <Excel.au3> Opt("WinTitleMatchMode", 2) Global $oExcel = _Excel_Open() $Title = WinGetTitle("Microsoft Excel") $Title = StringTrimLeft($Title,18) Global $oWorkbook = _Excel_BookAttach($Title) ;Import ;$oExcel.Application.VBE.ActiveVBProject.VBComponents.Import(@MyDocumentsDir & "\Modul1.bas") ;MsgBox(0,"","Ist es jetzt importiert??") ;Löschen des Moduls $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("Modul1")) MsgBox(0,"","Ist das Modul jetzt wieder gelöscht?")
-
hm...
Kann ich auch machen, dass AutoIT die Fehler ignoriert? Sprich: Wenn das Modul noch nicht importiert ist, kann er es nicht löschen. Diesen Fehler soll er ignorieren.
Das ganze dient dazu, dass wenn das Modul doppelt ist, es nicht gestartet werden kann. Also soll es vorher gelöscht werden.
-
Lol, hab es hingekriegt
Code
Alles anzeigen#include <Excel.au3> Opt("WinTitleMatchMode", 2) Global $oExcel = _Excel_Open() $Title = WinGetTitle("Microsoft Excel") $Title = StringTrimLeft($Title,18) Global $oWorkbook = _Excel_BookAttach($Title) ;Import $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import(@MyDocumentsDir & "\Modul1.bas") MsgBox(0,"","Ist es jetzt importiert??") ;Umbenennung des Moduls (hab nicht genau verstanden, warum man das vorher machen muss $oWorkbook.VBProject.VBComponents("Modul1").Name = "Test99" ;??? Er schreibt den Fehler in die Konsole, aber wie sehe ich das?? ConsoleWrite(@error & @CRLF) ;Löschen des Moduls $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("Test99")) ;??? Er schreibt den Fehler in die Konsole, aber wie sehe ich das?? ConsoleWrite(@error & @CRLF) MsgBox(0,"","Ist das Modul jetzt wieder gelöscht?")
-
Code
Alles anzeigen#include <Excel.au3> Global $oExcel = _Excel_Open() Global $oWorkbook = _Excel_BookAttach("Excel") ;Import $oExcel.Application.VBE.ActiveVBProject.VBComponents.Import(@MyDocumentsDir & "\Modul1.bas") MsgBox(0,"","Ist es jetzt importiert??") ;Umbenennung des Moduls (hab nicht genau verstanden, warum man das vorher machen muss $oWorkbook.VBProject.VBComponents("Modul1").Name = "Test99" ;??? Er schreibt den Fehler in die Konsole, aber wie sehe ich das?? ConsoleWrite(@error & @CRLF) ;Löschen des Moduls $oWorkbook.VBProject.VBComponents.Remove($oWorkbook.VBProject.VBComponents("Test99")) ;??? Er schreibt den Fehler in die Konsole, aber wie sehe ich das?? ConsoleWrite(@error & @CRLF) MsgBox(0,"","Ist das Modul jetzt wieder gelöscht?")
Importieren klappt schon mal. Beim Umbenennen (Zeile 9) kommt dann der Fehler:
"C:\Users\peter\Documents\AutoIT\test 5.au3" (9) : ==> Variable must be of type "Object".:
$oWorkbook.VBProject.VBComponents("Modul1").Name = "Test99"
$oWorkbook^ ERROR
>Exit code: 1 Time: 7.388Ach ja, und danke bis hier her schon mal für deine Hilfe
Was will dieses "_Excel_BookAttach" denn als Wert haben? Den Namen des Workbooks? Also wie die Excel-Datei heißt? kann man das aus dem Fenstertitel auslesen und da einfügen?
-
Hab halt alles mögliche probiert und es geht einfach nicht. Kannst du mal ein bisschen rumprobieren, bitte, bis es klappt?
Bin halt immer noch ein AutoIT Noob
-
Irgendwie bekomme ich es nicht hin
-
Dann gibt es ein kleines Problem: Der Pfad ist immer ein anderer, also will ich die geöffnete Datei nehmen ... sorry^^
Wenn nichts hilft, könnte man ja den Namen des Fensters auslesen und von da den Dateinamen ableiten.