Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1400to1404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.ics via Makro aus Excel-Kalender erstellen

.ics via Makro aus Excel-Kalender erstellen
02.01.2015 01:29:19
Debian
Hallo zusammen:-)
Erst mal euch allen ein frohes und glückliches neues Jahr :-)
Nun zu meiner Frage:
Diese Excel-Tabelle: https://www.herber.de/bbs/user/94686.xls hab ich im Web gefunden. Man kann damit aus einer Excel-Tabelle mit Namen und Geburtstagen Kalenderdateien im .ics-Format erstellen. Leider ist der Makro-Code so angelegt, das es nur unter Windows funktioniert, auf dem Mac kommt eine Fehlermeldung (Laufzeitfehler "429".: Objekterstellung durch ActiveX-Komponente nicht möglich). Es wäre gut, wenn es auch auf dem Mac lauffähig wäre und beim Export in .ics der Speicherort frei gewählt werden kann.
Ausserdem werden in der Datei nur Namen und Geburtstage verarbeitet. Ich möchte aber gerne mehr Informationen abbilden, also neben dem Datum auch eine Start- und Endzeit eines Termins, den Titel des Ereignisses, Ort und Notizen.
Hat jemand Anregungen, wie das umgesetzt werden kann? Wäre ich echt froh drum :-)
Merci im Voraus :-)
Lieben Gruss aus Zürich.
Debian

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
02.01.2015 10:24:54
fcs
Hallo Debian,
ich hab keinen Mac zum Testen.
Problem ist wahrscheinlich das FileScripting-Objekt und/oder der vorgegebene Dateiname. Diese existieren auf dem Mac nicht oder sind auf einem Mac komplett anders strukturiert.
Ich hab das Makro jetzt mal umgeschrieben, wobei andere Anweisungen verwendet werden, um Inhalte in Textdateien zu schreiben. Ob diese unter Mac-OS funktionieren: ?
Wenn du andere Arten von Terminen verwalten willst, dann müssen einige Parameter anders/nicht in die Text-Datei geschrieben werden. Insbesonderen jene, die die Wiederholung von Terminen steuern. Für die korrekte Syntax exportiert man am besten einen Termin aus dem Kalenderprogramm, öffnet die ICS-Datei in einem Text-Editor und baut danach das Excelmakro entsprechend um.
Gruß
Franz
Sub ICS_Erstellen()
'Sortiert die Tabelle nach Geburtstagen (chronologische Reihenfolge)
'EintrŠge ohne Datumsangabe werden dabei ans Ende gestellt
On Error GoTo Fehler
Dim varICS_Datei As Variant
Dim FF As Integer
Dim Zeitstempel As String
Dim datum As Date, datum2 As Date
Dim i As Long       'Zeilenzähler
Dim k As String
'Dateiauswahldialog für ICS-Datei abhängig vom Betriebssystem öffnen
If Left(VBA.Environ("OS"), 7) = "Windows" Then
'unter Windows-Betriebssystem
varICS_Datei = Application.GetSaveAsFilename( _
FileFilter:="ICS-Datei (*.ics),*.ics", _
Title:="Bitte Dateiname für die ICS-Datei eingeben/auswählen")
Else
'etwas anderes - ggf. Parameter FileFilter oder FilterIndex passend für _
Betriebs-System angeben
'MAC evtl: FileFilter:=MacID("ICS") oder FileFilter:=MacID("TEXT")
Dialog_anderes_OS:
varICS_Datei = Application.GetSaveAsFilename( _
Title:="Bitte Dateiname für die ICS-Datei eingeben/auswählen", _
ButtonText:="Auswählen")
End If
If varICS_Datei = False Then Exit Sub
'Daten aufsteigend nach Datum sortieren
Range("A1").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Erstellt den Zeitstempels
'wird benštigt fŸr die UID des Kalendereintrages und fŸr die Felder
'"erstellt am" --> "DTSTAMP" und "zuletzt geŠndert am" --> "LAST-MODIFIED"
'einfachere Form für Zeitstempel
Zeitstempel = Format(Now, "YYYYMMDD""T""hhmmss""Z""")
'Erstellt die Kalenderdatei
'Dateiname kann frei gewŠhlt werden
'Der entsprechende Ordner MUSS vorhanden sein, da sonst ein Fehler auftritt
'Datendatei erstellen und zum beschreiben öffnen
FF = FreeFile()
Open varICS_Datei For Output As FF
'Schreibt den allgemeinen Teils der Kalenderdatei
Print #FF, "BEGIN:VCALENDAR"
Print #FF, "VERSION"
Print #FF, " :2.0"
Print #FF, "PRODID"
Print #FF, " :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN"
'Schleife zur Ermittlung aller EintrŠge
'Benutzt alle DatensŠtze, die ein Datum enthalten
i = 1
While ActiveCell.Offset(i, 2)  ""
'Ermittelt die Daten fŸr den Kalendereintrag
'Person und Geburtstagsdatum
nachname = ActiveCell.Offset(i, 0)
nachname = Replace(nachname, "Š", "ae")
nachname = Replace(nachname, "€", "Ae")
nachname = Replace(nachname, "š", "oe")
nachname = Replace(nachname, "…", "Oe")
nachname = Replace(nachname, "Ÿ", "ue")
nachname = Replace(nachname, "†", "Ue")
nachname = Replace(nachname, "§", "ss")
nachname = Replace(nachname, "Ž", "e")
'Mein Sunbird hatte Probleme mit Sonderzeichen, aus diesem Grund habe ich die "Wichtigsten"  _
ersetzt
vorname = ActiveCell.Offset(i, 1)
vorname = Replace(vorname, "Š", "ae")
vorname = Replace(vorname, "€", "Ae")
vorname = Replace(vorname, "š", "oe")
vorname = Replace(vorname, "…", "Oe")
vorname = Replace(vorname, "Ÿ", "ue")
vorname = Replace(vorname, "†", "Ue")
vorname = Replace(vorname, "§", "ss")
vorname = Replace(vorname, "Ž", "e")
datum = ActiveCell.Offset(i, 2)
datum2 = datum + 1
'Die Angaben mit dem Zusatz 2 werden fŸr das Ende des jeweiligen Termins gebraucht
'Das Ende eines ganztŠgigen Ereignisses ist immer der darauffolgende Tag
k = Format(i, "0")
'Schreibt den Kalendereintrag
'Der Zusatz "-@kuechi-" in der UID kann nach Belieben geŠndert werden
'k ist ein durchlaufender ZŠhler
Print #FF, "BEGIN:VEVENT"
Print #FF, "UID:" & Zeitstempel & "-@kuechi-" & k
Print #FF, "SUMMARY"                            'Zusammenfassung/Betreff
Print #FF, " :" & vorname & " " & nachname
Print #FF, "DESCRIPTION"                        'Beschreibung / Notiz
Print #FF, " :" & Format(Year(datum), "0000")
Print #FF, "LOCATION"                           'Ort
Print #FF, " :" & ""
Print #FF, "X-MOZILLA-ALARM-DEFAULT-LENGTH"
Print #FF, " :0"
Print #FF, "X-MOZILLA-RECUR-DEFAULT-UNITS"      'Wiederholung-EInheit
Print #FF, (" :years")
Print #FF, "RRULE"
Print #FF, " :FREQ=YEARLY;INTERVAL=1"           'Wiederholung-Frequenz/Interval
Print #FF, "DTSTART"                            'Start - Datum
Print #FF, " ;VALUE=DATE"
Print #FF, " :" & Format(datum, "YYYYMMDD")
Print #FF, "DTEND"                              'Ende - Datum
Print #FF, " ;VALUE=DATE"
Print #FF, " :" & Format(datum2, "YYYYMMDD")
Print #FF, "DTSTAMP"                            'Speicherzeitpunkt
Print #FF, " :" & Zeitstempel
Print #FF, "LAST-MODIFIED"                      'Letzte Änderung-zeitpunkt
Print #FF, " :" & Zeitstempel
Print #FF, "END:VEVENT"
i = i + 1
Wend
'Ende der Schleife
'Ende der Kalenderdatei
Print #FF, ("END:VCALENDAR")
'Datendatei wieder schließen
Close #FF
'Sortiert die ursprŸngliche Tabelle in alphabetischer Reihenfolge
Range("A1").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
Close
End Select
End With
End Sub

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
02.01.2015 13:49:33
Debian
Hallo Franz :-)
Merci für Deine rasche Antwort :-)
Das scheint schon mal zu funktionieren, merci :-)
Hier mal zwei Dateien zum Anschauen: Das erste ist ein Screenshot, wie so ein Kalendereintrag bei mir auf dem Mac ausschaut Userbild
(einfach nur zum Verständnis, wie die einzelnen Spalten für Ereignis, Ort, Datum, Beginn, Ende, Wiederholen Ja/Nein, Notizen aussehen sollten.
Das zweite ist dann die entsprechende Kalenderdatei https://www.herber.de/bbs/user/94697.txt . Ich musste als .txt hochladen, die Datei kann auch auf dem Mac genau so angeschaut und bearbeitet werden. Normal ist die Dateiendung .ics
Die mit Deinem Code geänderte Exceltabelle: https://www.herber.de/bbs/user/94698.xls
Wie müsste die Tabelle mit mehr Spalten für alle Infos denn ausschauen, die auch vom Makro komplett erfasst wird?
Lässt sich das Macro so gestalten, das der Name der Exceldatei keine Rolle mehr spielt? Hab gemerkt, das es nicht mehr funktioniert, wenn man den ändert.
Umlaute und Sonderzeichen bleiben wohl ein dauerhaftes Problem, nehm ich an? ;-)
Lieben Gruss :-)
Debian

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
03.01.2015 09:55:59
fcs
Hallo Debian,
freut mich, dass das Makro jetzt auch auf dem Mac funktioniert. Es ist halt ein Problem, wenn windows-spezifische Funktionen genutzt werden und eine Exceldatei anschließend auch auf einem Mac-OS laufen soll.
Problem anderer Dateiname:
Ändere das Makro, das von der Schaltfläche gestartet wird wie folgt:
Sub run()
'Application.run "'ICS_erstellen.xls'!ICS_Erstellen"
Call ICS_Erstellen
End Sub

Mit dem Aufbau der ICS-Datei und den erforderlichen Anpassungen in der Excel-Datei muss ich mich erst noch beschäftigen.
Gruß
Franz

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
03.01.2015 13:26:26
Debian
Hallo Franz :-)
Hab die zusätzlichen Spalten mal eingefügt, die ich mindestens für einen vollständigen Kalendereintrag brauchen würde, hier die angepasste Datei dazu. Den Call auf run habe ich wie von Dir angegeben geändert :-) https://www.herber.de/bbs/user/94730.xls
Wäre mega cool, wenn Du eine Idee hast, wie man das umsetzen kann.
Merci für Deine Hilfe, ich wünsch Dir ein schönes Weekend :-)
Gruss
Debian

AW: .ics via Makro aus Excel-Kalender erstellen
06.01.2015 15:47:29
fcs
Hallo Debian,
ich die Makros jetzt angepasst, so dass die Termine in eine ICS-Datei geschrieben werden.
Optional kannst du auch Angaben zur Wiederholung von Terminen machen und Termine als "Private" kennzeichnen.
Im Blatt Info findst du noch ein paar Erläuterungen.
Getestet hab ich innerhalb von Windows mit Excel/Outlook. Ich hoffe, dass es auch auf dem Mac funktioniert.
Gruß
Franz
https://www.herber.de/bbs/user/94781.xls

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
06.01.2015 18:04:53
Debian
WOW, bin beeindruckt :-) Merci vielmal Franz!
Unter Windows funktioniert es, es will auch gleich als .ics speichern. Auf dem Mac tut es das nicht, da wählt es automatisch .xlsx aus. Weisst Du, woran das liegt?
Die Umlaute sind wohl in VBA ein nicht zu behebendes Problem. Selbst im Code, den Du geschrieben hast, sind in Deinen Kommentaren alle Umlaute spätestens dann kaputt, wenn ichs im Mac aufmache ;-) Ich weiss, ohne einen Mac kannst DU das nicht testen. Manchmal wünscht ich, ich würd diese Differenzen verstehen.
Welches Format hältst Du für am geeignetsten um Exceltabellen mit Makros zu speichern? .xlsm oder nur .xls? Ist das wurscht, oder spielt das tatsächlich doch eine Rolle?
Merci nochmals und Gruss aus Zürich :-)
Debian

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
06.01.2015 19:29:08
fcs
Hallo Debian,
Speichern unter - Dialog:
Ich kenne die Syntax nicht, wie man den Mac-Excel-SaveAs-Dialog davon überzeugen kann nur ICS-Dateien im Dialog anzuzeigen. Schau dich einfach mal in Foren mit Mac-Schwerpunkt um oder evtl. verät die VBA-Hilfe eim Mac ja auch etwas.
Umlaute:
Mac OS und Windows verwenden unerschiedliche Zeichensätze.
Unter Windows werden in Excel noch vorhandene Umlaute zwar noch in die ICS-Datei geschrieben. Beim Einlesen nach Outlook sind sie aber verschwunden. Es scheint also auch noch ein Problem/Einstellungsparameter in der ICS-Datei zusein, denn wenn ich einen aus OutLook speicher und wieder importiere, dann bleiben die Umlaute erhalten. Zeilen sehen in der ICS-DAtei dann wie folgt aus:
SUMMARY;LANGUAGE=de:Änderung der Öse über ähnliche Überleitung
xls oder xlsm
xls musst du verwenden wenn die Datei auch mit älteren Excelversionen (unter Windows Excel 2003 und älter, unter Mac ?) bearbeitet werden soll.
Wenn du nur neuere Excelversion verwendest (unter Windows Excel 2007 und neuer, unter Mac ?), dann kannst du die Datei im neueren xlsm Format speichern.
Gruß
Franz

Anzeige
AW: .ics via Makro aus Excel-Kalender erstellen
06.01.2015 19:36:02
Debian
Okidoki :-)
Ich dank Dir vielmals Franz, das ist viel besser geworden, als ich das zu Anfang zu hoffen wagte. Ich mach das hier mal zu. Sollt ich was rausfinden, was die Syntax im Speichern unter Dialog auf dem Mac betrifft, lass ichs Dich gerne wissen :-)
Lieben Gruss und bis bald bei meinem nächsten Problem (verlass Dich drauf, da kommt wieder was;-)
Debian

66 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige