MoinMoin...
ich hab ein Problem mit _Excel_RangeDelete(). Naja das eigentliche Problem liegt daran, dass beim Einfügen durch ein Array immer als letzter Eintrag #NV geschrieben wird.
Nun versuche ich diesen Eintrag wieder zu löschen mittels _Excel_RangeDelete($sExcelDatei, _Excel_RangeFind($sExcelDatei, "#NV")). Leider ohne Ergebnis.
Ich bekomme immer '0' zurück geliefert.
Kennt ihr ne Möglichkeit #NV schnell zu löschen?
Das Programm hab ich mal in einen Spoiler angehängt. (Soll mal ne Arbeitserleichterung für unsere Azubis werden)
Danke und Gruß
Ice-Tee
Spoiler anzeigen
AutoIt
; Script Start
#include <Excel.au3>
#include <ExcelConstants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <file.au3>
Global $Array[10]
Global $sExcelblock, $s, $Excelfind, $ExcelDelete
Local $oExcel = _Excel_Open()
If @error Then Exit MsgBox(0, "Fehler", "Excel Objekt kann nicht erstellt werden")
Local $aDatei, $i, $sWert, $iRandom, $q, $aPruefen[0], $iTage, $DateTime
Local $sFilePath = @ScriptDir & "\test.txt"
Local $sExcelDatei = @ScriptDir & "\Ausbildungsnachweis.xlsx"
Local $Excel = _Excel_BookOpen($oExcel, $sExcelDatei)
Local $iZeilenanfang, $iZeilenende
For $iTage = 1 To 5 ;Anzahl der Arbeitstage
;
For $i = 0 To $s ;Jeder Eintrag das Array un der Vorherigenschleife wird gelöscht
_ArrayDelete($aPruefen, $i + 1)
Next
$sWert = ""
$s = 0
$q = ""
$iRandom = ""
_FileReadToArray($sFilePath, $aDatei) ;Datei in Array einlesen
$sWert = UBound($aDatei) ;Bestimmen wie gross das Array ist
$s = Random(4, 6, 1) ;$Pruefen soll zwischen 4 und 6 Eintr�ge haben
;Zufaellig Eintraege in ein neues Array einfuegen
Do
$iRandom = Random(0, $sWert, 1) - 1
If $iRandom = -1 Then $iRandom = 0
$q = $aDatei[$iRandom]
_ArrayDelete($aPruefen, _ArraySearch($aPruefen, $q, 0, 0)) ;Loescht doppelten Eintrag
_ArrayAdd($aPruefen, $q) ;fuegt den neuen Eintrag hinzu
Until UBound($aPruefen) = $s
; Excel-Part von B6 bis B35 befüllen und dann speichern. Bestehendes Dokument als Vorlage nehemen
; und
; Datum und Zeit generieren
$DateTime = @MDAY & @MON & @YEAR & "-" & @HOUR & @MIN & @SEC
_NaechtenExcelBlockBerechen($s, $iTage)
_Excel_RangeWrite($Excel, $Excel.Activesheet, $aPruefen, $sExcelblock) ;$sExcelblock) ; der Eintrag von $aPruefen wird in die Exceltabelle geschrieben
_Excel_RangeDelete($sExcelDatei, _Excel_RangeFind($sExcelDatei, "#NV"))
; If @error Then MsgBox(0, "Error _Excel_BookSaveAs", "@error= " & @error & @CRLF & "@extended= " & @extended)
Next
_ExcelSaveAsEX($oExcel, "xlsx", @ScriptDir & "\" & $DateTime)
_Excel_BookClose($Excel)
Sleep(2000)
MsgBox(0, "Beenden", "Programm wird jetzt beendet")
_Excel_Close($oExcel, Default, True)
Func _NaechtenExcelBlockBerechen($s, $iTage)
Select
Case $iTage < 1
$iZeilenanfang = 0
$iZeilenende = 0
Case $iTage > 6
$iZeilenanfang = 0
$iZeilenende = 0
EndSelect
$iZeilenanfang = $iTage * 6
$iZeilenende = $iZeilenanfang + $s
$sExcelblock = "B" & $iZeilenanfang & ":B" & $iZeilenende
Return $sExcelblock
EndFunc ;==>_NaechtenExcelBlockBerechen
; Function Name: _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = True)
; Description: Speichert eine Exceldatei in einem bestimmten Format ab
; Parameter(s): $oExcel Ein Excelobject, wie es von _ExcelbookOpen oder _ExcelbookNew zurückgegeben wird
; $Fileformat Der Dateityp, in dem gespeichert werden soll (xlsx, xlsb, xlsm, xls, csv, txt, prn)
; $NewFilepath Speicherort und Dateiname der neuen Datei
; $Close = True Soll nach dem Speichern das Objekt geschlossen werden? (Standard = True)
; Return Value(s): Erfolg Gibt 1 zurück
; Fehler @error 1 - $oExcel ist kein Objekt
; 2 - $Fileformat ist keine bekannte Dateiendung oder Formatnummer
; Author(s): TheLuBu (LuBu@veytal.com)
; Copyright: TheLuBu (LuBu@veytal.com)
;===============================================================================
Func _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = False)
If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
Switch $Fileformat
Case 51, "xlsx", ".xlsx"
$Fileformat = 51
Case 50, "xlsb", ".xlsb"
$Fileformat = 50
Case 52, "xlsm", ".xlsm"
$Fileformat = 52
Case 6, "csv", ".csv"
$Fileformat = 6
Case -4158, "txt", ".txt"
$Fileformat = -4158
Case 36, "prn", ".prn"
$Fileformat = 36
Case 56, "xls", ".xls"
$Fileformat = 56
Case Else
Return SetError(2, 0, 0)
EndSwitch
With $oExcel
.Application.DisplayAlerts = False ; Schaltet Fehlermeldungen bei Excel aus
.ActiveWorkBook.SaveAs($NewFilepath, $Fileformat)
If $Close Then
.ActiveWorkbook.Close ; Schließt die Tabelle
.Quit ; Schließt das Workbook
EndIf
EndWith
Return 1
EndFunc ;==>_ExcelSaveAsEX
Alles anzeigen