peterleb
Goto Top

ICS Import zu Excel

Falls es jemanden interessiert.
Auf Grundlage einer gefundenen Anleitung habe ich mal ein Makro (VBA) für Excel angepasst, welches iCal-Dateien (ICS-Format) direkt in eine Excel-Tabelle einlesen kann.

Der Code könnte vielleicht noch etwas optimiert werden (wiederkehrende Befehlszeilen) aber es funktioniert erstmal.

Sub ICS_Import()
    ' modifiziert nach: https://www.experts-exchange.com/questions/26193790/Importing-Calendar-files-into-Excel-ics-xls.html  
    ' This version require a reference to a "Microsoft ActiveX Data Objects"  
    
    Dim filename As String
    filename = Application.GetOpenFilename("Calendar Files (*.ics),*.ics")  
    If filename = "False" Then Exit Sub  
    
    Dim objStream, strData
    Dim r As Long, c As Long, line As String, dtStr As String, aStr As String, mlValue As String, dtArr() As String
    Dim colNames As Variant
    colNames = Array("DTSTART", "DTEND", "DTSTAMP", "UID", "CREATED", "DESCRIPTION", "RRULE", "LAST-MODIFIED", "LOCATION", "SEQUENCE", "STATUS", "SUMMARY", "TRANSP")  
    
    Set objStream = CreateObject("ADODB.Stream")  
    
    objStream.Charset = "utf-8"  
    objStream.Open
    objStream.Type = adTypeText
    objStream.LoadFromFile (filename)
    c = 0
    For c = 0 To 12
        Cells(1, c + 1).Value = colNames(c)
        Next c
    r = 2
    line = objStream.ReadText(adReadLine)
    Do Until objStream.EOS
        If Left(line, 1) <> Chr(9) Then
        aStr = Split(line, ":")(0)  
        End If
        Select Case True
            Case Left(line, 7) = "DTSTART"  
                dtStr = Replace(line, aStr & ":", "")  
                Cells(r, 1).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
                Cells(r, 1) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
            Case Left(line, 5) = "DTEND"  
                dtStr = Replace(line, aStr & ":", "")  
                Cells(r, 2).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
                Cells(r, 2) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
            Case Left(line, 7) = "DTSTAMP"  
                dtStr = Replace(line, aStr & ":", "")  
                Cells(r, 3).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
                Cells(r, 3) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
            Case Left(line, 3) = "UID"  
                Cells(r, 4) = Replace(line, aStr & ":", "")  
            Case Left(line, 7) = "CREATED"  
                dtStr = Replace(line, aStr & ":", "")  
                Cells(r, 5).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
                Cells(r, 5) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
            Case Left(line, 11) = "DESCRIPTION"  
                Cells(r, 6) = Replace(line, aStr & ":", "")  
            Case Left(line, 5) = "RRULE"  
                Cells(r, 7) = Replace(line, aStr & ":", "")  
            Case Left(line, 13) = "LAST-MODIFIED"  
                dtStr = Replace(line, aStr & ":", "")  
                Cells(r, 8).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
                Cells(r, 8) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
            Case Left(line, 8) = "LOCATION"  
                Cells(r, 9) = Replace(line, aStr & ":", "")  
            Case Left(line, 8) = "SEQUENCE"  
                Cells(r, 10) = Replace(line, aStr & ":", "")  
            Case Left(line, 6) = "STATUS"  
                Cells(r, 11) = Replace(line, aStr & ":", "")  
            Case Left(line, 7) = "SUMMARY"  
                Cells(r, 12) = Replace(line, aStr & ":", "")  
            Case Left(line, 6) = "TRANSP"  
                Cells(r, 13) = Replace(line, aStr & ":", "")  
            Case Left(line, 10) = "END:VEVENT"  
                r = r + 1
        End Select
        line = objStream.ReadText(adReadLine)
    Loop
    Dim Spalte As Range
    For Each Spalte In ActiveSheet.UsedRange.Columns
        Spalte.AutoFit
        Next Spalte
End Sub

Function ParseDateZ(dtStr As String)
    Dim dtArr() As String
    Dim dt As Date
    dtArr = Split(Replace(dtStr, "Z", ""), "T")  
    dt = DateSerial(Left(dtArr(0), 4), Mid(dtArr(0), 5, 2), Right(dtArr(0), 2))
    If UBound(dtArr) > 1 Then
        dt = dt + TimeSerial(Left(dtArr(1), 2), Mid(dtArr(1), 3, 2), Right(dtArr(1), 2))
    End If
    ParseDateZ = dt
End Function

Sub SplitDate()
    Dim LastRow, i
    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    Columns("B").Insert Shift:=xlToRight  
    Columns("D").Insert Shift:=xlToRight  
    Cells(1, 2).Value = "TIMESTART"  
    Cells(1, 4).Value = "TIMEEND"  
    
    For i = 2 To LastRow
        Cells(i, 2) = Cells(i, 1)
        Cells(i, 4) = Cells(i, 3)
        
    Columns("A").NumberFormat = "dd.mm.yyyy"  
    Columns("B").NumberFormat = "hh:mm:ss"  
    Columns("C").NumberFormat = "dd.mm.yyyy"  
    Columns("D").NumberFormat = "hh:mm:ss"  
    Next
End Sub

Mit der SplitDate-Routine werden nur noch die DTSTART und DTEND Werte zum leichteren Editieren aufgeteilt.
Kann man manuell oder bei Bedarf auch automatisch ausführen.

Ein Export-Funktion hätte ich auch anzubieten, die müßte aber noch an diese Tabelle angepasst werden.

Viel Vergnügen damit

PS: Ist nur teilweise mein Knowhow, hoffe es erfüllt die Voraussetzung zum Veröffentlichen.

Content-Key: 379164

Url: https://administrator.de/contentid/379164

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 06.07.2018 um 10:06:45 Uhr
Goto Top
Ich sag Dir mal herzlichen Dank dafür.
Es ist schön, wenn Kollegen ihr Wissen teilen.
Mitglied: PeterleB
PeterleB 06.07.2018 um 10:40:02 Uhr
Goto Top
Das freut mich.

Gruß Peter
Mitglied: PeterleB
PeterleB 09.07.2018 um 07:26:52 Uhr
Goto Top
Hab' mal am Code noch ein bisschen herumgeschraubt. TIMESTART und TIMEEND werden gleich mit angelegt und mit charset = "_autodetect_all" werden hoffentlich alle Char-Codes erkannt.

Sub ICS_Import()
    ' modifiziert nach: https://www.experts-exchange.com/questions/26193790/Importing-Calendar-files-into-Excel-ics-xls.html  
    ' This version require a reference to a "Microsoft ActiveX Data Objects"  
    
    Dim filename As String
    filename = Application.GetOpenFilename("Calendar Files (*.ics),*.ics")  
    If filename = "False" Then Exit Sub  
    
    Dim objStream, strData
    Dim r As Long, c As Long, lineCount As Long, line As String, dtStr As String, aStr As String, mlValue As String, dtArr() As String
    Dim colNames As Variant
    colNames = Array("DTSTART", "TIMESTART", "DTEND", "TIMEEND", "DTSTAMP", "UID", "CREATED", "DESCRIPTION", "RRULE", "LAST-MODIFIED", "LOCATION", "SEQUENCE", "STATUS", "SUMMARY", "TRANSP")  
    Dim EventStart As Boolean
    Set objStream = CreateObject("ADODB.Stream")  
    
    'objStream.Charset = "utf-8"  
    'objStream.Charset = "windows-1252"              '"_autodetect_all" ?  
    objStream.Charset = "_autodetect_all"  
    objStream.Open
    objStream.Type = adTypeText
    objStream.LoadFromFile (filename)
    c = 0
    For c = 0 To 14
        Cells(1, c + 1).Value = colNames(c)
        Next c
    r = 2
    EventStart = False
    lineCount = 0
    line = objStream.ReadText(adReadLine)
    Do Until objStream.EOS
        If Left(line, 1) <> Chr(9) Then 'Corrected a cut/paste bug " " == chr(9)  
        aStr = Split(line, ":")(0)  
        End If
        If Left(line, 12) = "BEGIN:VEVENT" Then 'Die ersten Zeilen ("Header") bis zum ersten Ereignis werden ignoriert  
            EventStart = True
        End If
        If EventStart = True Then
            dtStr = Replace(line, aStr & ":", "")  
            Select Case True
                Case Left(line, 7) = "DTSTART"  
                    Cells(r, 1) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
                    'Spalte "TIMESTART"  
                    Cells(r, 2) = Cells(r, 1)
                Case Left(line, 5) = "DTEND"  
                    Cells(r, 3) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
                    'Spalte "TIMEEND"  
                    Cells(r, 4) = Cells(r, 3)
                Case Left(line, 7) = "DTSTAMP"  
                    Cells(r, 5) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
                Case Left(line, 3) = "UID"  
                    Cells(r, 6) = dtStr
                Case Left(line, 7) = "CREATED"  
                    Cells(r, 7) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
                Case Left(line, 11) = "DESCRIPTION"  
                    Cells(r, 8) = dtStr
                Case Left(line, 5) = "RRULE"  
                    Cells(r, 9) = dtStr
                Case Left(line, 13) = "LAST-MODIFIED"  
                    Cells(r, 10) = Format(ParseDateZ(dtStr), "yyyy-mm-dd hh:mm:ss")  
                Case Left(line, 8) = "LOCATION"  
                    Cells(r, 11) = dtStr
                Case Left(line, 8) = "SEQUENCE"  
                    Cells(r, 12) = dtStr
                Case Left(line, 6) = "STATUS"  
                    Cells(r, 13) = dtStr
                Case Left(line, 7) = "SUMMARY"  
                    Cells(r, 14) = dtStr
                Case Left(line, 6) = "TRANSP"  
                    Cells(r, 15) = dtStr
                Case Left(line, 10) = "END:VEVENT"  
                    r = r + 1
            End Select
        Else
            lineCount = lineCount + 1
        End If 'EventStart  
        line = objStream.ReadText(adReadLine)
    Loop
    Cells(r + 2, 1) = lineCount & " Headerzeilen"  
    Columns(1).NumberFormat = "dd.mm.yyyy"  
    Columns(2).NumberFormat = "hh:mm:ss"  
    Columns(3).NumberFormat = "dd.mm.yyyy"  
    Columns(4).NumberFormat = "hh:mm:ss"  
    'eigentlich nicht notwendig:  
    Columns(5).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
    Columns(7).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
    Columns(10).NumberFormat = "yyyy-mm-dd hh:mm:ss"  
    Dim Spalte As Range
    For Each Spalte In ActiveSheet.UsedRange.Columns
        Spalte.AutoFit
        Next Spalte
End Sub

Function ParseDateZ(dtStr As String)
    Dim dtArr() As String
    Dim dt As Date
    dtArr = Split(Replace(dtStr, "Z", ""), "T")  
    dt = DateSerial(Left(dtArr(0), 4), Mid(dtArr(0), 5, 2), Right(dtArr(0), 2))
    If UBound(dtArr) > 1 Then
        dt = dt + TimeSerial(Left(dtArr(1), 2), Mid(dtArr(1), 3, 2), Right(dtArr(1), 2))
    End If
    ParseDateZ = dt
End Function

Der "Kopfteil" wird erstmal ignoriert. Dieser könnte original zwischengespeichert oder sicher auch editierbar gemacht werden.
Das Makro für den (Rück-)Export könnte ich bei Interesse auch posten.

Viel Vergnügen damit.
Peter
Mitglied: CSEService
CSEService 27.10.2019 um 15:40:50 Uhr
Goto Top
Mal ne Frage dazu:

Ist es Umsetzbar aus einer Exceldatei oder vielleicht eine CSV mit Terminen daraus ein ein Makro (VBA)zun erstellen,das ICAL Dateien erstellt ?

Und als i Tüpfelchen: Mehrer ICAL Dateien pro Person je nachdem wie viel Personen hier in der Ursprungsdatei stehen ?!?
Mitglied: PeterleB
PeterleB 28.10.2019 aktualisiert um 17:34:43 Uhr
Goto Top
Natürlich geht das.
Erstmal dein erstes Problem.

Betrifft hier eine Tabelle mit den Spalten

2019-10-28

Sub ICS_Export()
Dim strDateiname As String
Dim strDateinameZusatz As String
Dim strMappenpfad As String
Dim intCutExt

'Datename ohne Ext. (nach Punkt suchen):  
intCutExt = Len(ActiveWorkbook.Name) - InStrRev(ActiveWorkbook.Name, ".") + 1  
strMappenpfad = Left(ActiveWorkbook.FullName, Len(ActiveWorkbook.FullName) - intCutExt)

'strDateinameZusatz = "-" & Year(ActiveSheet.Cells(3, 1).Value) & "-" & Month(ActiveSheet.Cells(3, 1).Value) & ".ics"  
strDateinameZusatz = "-" & Format(Now, "YYYY-MM-DD-HH-MM-SS") & ".ics"  

strDateiname = InputBox("Bitte den Namen der ICS-Datei angeben.", "ICS-Export", strMappenpfad & strDateinameZusatz)  
If strDateiname = "" Then Exit Sub  

Range("A2").Select  

'Erstellt den Zeitstempel  
'wird benötigt für die UID des Kalendereintrages und für die Felder  
'"erstellt am" --> "DTSTAMP" und "zuletzt geändert am" --> "LAST-MODIFIED"  
    Dim jahr_jetzt As String
    jahr_jetzt = Year(Now)
    Dim monat_jetzt As String * 2
    monat_jetzt = Month(Now)
    If monat_jetzt < 10 Then monat_jetzt = "0" + monat_jetzt  
    Dim tag_jetzt As String * 2
    tag_jetzt = Day(Now)
    If tag_jetzt < 10 Then tag_jetzt = "0" + tag_jetzt  
    Dim stunde_jetzt As String * 2
    stunde_jetzt = Hour(Now) - 1
    If stunde_jetzt < 10 Then stunde_jetzt = "0" + stunde_jetzt  
    Dim minute_jetzt As String * 2
    minute_jetzt = Minute(Now)
    If minute_jetzt < 10 Then minute_jetzt = "0" + minute_jetzt  
    Dim sekunde_jetzt As String * 2
    sekunde_jetzt = Second(Now)
    If sekunde_jetzt < 10 Then sekunde_jetzt = "0" + sekunde_jetzt  
    zeitstempel = jahr_jetzt + monat_jetzt + tag_jetzt + "T" + stunde_jetzt + minute_jetzt + _  
sekunde_jetzt + "Z"  

'Erstellt die Kalenderdatei (hier: Dpl.ics)  
'Dateiname kann frei gewählt werden  
'Der entsprechende Ordner MUSS vorhanden sein, da sonst ein Fehler auftritt  
    Set fs = CreateObject("scripting.filesystemobject")  
    
    Set a = fs.createtextfile(strDateiname, True)

'Schreibt den allgemeinen Teils der Kalenderdatei  
    a.writeline ("BEGIN:VCALENDAR")  
    a.writeline ("CALSCALE:GREGORIAN")  
    a.writeline ("VERSION:2.0")  
    a.writeline ("PRODID:-//Private/NONSGML ExcelExportToICS//DE")  
    a.writeline ("METHOD:PUBLISH")  
    a.writeline ("X-WR-CALNAME:ExcelExportToICS")  
    a.writeline ("X-WR-TIMEZONE:Europe/Berlin")  
    a.writeline ("BEGIN:VTIMEZONE")  
    a.writeline ("TZID:Europe/Berlin")  
    a.writeline ("X-LIC-LOCATION:Europe/Berlin")  
    
    a.writeline ("BEGIN:DAYLIGHT")  
    a.writeline ("DTSTART:19700329T020000")  
    a.writeline ("RRULE:BYMONTH=3;FREQ=YEARLY;BYDAY=-1SU")  
    a.writeline ("TZNAME:CEST")  
    a.writeline ("TZOFFSETFROM:+0100")  
    a.writeline ("TZOFFSETTO:+0200")  
    a.writeline ("END:DAYLIGHT")  
    
    a.writeline ("BEGIN:STANDARD")  
    a.writeline ("DTSTART:19701025T030000")  
    a.writeline ("RRULE:BYMONTH=10;FREQ=YEARLY;BYDAY=-1SU")  
    a.writeline ("TZNAME:CET")  
    a.writeline ("TZOFFSETFROM:+0200")  
    a.writeline ("TZOFFSETTO:+0100")  
    a.writeline ("END:STANDARD")  
    
    a.writeline ("END:VTIMEZONE")  

'Schleife zur Ermittlung aller Einträge  
'Benutzt alle Datensätze, die ein Datum enthalten  
    i = 1
    While ActiveCell.Offset(i, 0) <> ""  
    
    Dim datstart As Date
    datstart = ActiveCell.Offset(i, 0)
    '(<PB)  
    Dim datstart1 As Date
    datstart1 = datstart + 1
    '(PB>)  
    Dim timestart As Date
    timestart = ActiveCell.Offset(i, 1)
    Dim datend As Date
    datend = ActiveCell.Offset(i, 2)
    Dim timeend As Date
    timeend = ActiveCell.Offset(i, 3)
    Dim thema As String
    thema = ActiveCell.Offset(i, 4)
    Dim ort As String
    ort = ActiveCell.Offset(i, 5)
    Dim text As String
    text = ActiveCell.Offset(i, 6)
    
    '(<PB) Wert zur Festlegung ganztägiger Ereignisse  
    Dim allday As Boolean
    allday = ActiveCell.Offset(i, 7)
    '(PB>)  
    
'Aufbereitung Datum und Zeit für Beginn  
    Dim jdatstart As String
    jdatstart = Year(datstart)
    Dim mdatstart As String
    mdatstart = Month(datstart)
    If mdatstart < 10 Then mdatstart = "0" + mdatstart  
    Dim tdatstart As String
    tdatstart = Day(datstart)
    '(<PB)  
    Dim jdatstart1 As String
    jdatstart1 = Year(datstart1)
    Dim mdatstart1 As String
    mdatstart1 = Month(datstart1)
    If mdatstart1 < 10 Then mdatstart1 = "0" + mdatstart1  
    Dim tdatstart1 As String
    tdatstart1 = Day(datstart1)
    '(PB>)  
    If tdatstart < 10 Then tdatstart = "0" + tdatstart  
    Dim hhtimestart As String
    hhtimestart = Hour(timestart)
    If hhtimestart < 10 Then hhtimestart = "0" + hhtimestart  
    Dim mmtimestart As String
    mmtimestart = Minute(timestart)
    If mmtimestart < 10 Then mmtimestart = "0" + mmtimestart  
    Dim sstimestart As String
    sstimestart = "00"  
    
'Aufbereitung Datum und Zeit für Ende  
    Dim jdatend As String
    jdatend = Year(datend)
    Dim mdatend As String
    mdatend = Month(datend)
    If mdatend < 10 Then mdatend = "0" + mdatend  
    Dim tdatend As String
    tdatend = Day(datend)
    If tdatend < 10 Then tdatend = "0" + tdatend  
    Dim hhtimeend As String
    hhtimeend = Hour(timeend)
    If hhtimeend < 10 Then hhtimeend = "0" + hhtimeend  
    Dim mmtimeend As String
    mmtimeend = Minute(timeend)
    If mmtimeend < 10 Then mmtimeend = "0" + mmtimeend  
    Dim sstimeend As String
    sstimeend = "00"  

   
    
Dim k As String
    k = i

'Schreibt den Kalendereintrag  
'k ist ein durchlaufender Zähler  
    a.writeline ("BEGIN:VEVENT")  
    a.writeline ("UID:" + zeitstempel + "-ExcelExport-" + k)  
    a.writeline ("CLASS:PUBLIC")  
    a.writeline ("SUMMARY:" + thema)  
    a.writeline ("DESCRIPTION:" + text)  
    a.writeline ("LOCATION:" + ort)  
    
    'Die Datumsinformationen sind nach der RFC 2445 für das iCalendar Format als UTC angegeben (enden mit einem "Z")  
    
    'a.writeline ("DTSTART;TZID=Europe/Berlin:" + jdatstart + mdatstart + tdatstart + "T" + hhtimestart + mmtimestart + sstimestart + "Z")  
    'a.writeline ("DTEND;TZID=Europe/Berlin:" + jdatend + mdatend + tdatend + "T" + hhtimeend + mmtimeend + sstimeend + "Z")  
    'a.writeline ("DTSTART:" + jdatstart + mdatstart + tdatstart + "T" + hhtimestart + mmtimestart + sstimestart + "Z")  
    'a.writeline ("DTEND:" + jdatend + mdatend + tdatend + "T" + hhtimeend + mmtimeend + sstimeend + "Z")  
    
    '(<PB)  
    If allday Then
        a.writeline ("DTSTART;VALUE=DATE:" + jdatstart + mdatstart + tdatstart)  
        a.writeline ("DTEND;VALUE=DATE:" + jdatstart1 + mdatstart1 + tdatstart1)  
        Else
        '(PB>)  
        a.writeline ("DTSTART:" + jdatstart + mdatstart + tdatstart + "T" + hhtimestart + mmtimestart + sstimestart)  
        a.writeline ("DTEND:" + jdatend + mdatend + tdatend + "T" + hhtimeend + mmtimeend + sstimeend)  
        '(<PB)  
        End If
        '(PB>)  
    a.writeline ("DTSTAMP:" + zeitstempel)  
    a.writeline ("LAST-MODIFIED:" + zeitstempel)  
    a.writeline ("BEGIN:VALARM")  
    a.writeline ("ACTION:DISPLAY")  
    a.writeline ("TRIGGER;VALUE=DURATION:-P1D")  
    a.writeline ("DESCRIPTION:Mozilla Alarm: " + thema)  
    a.writeline ("END:VALARM")  
    a.writeline ("END:VEVENT")  
    
    i = i + 1
    Wend
'Ende der Schleife  
    
'Ende der Kalenderdatei  
    a.writeline ("END:VCALENDAR")  
    
MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname  
End Sub

Das Grundprinzip wirst du am Code erkennen.
Eventuell mußt Du es Deinen Bedürfnissen anpassen.

Gruß
Peter
Mitglied: Lindi67
Lindi67 07.01.2021 aktualisiert um 14:51:32 Uhr
Goto Top
Ich habe von Schulferien org. eine ics für Ferientermine runtergeladen und wollte die mit Deinem Makro in Excel importieren…
Der erste Stopp kam bei : objStream.Type = adTypeText
Als ich den gelöscht habe blieb ich stecken bei: aStr = Split(line, ":")(0)

Kannst Du Dein Makro bitte noch verbessern? So funktioniert es leider nicht.

Sorry ich schrieb gerad unter dem falschen Makro
Mitglied: Lindi67
Lindi67 07.01.2021 um 14:51:58 Uhr
Goto Top
Ich habe von Schulferien org. eine ics für Ferientermine runtergeladen und wollte die mit Deinem Makro in Excel importieren…
Der erste Stopp kam bei : objStream.Type = adTypeText
Als ich den gelöscht habe blieb ich stecken bei: aStr = Split(line, ":")(0)

Kannst Du Dein Makro bitte noch verbessern? So funktioniert es leider nicht.
Mitglied: PeterleB
PeterleB 07.01.2021 um 15:58:30 Uhr
Goto Top
Microsoft ActiveX Data Objects 2.8 Library und
Microsoft ActiveX Data Objects Recordset 2.8 Library
müssen referenziert sein (oder aktuellere Versionen).
How to use ADODB.Connection

Gruß
Peter
Mitglied: maettu49
maettu49 05.02.2021 um 17:13:56 Uhr
Goto Top
Danke. Das Makro hilft sehr. Hat sich schon mal jemand die mühe gemacht und auch die "Regeln" inkl. Ausnahmen in einem Makro verarbeitet?
Freundlich Grüsse