VBA: Zwischenablage löschen - Beim schließen melde Excel "Bild zu groß..."

Problem:
Beim schließen von Excel mittels Makro bekommt man den Hinweis: "Bild zu groß, kann nicht abgeschnitten werden".
Das Problem ist die Zwischenablage, die noch "voll" ist.
Man möchte nun mittels VBA-Makro die Zwischenablage löschen

Lösung:
Folgendes Makro in den Bereich "Arbeitsmappe" kopieren

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ClearClipboard
end sub

Public Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub


Unter "Dekleration" im Modul:
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd As Long)
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard& Lib "user32" ()


Quelle: microoft answers: MS Excel 2007 error message - The picture is too large and will be truncated__Not a 'picture' - it's text in MS Excel 2007 that's being copied

Bilder auf Fileserver über VBS mit ImageMagick automatisch verkleinern

Problem :

Welcher Admin kennst das nicht , die Benutzer machen Bilder mit einer 12 MP Kamera und legen die Bilder auch in dieser Auflösung auf dem Fileserver ab. Sicherlich ist das in dem einen oder anderen Fall sinnvoll , jedoch nicht immer. In meinem Fall ist es nicht nötig die Bilder in der höchsten Auflösung zu speichern da diese weder ausgedruckt noch weiterverarbeitet werden. Um die Dateigröße von Anfang an auf ein erträgliches Maß zu reduzieren habe ich dieses Skript erstellt. Es verwendet Imagemagick und benötigt eine Installation auf dem Rechner auf dem das Skript laufen soll.
Dieses Skript läuft bei mir einmal in der Woche um alle Bilder im Ordner und allen Unterordnern zu verkleinern. Es wird ein rekursiver Dateidurchlauf auf die definierte Erweiterung ausgeführt

Dieses Skript stellt folgende Parameter bereit

------------------------------------------------------------------------------------------
-q: = Quelle zum Startordner
-e: = Welche Datei Typen sollen konvertiert werden
-s: = Auflösung der Konvertierten Bilder
-j: = Qualität für die Output Bilder (JPG 1-100 , PNG 1-9)
-l: = Schreibt ein Logfile mit an den angegeben Ort
wenn kein Wert übergeben wird , wird kein Logfile erzeugt
------------------------------------------------------------------------------------------


Download :

ImageMagick
konvPic.vbs

Erklärung :

Um über ImageMagick zu konvertieren muss folgendes Object instanziert werden.
Dim ObjImg  : Set ObjImg = CreateObject("ImageMagickObject.MagickImage.1")


Dies kann dann so angesprochen werden.
ObjImg.Convert QUELLDATEI , "-resize" , AUFLÖSUNG , "-format" , "jpg" , "-quality" , QUALITÄT , ZIELDATEI

man kann auch anstelle von ObjImg.Convert die Funktion ObjImg.Mogrify verwenden. Der Unterschied zwischen .Convert und .Mogrify liegt darin das .Convert eine neue Datei anlegt und .Mogrify die vorhandene überschreibt.

Sollte ein Fehler auftreten das das ActiveX Element nicht erstellt werden kann liegt das daran das entweder die falsche Imagemagick Version installiert ist oder das Skript über den Pfad C:\Windows\SysWOW64\cscript.exe gestartet werden muss.

Batch: Abfrage ob Benutzer in AD-Gruppe bzw. gruppenspezifische Aufrufe

Problem:
Wer kennt das Problem nicht, man möchte enweder prüfen ob ein Benutzerin einer AD-Gruppe ist oder man möchte Gruppenabhängige Skripte schreiben um bestimmten Benutzer in bestimmten Gruppen bestimmte Abläufe zuzuordnen. Dabei soll auch keine Fremdsoftware zum Einsatz kommen und unter Win XP/Vista/7/2003/2008 (R2) laufen

Lösung:
Ich habe das ganze mit dem "net user"- und dem "find"-Befehl verwirklicht, da diese Befehle als Bordmittel vorhanden sind.
Folgendes Skript prüft, ob der Benutzer in der Gruppe "Mobil" ist und entsprechend wird eine Ausgabe gemacht.
Es ist genauso denkbar, dass man anstatt des "echo"-Befehls eine Anwendung startet oder einen anderen Befehl auszuführen.
@echo off
net user %username% /DOMAIN |find "Mobil"
if not errorlevel = 1 (GOTO MOBIL)

:DEFAULT
echo Benutze ist NICHT in der Gruppe Mobil
goto ENDE

:MOBIL
echo Benutzer ist in der Gruppe Mobil

:ENDE
Kategorien: Batch
Tags für diesen Artikel:

VBS / WSH Funktion um Array zu füllen

Problem :
Man möchte ein Array erstellen und das mehrmals im Skript mit einer ReDim Anweisung

Lösung :
Um den ganzen Code nicht immer in die Länge zu ziehen hier eine Funktion

Aufruf :
Davor muss ein Array definiert sein dann kann man die Funktion mit einer Textdatei als Parameter starten.
Die Textdatei wird dann zeilenweise eingelesen und das Array wird erstellt.

Dim TestArray : TestArray = Array()
TestArray = FillArray(Beispieldatei)


Funktion :

Function FillArray(CFG)
Dim ARRCnt : ARRCnt = 0
Dim ARR	   : ARR = Array()
If ObjFso.FileExists(CFG) Then
Set Dummy = ObjFso.OpenTextFile(CFG)
Do Until Dummy.AtEndOfStream
Zeile = Trim(Dummy.ReadLine)
If Not Left(Zeile,1) = "#" Then
ReDim Preserve ARR(UBound(ARR)+1)
ARR(ARRCnt) = Zeile
ARRCnt = ARRCnt + 1
End If
Loop
End If
FillArray = ARR
Set Dummy = Nothing
Erase ARR
End Function

BATCH: Freien Laufwerksbuchstaben finden

Problem:
Ich wollte per Bacth-Skript den nächsten freien Laufwerksbuchstaben ermitteln.

Lösung:
In den c't FAQs habe ich einen interessanten Artikel und ein Batch-Skript gefunden, dass genau diese Aufgabe löst:

@echo off %debug%
if not "%OS%"=="Windows_NT" exit /b
setlocalset ll=V T R Q P O N M K J I W X Y Z L U S H G F E D
for %%l in (%ll%) do (
 set LW=%%l
 mountvol %%l: /L >nul
 if errorlevel 1 (
 subst | findstr /B "%%l:" > nul
 if errorlevel 1 (
 net use %%l: >nul 2>&1
 if errorlevel 1 goto gotone
 )
 )
)
echo Kein Laufwerksbuchstabe frei
exit /b
:gotoneecho %LW% ist ein freier Laufwerksbuchstabe


Der Laufwerksbuchstabe steht dann in der Variable %LW% zur weiteren Verarbeitung zur Verfügung.

Quelle: c't Hotline & FAQ: Freien Laufwerksbuchstaben finden
Kategorien: Batch
Tags für diesen Artikel:

Windows XP / 7 - VpnApp

Es gibt immer wieder Benutzer die nicht verstehen das Sie erst in VPN eingewählt sein müssen um Anwendungen aus dem Firmennetz zu starten. Um dieses Problem etwas zu mildern hab ich ein kleines Programm geschrieben das es den Benutzer noch einfacher machen soll.

Zur Benutzung des Programmes gibts nicht viel zu sagen , es wird überprüft ob eine IP oder ein Hostname erreichbar ist , ist dies nicht der Fall wird der VPN Client gestartet. Nach dem erfolgreichen Einwählen wird die Anwendung aus dem internen Netz gestartet.

Die Konfigurationsdatei enthällt folgende Parameter :


Server="IP ODER HOSTNAME"
VpnClient="PFAD ZUM VPN CLIENT"
AppToStart="ANWENDUNG DIE GESTARTET WERDEN SOLL"
CntPi=1
MaxTry=3


CntPi=1

Count Ping wie oft soll der Server gepingt werden um eine Verbindung zu diesem zu überprüfen , default ist hier 1 bei schlechten Verbindungen kann dieser Wert erhöht werden. Allerdings wird dann auch mehr Zeit benötigt

MaxTry=3
Wie oft soll die Schleife durchlaufen werden bevor die Meldung ausgegeben wird das keine Verbindung aufgebaut werden kann.

Download VpnApp.exe
Source Code VpnApp.exe

Das Icon wurde von Sergio Sánchez López entwickelt
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)