Office VBA: Inputbox Button "Abbrechen" korrekt auswerten

Problem:
Ich habe ein Makro in Excel geschrieben und hier muss der Benutzer etwas eingeben bzw. hat mit dem ABBRECHEN-Button die Möglichkeit das Makro zu beenden. Jetzt habe ich bemerkt, dass das Abbrechen nicht funktioniert - der Code wird nicht korrekt ausgewertet und das Makro läuft weiter.

Lösung:
Eine Inputbox ist keine Msgbox und muss anders ausgewertet werden. Es gibt hier zwei Möglichkeiten:

1.) Beim Abbrechen wird der Wert "" übergeben (leer) und man kann dies auswerten.

Beispiel:
Wert = Inputbox("Bitte Namen eingeben")
If Wert = "" then 
    Msgbox "Es wurde kein Wert eingegeben oder Abbrechen geklickt"
Else
    ........
End If


Nachteil hier ist, dass man nicht zwischen Abbrechen oder leerer Eingabe unterscheiden kann.


2.) Man wertet wirklich aus, ob der Wert leer ist oder null mittels StrPtr-Funktion. Null würde ABBRECHEN entsprechen

Beispiel:
Wert = Inputbox("Bitte Namen eingeben")
If StrPtr(Wert) = 0 then 
    Msgbox "Es wurde sicher Abbrechen geklickt"
Else
    ........
End If


Vorteil hier ist, dass man klar zwischen ABBRECHEN und leerer Eingabe unterscheiden kann.

Quelle:
Bettersolutions.com: STRPTR

VBS: Dateien auf einen FTP hochladen mit VBS (FTPUpload)

Ich brauchte ein Skript um eine Datei auf einen FTP hochzuladen ohne zusätzliche Software - nur mit Boardmitteln.
Daraus ist folgendes VBS entstanden, dass genau das macht - FTPUpload:

'Objekte definieren
Set oShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Datei für Upload festlegen
path = "C:\lang.txt"

FTPUpload(path) 'Datei hochladen

'Subroutine für FTPUpload
Sub FTPUpload(path)

On Error Resume Next

Const copyType = 16

'FTP Wartezeit in ms, damit sichergestellt wird, dass Upload erfolgreich
'Abhängig von der größe der übertragenen Datei - bei mir waren es nur ein paar kB!
waitTime = 80000

FTPUser = "ftpuser"  		'FTP-Benutzername
FTPPass = "ftppassword"		'FTP-Passwort
FTPHost = "ftp.keineahnung.de"	'FTP-Hostnmae oder IP
FTPDir = "/"			'FTP-Verzeichnis - mit / abschließen (z.B. "/test/")

'String für Verbindung bauen und an Shell übergeben
strFTP = "ftp://" & FTPUser & ":" & FTPPass & "@" & FTPHost & FTPDir
Set objFTP = oShell.NameSpace(strFTP)

'Upload der Datei     
If objFSO.FileExists(path) Then

	Set objFile = objFSO.getFile(path)
	strParent = objFile.ParentFolder
	Set objFolder = oShell.NameSpace(strParent)

	Set objItem = objFolder.ParseName(objFile.Name)

	Wscript.Echo "Upload der Datei " & objItem.Name & " nach " & strFTP
 	objFTP.CopyHere objItem, copyType

End If

'Fehlerroutine, falls gewünscht - kann auch auskommentiert werden
If Err.Number <> 0 Then
Wscript.Echo "Error: " & Err.Description
End If

'Warten bis Upload fertiggestellt
Wscript.Sleep waitTime

Msgbox "FTP-Upload durchgeführt"

End Sub

Check_MK Plugin | LOCAL Check | Quotas überwachen Windows 2008 R2

Problem : Man möchte Quotas auf einem Windows 2008 R2 Fileserver überwachen.

Lösung : Ich hab hier ein kleines Skript geschrieben das diese Aufgabe als lokalen Check übernimmt. Leider steht unter Windows 2008 R2 nicht das Powershell CMDLet Get-FSRMQuotas zur Verfügung weswegen ich das über dirquota realisiert habe.

Das Skript kann hier heruntergeladen werden :local_check_quota.txt

Nach dem Download das Skript umbenennen nach local_check_quota.vbs und in den Ordner check_mk\local kopieren.

Der Output sieht dann so aus :



Der Intervall kann über die Variable geändert werden.
VarInterval = 4 ' Hour


Die Schwellwerte können direkt im Skript geändert werden.
If Verwendet <= 90 Then 'kleiner 90%
   CHKSTATUS = "0" ' ok !
End If
If Verwendet => 91 And Verwendet <= 95 Then  'zwischen 91% und 95%
   CHKSTATUS = "1" ' warning 
End If
If Verwendet => 96 And Verwendet <= 100 Then  'zwischen 96% und 100%
   CHKSTATUS = "2" ' critical
End If

Icons in Systray (Windows 7) verschwunden

Problem : Die Icons in der Systray des Windows 7 Systems machen was sie möchten. Beim darüber fahren mit der Maus verschwinden Sie oder es ist ein großer leerer Platz zwischen den Icons. Dies liegt meistens an einem fehlerhaft Iconcache. Also reparieren wir den doch einfach mal

Lösung : Wie ich in einem älteren Artikel schon geschrieben hatte "Windows-7-Update-wird-nicht-installiert-Fehler-80243004" kann man den Iconcache manuell leeren. Nun ist das hier öfter der Fall und wenn man etwas öfter als 2 mal machen muss wird ein Skript geschrieben.

Hier der Sourcecode :
Dim ObjWsh 			:	Set ObjWsh = CreateObject("WScript.Shell")
Dim RegPath 		:	RegPath = "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\"
Dim RegKey(1)
	RegKey(0) = "IconStreams"
	RegKey(1) = "PastIconsStream"
If MsgBox("Sollen die SysTray Icons gefixt werden ?",vbYesNo + vbQuestion,"Ausführen ?") = vbYes then
	For X = 0 To UBound(RegKey)
		ObjWsh.RegDelete RegPath & RegKey(X)
	Next
	MsgBox "Icons wurden gefixt bitte melden sie sich ab/an um die Änderungen zu sehen",vbOKOnly + vbInformation,"Icon Fehler behoben"
Else
	MsgBox "Skript wurde abgebrochen",vbOKOnly + vbExclamation,"Abbruch"
End If
WScript.Quit(0)


Für die etwas fauleren unter euch hier der Download Fix_Icons.txt Nach dem Download txt in vbs umbenennen und alles ist erledigt.

NICHT VERGESSEN NACH DEM AUSFÜHREN EINMAL AB UND ANMELDEN ODER DIE EXPLORER.EXE BEENDEN UND NEU STARTEN


PDFtk - PDF Formulare automatisch befüllen

Wenn man automatisiert PDF Formulare ausfüllen möchte bietet sich das PDF-Toolkit von Sid Steward an. Es ermöglicht PDF Formulare über fdf Dateien zu befüllen. PDFtk ist erhältlich für Linux und Windows und funktioniert bei beiden Systemen gleich. Zumindest hab ich noch keine Unterschiede festgestellt ;-)

Wie geht man nun vor um pdftk in einem automatischen Prozess zu integrieren ?

1.) Download von PDFTk hier https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ , bei Linux ist PDFTk meist über Repository verfügbar.

Debian
apt-get install pdftk
OpenSuse
zypper install pdftk


Man kann sich natürlich auch das aktuelle PDFTk downloaden und über die Packetverwaltung installieren.

Debian
dpkg -i /download/pdftk-XXXXX.deb
OpenSuse
rpm -i /download/pdftk-XXXXX.rpm

Windows >> PDFTK für Windows Download & Installation


2.) um nun alle Felder zu erhalten die ausgefüllt werden können ruft man PDFtk auf mit diesem Kommando auf :
pdftk FORMULAR.pdf generate_fdf output FORMULAR.fdf

man erhält nun eine Datei mit den Formular Feldern und dem Header & Footer der Datei. Das sieht dann so in der Art aus
%FDF-1.2
%âãÏÓ
1 0 obj 
<<
/FDF 
<<
/Fields [
<<
/V ()
/T (TEST_NAME)
>> 
<<
/V ()
/T (TEST_ADRESSE)
>> 
]
>>
>>
endobj 
trailer
<<
/Root 1 0 R
>>
%%EOF


3.) Die Werte kann man nun abändern und wieder mit der PDF Datei vereinen. Um das scripting zu vereinfachen habe ich hier die Werte gedreht. /T ist der Feldname /V der Inhalt (Value ?)
In meinem Fall werden die Daten aus einer Oracle Datenbank an ein vbs Skript geschickt was mir die FDF Dateien erzeugt und dann mit der PDF Datei vereint.

%FDF-1.2
%âãÏÓ
1 0 obj 
<<
/FDF 
<<
/Fields [
<< /T (TEST_NAME) /V (Ich bin ein Name im Formular)>>
<< /T (TEST_ADRESSE) /V (Muuuusterway 12,0012412 Irgendwo)>>
]
>>
>>
endobj 
trailer
<<
/Root 1 0 R
>>
%%EOF


Mit diesem Befehl kann man nun die fdf und das PDF Formular zusammenführen und unter neuen Namen abspeichern :
pdftk FORMULAR.pdf fill_form FORMULAR.fdf output FORMULAR_FERTIG.pdf


Bekanntes Problem :

Sollte ein Formular eine gewisse Intelligenz aufweisen , z.B. freischalten von Felder nach anklicken , werden diese Werte nicht sichtbar. Das Feld muss erst manuell angeklickt werden um den Eintrag sichbar zu machen.
Leider blockiert dieser Fehler ca. 10% meiner Formulare aber 90% konnte ich damit automatisch aus der Datenbank befüllen, und die Schreibfehler sind auf null gesunken ;-)

Quelle :

PDFTk download

Check_MK Plugin | LOCAL Check ! | geplante Aufgaben | scheduled Tasks

Problem : Man möchte die geplanten Tasks auf einem Windows System überwachen.

Lösung : Ich habe hier ein kleines Skript geschrieben das als lokaler Check auf einem Windows System funktioniert.

Download des Skriptes : task_watch.zip

Installation ist wie immer recht einfach , die ZIP Datei entpacken und in das check_mk\local Verzeichnis kopieren , dannach einen FULL SCAN in Check_MK ausführen.
Dannach sollte es als local Check auftauchen.

Das Ergebnis sieht dann so aus :

Alles TASK sind richtig durch gelaufen




Es gab Fehler beim TASK


“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)