Hi Kanashius
das Script ist direkt darüber in #27
Const habe ich bereits raus genommen, klappt leider aber dennoch nicht.
Hi Kanashius
das Script ist direkt darüber in #27
Const habe ich bereits raus genommen, klappt leider aber dennoch nicht.
und selbst wenn ich es auf ein Minimum reduziere und auch das Speichern der HTML Seite weg lasse, bekomme ich für das Speichern des Sheets eine Speichermeldung.
Markieren("10792")
Func Markieren($ID)
$oExcel = _Excel_Open(False,False,False,False)
$sWorkbook = $Freigabe & "\" & $Gewerk & ".xlsm"
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, False, True)
$oExcel.Application.DisplayAlerts = False
$oExcel.Application.ScreenUpdating = False
;Excel speichern
;$oWorkbook.Save
;$oWorkbook.Close
$oExcel.ActiveWorkBook.Save
$oExcel.Quit
$oExcel.Application.DisplayAlerts = True
$oExcel.Application.ScreenUpdating = True
EndFunc
Alles anzeigen
Hi,
ich möchte ja "nur" ein Excel Sheet öffnen, einen Wert dort suchen, farblich hinterlegen und das Sheet als HTML Datei Speichen und das Excel speichern und schliessen. Ohne das man etwas davon sieht, alles klappt, bis auf die beiden Meldungen beim Speichern.
Hi Velted,
Ja, #19 ist aktuell das komplette Script, _Excel_Close() hatte ich schon getestet, aber ohne Erfolg. Wenn ich deinen Code in mein Script einsetzte, hängt sich Excel komplett auf.
Wodran erkenne ich denn, ob eine Excel-Instanz offen bleibt oder nicht ? Im Excel ist kein Script enthalten, das möchte ich ja alles gerne über das AUtoIT Script erledigen.
Hallo zusammen,
ich musste die beiden Variablen noch definieren, dann lief es. Jedoch bekomme ich immer noch die Speichermeldungen, eine vor der eingebauten msgbox und eine nach dieser, hmmm....
Die Update Funktion funktioniert aber schonmal aus Autoit heraus
#include <Excel.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
Global $Freigabe = "\\abc\123\"
Global $Gewerk = "xyz"
Global $xlSourceRange = 4
Global $xlHtmlStatic = 0
$oExcel = _Excel_Open(False,False,False,False)
$sWorkbook = $Freigabe & "\" & $Gewerk & ".xlsm"
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, False, True)
$aResult = _Excel_RangeFind($oWorkbook, "10830")
;consolewrite("Ergebnis: " & $aResult[0][2] & @CRLF)
$oExcel.Range($aResult[0][2]) .Interior.ColorIndex = 44 ; setze Farbe
;$oExcel.Application.Run("Update")
$oExcel.DisplayAlerts = False
$oWorkbook.PublishObjects.Add($xlSourceRange, $Freigabe & "web\" & $Gewerk & ".htm", $Gewerk, "$A$1:$U$40", $xlHtmlStatic, "", "").Publish(True)
$oWorkbook.PublishObjects.Add($xlSourceRange, $Freigabe & "web\" & $Gewerk & ".htm", $Gewerk, "$A$1:$U$40", $xlHtmlStatic, "", "").AutoRepublish = False
$oExcel.DisplayAlerts = True
msgbox(1,"","Test")
$oExcel.DisplayAlerts = False
$oWorkbook.Save
$oWorkbook.Close
$oExcel.DisplayAlerts = True
Alles anzeigen
Hi water ,
danke für deine Tipps, probiere ich gleich morgen aus, das hier verstehe ich jedoch nicht ?
ich bekomme dennoch 2 Speichermeldungen, einmal die aus dem Excel -> "Update" und einmal aus dem Autoit -> "$oWorkbook.Save"
und das ist ist "Update", welches im Excel aufgerufen wird. wollte es Ansicht lieber im AutoIT Script haben, habe ich aber noch nicht geschafft
Sub Update()
Application.DisplayAlerts = False
ThisWorkbook.PublishObjects.Add(xlSourceRange, ThisWorkbook.Path & "\web\123.htm", "Polsterei", "$A$1:$U$40", xlHtmlStatic, "", "").Publish (True)
ThisWorkbook.PublishObjects.Add(xlSourceRange, ThisWorkbook.Path & "\web\123.htm", "Polsterei", "$A$1:$U$40", xlHtmlStatic, "", "").AutoRepublish = False
Application.DisplayAlerts = True
End Sub
Hallo zusammen,
anbei das Script:
#include <Excel.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
Global $Freigabe = "\\xyz\fertigungsplanung\"
Global $Gewerk = "Gewerk123"
$oExcel = _Excel_Open(False,False,False,False)
$sWorkbook = $Freigabe & "\" & $Gewerk & ".xlsm"
$oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, False, True)
$aResult = _Excel_RangeFind($oWorkbook, "11899")
;consolewrite("Ergebnis: " & $aResult[0][2] & @CRLF)
$oExcel.Range($aResult[0][2]) .Interior.ColorIndex = 44 ; setze Farbe
$oExcel.Application.Run("Update")
$oExcel.DisplayAlerts = False
$oWorkbook.Save
$oWorkbook.Close
$oExcel.Quit
$oExcel.DisplayAlerts = True
Alles anzeigen
Hallo,
ich habe gefunden wie man das Öffnen "verstecken" kann, das klappt auch wunderbar:
$oExcel = _Excel_Open(False,False,False,False)
Aber leider habe ich nichts gefunden, wie man das Speichern Fenster abschalten kann, das wird immer wieder angezeigt ?
Hallo zusammen,
gibt es eine Möglichkeit Excel über AutoIT zu starten, ohne Excel anzuzeigen, oder auch gerne nur minimal in der Taskleiste anzuzeigen ?
Hallo,
gibt es in AutoIT eine Möglichkeit ein laufendes Script per Tastendruck, evtl. eine Funktionstaste, neu zu starten ?
da ist es:
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>
#include <WinAPIConstants.au3>
#include <WinAPIInternals.au3>
#include <WinAPISys.au3>
#include <WinAPISysInternals.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <File.au3>
#include <WinAPI.au3>
Global $Gewerk = "Polsterei"
Global $Titel = "Polsterei.htm"
Global $Titelmin = "Polsterei_min.htm"
Global $Freigabe = "\\ste01\planung\"
Global $hmod, $hHook, $hStub_KeyProc, $buffer = '', $scannerbufferflag = 0
Global $LogText =""
Global $Eingabe
Global $File[5]
; Hier den Postfix-Code von eurem Scanner eintragen.
Global $g_iPostfix = 0x0D ;Enter
; Hier den Prefix-Code von eurem Scanner eintragen.
Global $g_iPrefix = 0x71 ;F2
HotKeySet('{ESC}', '_Exit')
OnAutoItExitRegister('OnAutoItExit')
Global $hKeyProc = DllCallbackRegister('_KeyProc', 'long', 'int;wparam;lparam')
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hKeyHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hKeyProc), $hmod)
Global $hGui = GUICreate('Barcodescanner', 300, 140)
Global $idBarcode = GUICtrlCreateLabel('', 10, 10, 280, 30)
GUICtrlSetFont(-1, 16, 400, 0, 'Courier New')
Global $idInput = GUICtrlCreateInput('', 10, 50, 280, 30)
GUICtrlSetFont(-1, 16, 400, 0, 'Courier New')
GUISetState(@SW_HIDE)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
consolewrite("ende")
Exit
Func _Exit()
Exit
EndFunc
; ACHTUNG! Callback-Funktion!
; In dieser Funktion darf es keinen blockierenden Code (z.B. MsgBox, Sleep, etc.) geben!
; Hier werden direkt die virtuellen Keycodes der Tastatur ausgewertet:
; https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
Func _KeyProc($nCode, $wParam, $lParam)
Local $tKBDLLHOOK = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
Local $iKeyCode = $tKBDLLHOOK.vkCode, $iPressTime
Local Static $sBuffer = '', $bBarcodeActive = False
If $nCode >= 0 Then
If $iKeyCode = $g_iPrefix And $wParam = $WM_KEYUP Then
$bBarcodeActive = Not $bBarcodeActive
ConsoleWrite('$bBarcodeActive = ' & $bBarcodeActive & @CRLF)
$sBuffer = ''
EndIf
If $bBarcodeActive Then
Switch $wParam
Case $WM_KEYDOWN
Return 1
Case $WM_KEYUP
Switch $iKeyCode ; Keycode auswerten
Case $g_iPostfix
ConsoleWrite(StringFormat('Barcode = "%s"\r\n', $sBuffer))
_StatusSave($sBuffer)
$sBuffer = ''
$bBarcodeActive = False
ConsoleWrite('$bBarcodeActive = ' & $bBarcodeActive & @CRLF)
Return 1
Case 0x30 To 0x39, 0x41 To 0x5A ; 0 - 9, A - Z
$sBuffer &= Chr($iKeyCode)
Return 1
EndSwitch
EndSwitch
EndIf
EndIf
Return _WinAPI_CallNextHookEx($hKeyHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
; Wichtig! Beim Programmende den Hook wieder entfernen.
Func OnAutoItExit()
_WinAPI_UnhookWindowsHookEx($hKeyHook)
DllCallbackFree($hKeyProc)
EndFunc ;==>OnAutoItExit
Func _StatusSave($sBuffer)
Local $hFile
If FileExists($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log") Then
$hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Ende.log", 1)
beep(500,200)
beep(500,200)
Else
$hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log", 1)
beep(500,200)
EndIf
_FileWriteLog($hFile, $sBuffer & @CRLF)
FileClose($hFile)
EndFunc ;==>StatusSave
Alles anzeigen
Hallo Oscar ,
danke für den Tipp, das funktioniert.
Jetzt habe ich aber noch das Problem, dass er die scanns eine Zeit lang funktionieren, dabei schreibt er sowohl das Log weg, wie auch in der Console sieht man die Aktivitäten. Nach einer gewissen Zeit jedoch, einige scanvorgänge später schreibt er weder die Log noch zeigt er in der Console etwas an. Es scheint, alsob der Hook nicht mehr auf den Scanner reagiert. Vielleicht noch eine Idee was das sein könnte ?
Hallo Oscar ,
besten Dank für deine ganze Unterstützung hier, das Script passt so perfekt zu meinem Vorhaben.
Ich habe aber leider noch ein Verständnisproblem, wo setzte ich am besten den Teil rein, an dem er den vom Scanner ausgelesenen Wert weg schreibt ?
Kann ich das in der Funktion KeyProc hinzufügen ?
Ist auch nichts aufregendes:
Func StatusSave()
if fileexists($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log") Then
Local $hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Ende.log", 1)
Else
Local $hFile = FileOpen($Freigabe & "\Prod-Status\" & $Gewerk & "\" & $sBuffer & "_Start.log", 1)
EndIf
_FileWriteLog($hFile, $sBuffer& @CRLF)
FileClose($hFile)
EndFunc
Ich würde es ja auch dort platzieren, wo die Funktion KeyProc gestartet wird, jedoch finde ich die Stelle nicht.