====== 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.