====== WORD + EXCEL ======
Der Zugriff per Skript auf WORD und EXCEL ist recht einfach. Man muss nur jeweils einer Variablen das entsprechende Objekt zuweisen, z.B. mit\\
* Set word = CreateObject("Word.Application") bzw.
* Set excel = CreateObject("Excel.Application")
\\ Bezogen auf das Objekt kann man dann VBA-Befehle anwenden, am besten mit\\ \\ With //Objekt//\\ //Anweisung//\\ End With\\ \\ **VBS-Beispiel: Übertragung von Bilddaten zu einem WORD-Dokument**\\ Voraussetzung ist, dass WORD installiert ist.\\
Option Explicit
Dim Eintrag
if FF_GetImageCount > 0 then
call Bilddaten
call WordDokument
else
msgbox "Es wurden keine Bilder ausgewählt!",vbExclamation,"Abbruch"
end if
'---------------------------------------------------------------------------------------------
Sub WordDokument
Dim word
set word = CreateObject("Word.Application") 'Word-Objekt
'Word-Aufruf
with word
.Documents.Add 'Standardvorlage öffnen
.Selection.TypeText Eintrag 'Texteintrag in Word
.visible = true 'Dokument sichtbar machen
end with
Set word = Nothing 'Wordobjekt frei geben
End Sub
'---------------------------------------------------------------------------------------------
Sub Bilddaten
Dim n,p
Eintrag = "Pfad " & FF_GetImagePath() & vbNewLine & vbNewLine
for n = 0 to FF_GetImageCount -1
FF_LoadImage(FF_GetImageName(n))
p = InStrRev(FF_GetImageName(n),"\")
Eintrag = Eintrag & "Bild " & mid(FF_GetImageName(n),p+1)
if FF_HasExif() then
Eintrag = Eintrag & vbNewLine & "Kamera " & FF_GetExifTag("Model")
Eintrag = Eintrag & vbNewLine & "Aufnahme vom " & FF_GetExifTag("DateTimeOriginal")
Eintrag = Eintrag & vbNewLine & "Belichtung " & FF_GetExifTagAdvanced("ExposureTime") & " sec. "
Eintrag = Eintrag & "mit Blende " & FF_GetExifTagAdvanced("FNumber")
Eintrag = Eintrag & vbNewLine & "Brennweite " & FF_GetExifTagAdvanced("FocalLength") & " mm"
Eintrag = Eintrag & vbNewLine & "ISO " & FF_GetExifTag("ISOSpeedRatings")
if FF_GetExifTag("Flash") mod 2 = 0 then
Eintrag = Eintrag & " ohne Blitz"
else
Eintrag = Eintrag & " mit Blitz"
end if
else
Eintrag = Eintrag & vbNewLine & "Keine Kameradaten!"
end if
Eintrag = Eintrag & vbNewLine & vbNewLine
next
End Sub
'---------------------------------------------------------------------------------------------
Nach Zusammenfassung der Bilddaten in der Variable Eintrag wird mit Documents.Add die Standardformatvorlage geöffnet und dort mit Selection.TypeText der Inhalt der Variablen eingetragen.\\ Will man jetzt beispielsweise Schriftart und Größe ändern und soll außerdem der Cursor am Dokumentenanfang stehen, ist das und anderes mit den entsprechenden VBA-Befehlen leicht realisierbar. Wenn man die VBA-Befehle nicht kennt, hilft der eingebaute Makrorekorder.\\
* Anklicken von "Makro aufzeichnen"
* Strg + A betätigen zur Markierung des gesamten Dokuments
* Schriftart und Größe wählen, hier "Arial" und "10"
* Strg + Pos1 betätigen um den Cursor auf den Dokumentenanfang zu stellen
* Anklicken von "Aufzeichnung beenden"
Wählt man dann unter "Makros" das erstellte Makro mit "Bearbeiten" aus, wird die verwendeten VBA-Befehle mit ihren Variablen und Konstanten angezeigt:
Sub Makro1()
' Makro1 Makro
Selection.WholeStory
Selection.Font.Name = "Arial"
Selection.Font.Size = 10
Selection.HomeKey Unit:=wdStory
End Sub
Eine hier verwendete Konstante ist wdStory, die im Skript definiert werden muss. Um den Wert zu ermitteln, startet man das Makro im Einzelschritt mit F8. Wenn man jetzt den Cursor über wdStory verweilen lässt, wird der Wert 6 angezeigt. Man muss also definieren const wdStory = 6 und für Unit:=wdStory nur noch die Konstante einsetzen. Außerdem muss den VBA-Befehlen zur Anbindung an das Objekt jeweils ein Punkt vorangestellt werden.\\ Das sieht dann für die Routine **WordDokument** wie folgt aus:
Sub WordDokument
Dim word
set word = CreateObject("Word.Application") 'Word-Objekt
'Word-Aufruf
with word
.Documents.Add 'Standardvorlage öffnen
.Selection.TypeText Eintrag 'Texteintrag in Word
'### Makroanfang
const wdStory = 6
.Selection.WholeStory
.Selection.Font.Name = "Arial"
.Selection.Font.Size = 10
.Selection.HomeKey wdStory
'### Makroende
.visible = true 'Dokument sichtbar machen
end with
Set word = Nothing 'Wordobjekt frei geben
End Sub
**VBS-Beispiel: Übertragung von Bilddaten zu einem EXCEL-Tabellenblatt**\\ Voraussetzung ist, dass EXCEL installiert ist.\\
Option Explicit
Dim Array
if FF_GetImageCount > 0 then
call Bilddaten
call ExcelTabelle
else
msgbox "Es wurden keine Bilder ausgewählt!",vbExclamation,"Abbruch"
end if
'---------------------------------------------------------------------------------------------
Sub ExcelTabelle
Dim excel
Set excel = CreateObject("Excel.Application") 'Excel-Objekt
'Excel-Aufruf
With excel
.Workbooks.Add 'Tabellenblatt hinzufügen
.ActiveSheet.Cells(3,1).Resize(ubound(Array,1)+1,ubound(Array,2)+1).Value = Array
.ActiveSheet.Cells(1,1).Value = "Pad " & FF_GetImagePath()
.visible = true 'Tabellenblatt sichtbar machen
end with
Set excel = Nothing 'Excelobjekt frei geben
End Sub
'---------------------------------------------------------------------------------------------
Sub Bilddaten
Dim n,p,HLarray,s
'Überschriften in Array eintragen
const HeadLine = "Bild/Kamera/Aufnahme vom/Zeit/Blende/Brennweite/ISO/Blitz"
HLarray = split(HeadLine,"/")
Redim Array(FF_GetImageCount,ubound(HLarray))
for n = 0 to ubound(HLarray)
Array(0,n) = HLarray(n)
next
'Bilddaten in Array eintragen
for n = 0 to FF_GetImageCount -1
FF_LoadImage(FF_GetImageName(n))
p = InStrRev(FF_GetImageName(n),"\")
s = 0
Array(n+1,s) = mid(FF_GetImageName(n),p+1) : s = s+1
if FF_HasExif() then
Array(n+1,s) = FF_GetExifTag("Model") : s = s+1
Array(n+1,s) = FF_GetExifTag("DateTimeOriginal") : s = s+1
Array(n+1,s) = FF_GetExifTagAdvanced("ExposureTime") & " sec." : s = s+1
Array(n+1,s) = FF_GetExifTagAdvanced("FNumber") : s = s+1
Array(n+1,s) = FF_GetExifTagAdvanced("FocalLength") & " mm" : s = s+1
Array(n+1,s) = FF_GetExifTag("ISOSpeedRatings") : s = s+1
if FF_GetExifTag("Flash") mod 2 = 0 then Array(n+1,s) = "Nein" else Array(n+1,s) = "Ja"
else
Array(n+1,s) = "Keine Daten!"
end if
next
End Sub
'------------------------------------------------------------------------------------------------
Hier werden die Bilddaten mit Spaltenüberschriften sinnvollerweise in eine Datentabelle Array eingetragen\\ und dann in das mit Workbooks.Add geöffnete Tabellenblatt mit ActiveSheet.Cells(Zeile,Spalte).Resize ab der 3. Zeile und der 1. Spalte die gesamte Tabelle in einem Rutsch eingetragen. Das geht erheblich schneller, als die Daten Zelle für Zelle zu übertragen.\\ Anschließend wird noch mit ActiveSheet.Cells(Zeile,Spalte).Value der Pfad des aktuellen Verzeichnis in die 1. Zeile eingetragen.\\ Will man beispielsweise noch die Spaltenbreite optimieren, ist die Ermittlung der notwendigen VBA-Befehle wie bereits beschrieben mit dem Makrorekorder möglich.\\ Das aufgenommene Makro sieht so aus:\\
Sub Makro1()
' Makro1 Makro
Cells.Select
Selection.Columns.AutoFit
End Sub
Die Routine **Exceltabelle** wird wie folgt ergänzt:\\
Sub ExcelTabelle
Dim excel
Set excel = CreateObject("Excel.Application") 'Excel-Objekt
'Excel-Aufruf
With excel
.Workbooks.Add 'Tabellenblatt hinzufügen
.ActiveSheet.Cells(3,1).Resize(ubound(Array,1)+1,ubound(Array,2)+1).Value = Array
'#### Makroanfang
.Cells.Select
.Selection.Columns.AutoFit
'#### Makroende
.ActiveSheet.Cells(1,1).Value = "Pad " & FF_GetImagePath()
.visible = true 'Tabellenblatt sichtbar machen
end with
Set excel = Nothing 'Excelobjekt frei geben
End Sub
Zu VBA-Befehlen, die nicht mit dem Makrorekorder zu ermitteln sind, findet man bei diversen Foren im Internet Hilfe.