Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: .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

Anzeige

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

Anzeige
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

ICS-Datei mit Excel erstellen – Schritt für Schritt


Schritt-für-Schritt-Anleitung

Um eine ICS-Datei aus Excel zu erstellen, benötigst du ein Makro, das die Daten aus deiner Excel-Tabelle extrahiert und in das iCalendar-Format umwandelt. Hier ist eine einfache Anleitung, wie du dies umsetzen kannst:

  1. Vorbereitung der Excel-Tabelle:

    • Erstelle eine Tabelle mit den notwendigen Informationen für jeden Kalendereintrag, wie Name, Datum, Start- und Endzeit, Titel, Ort und Notizen.
  2. VBA-Makro einfügen:

    • Öffne den VBA-Editor (drücke ALT + F11).
    • Füge ein neues Modul hinzu (Einfügen > Modul).
    • Kopiere und füge den folgenden VBA-Code ein:
    Sub ICS_Erstellen()
       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
       Dim vorname As String, nachname As String
    
       varICS_Datei = Application.GetSaveAsFilename(FileFilter:="ICS-Datei (*.ics),*.ics", Title:="Bitte Dateiname für die ICS-Datei eingeben")
       If varICS_Datei = False Then Exit Sub
    
       FF = FreeFile()
       Open varICS_Datei For Output As FF
       Print #FF, "BEGIN:VCALENDAR"
       Print #FF, "VERSION:2.0"
       Print #FF, "PRODID:-//MyCalendar//NONSGML v1.0//EN"
    
       i = 1
       While ActiveCell.Offset(i, 2) <> ""
           nachname = ActiveCell.Offset(i, 0)
           vorname = ActiveCell.Offset(i, 1)
           datum = ActiveCell.Offset(i, 2)
           datum2 = datum + 1
    
           Print #FF, "BEGIN:VEVENT"
           Print #FF, "UID:" & Format(Now, "YYYYMMDDHHMMSS") & "-" & i
           Print #FF, "SUMMARY:" & vorname & " " & nachname
           Print #FF, "DTSTART;VALUE=DATE:" & Format(datum, "YYYYMMDD")
           Print #FF, "DTEND;VALUE=DATE:" & Format(datum2, "YYYYMMDD")
           Print #FF, "END:VEVENT"
           i = i + 1
       Wend
    
       Print #FF, "END:VCALENDAR"
       Close #FF
       Exit Sub
    
    Fehler:
       MsgBox "Fehler-Nr.: " & Err.Number & vbLf & Err.Description
    End Sub
  3. Makro ausführen:

    • Kehre zu Excel zurück und führe das Makro aus (Entwicklertools > Makros).
  4. ICS-Datei speichern:

    • Wähle den Speicherort und den Namen für deine ICS-Datei. Die Datei wird im .ics-Format erstellt.

Häufige Fehler und Lösungen

  • Fehler "429: Objekterstellung durch ActiveX-Komponente nicht möglich":

    • Dieser Fehler tritt häufig auf Mac-Systemen auf. Stelle sicher, dass der Code an die Mac-Umgebung angepasst ist, indem du Windows-spezifische Funktionen vermeidest.
  • Umlaute und Sonderzeichen:

    • Wenn Umlaute nicht korrekt dargestellt werden, überprüfe die Codierung der ICS-Datei. Stelle sicher, dass die Ersetzungen für Sonderzeichen im VBA-Code enthalten sind.
  • Speichern der Datei:

    • Wenn die Datei als .xlsx gespeichert wird, stelle sicher, dass der FileFilter im GetSaveAsFilename korrekt angegeben ist.

Alternative Methoden

  • CSV in ICS umwandeln:

    • Du kannst auch eine Excel-Tabelle als CSV speichern und anschließend mit einem Online-Converter in eine ICS-Datei umwandeln.
  • Excel zu ical:

    • Einige Softwarelösungen oder Web-Tools ermöglichen die direkte Umwandlung von Excel-Daten in das iCalendar-Format. Diese Tools sind oft benutzerfreundlicher.

Praktische Beispiele

  • Geburtstagsliste erstellen:

    • Erstelle eine Excel-Tabelle mit Spalten für Namen und Geburtstage, um eine einfache Geburtstagsliste als ICS-Datei zu exportieren.
  • Vollständige Kalendereinträge:

    • Füge Spalten für Titel, Ort, Start- und Endzeit hinzu, um komplexere Kalendereinträge zu erstellen. Der VBA-Code kann entsprechend angepasst werden, um diese zusätzlichen Informationen zu berücksichtigen.

Tipps für Profis

  • Parameter anpassen:

    • Optimiere das Makro, indem du Parameter für wiederkehrende Ereignisse hinzufügst, wie z.B. monatliche oder jährliche Wiederholungen.
  • Sicherheitsoptionen:

    • Überprüfe die Sicherheitseinstellungen in Excel, um sicherzustellen, dass Makros ausgeführt werden dürfen.
  • Formatierung:

    • Teste die Formatierung der ICS-Datei, indem du die Datei in verschiedenen Kalenderanwendungen öffnest, um sicherzustellen, dass alle Informationen korrekt angezeigt werden.

FAQ: Häufige Fragen

1. Wie erstelle ich eine ICS-Datei aus Excel?
Du kannst eine ICS-Datei aus Excel erstellen, indem du ein Makro verwendest, das die benötigten Daten in das iCalendar-Format umwandelt.

2. Funktioniert das Makro auf Mac?
Ja, das Makro kann auch auf einem Mac ausgeführt werden, solange du die Windows-spezifischen Funktionen vermeidest.

3. Wie gehe ich mit Umlauten im VBA-Code um?
Um Umlaute und Sonderzeichen korrekt darzustellen, solltest du im Code Ersetzungen vornehmen, damit diese korrekt in die ICS-Datei geschrieben werden.

4. Welche Dateiendung sollte ich verwenden?
Für Makros ist es ratsam, die .xlsm-Dateiendung zu verwenden, um sicherzustellen, dass alle Funktionen korrekt funktionieren.

5. Kann ich das Makro anpassen?
Ja, das Makro kann leicht angepasst werden, um zusätzliche Informationen wie Start- und Endzeiten, sowie Ort und Notizen zu integrieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige