Aktualisierung Makros per Makro

Moderator: ModerationP

Aktualisierung Makros per Makro

Beitragvon RTausD » 21. Sep 2021, 18:28

Hallo allerseits,

ich habe über das Forum schon "gelernt", wie man in Excel die Makros mehrerer Dateien austauschen kann (vgl. http://www.office-loesung.de/p/viewtopic.php?f=166&t=859929).

Jetzt habe ich eine ähnliche Aufgabenstellung für Outlook.
Ich habe ein Makro erstellt, mit dem man PDFs (Rechnungen), die in einer eMail enthalten sind, analysiert.
Dabei nutze ich je nach Absender der eMails unterschiedliche Funktionen.
Die Funktionen sind in einem separaten Modul abgespeichert.
Wenn neue Lieferanten hinzukommen (was leider relativ häufig der Fall ist), muss ich an jedem Rechner das Modul austauschen.
Jetzt habe ich die Hoffnung mit dem Hauptmakro das Modul mit den Funktionen in einer im Netzwerk gespeicherten .bas-Datei zu aktualisieren.
Hat jemand eine Idee, wie das in Outlook funktionieren könnte?

VIELEN DANK im Voraus

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: Aktualisierung Makros per Makro

Beitragvon Fen » 22. Sep 2021, 21:21

Hallo,

ein Code sollte so allgemein sein, dass eine neue ID ausreicht. Wenn ein weiteres Modul notwendig ist, könnte ein grundsätzliches Programmier-Problem vorliegen.

Bei dieser allgemeinen Frage fällt mir nichts wirklich konkretes ein. Wie wäre es mit einem Beispiel?

mfg
Fen
 

Re: Aktualisierung Makros per Makro

Beitragvon RTausD » 23. Sep 2021, 13:34

Hallo Fen,

hier der Code, mit dem ich die ausgewählten eMails "auswerte":

Code: Alles auswählen
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub Druck_Eingangsrechnungen()
    Dim aktuelle_eMail As MailItem
    Dim Anzahl_Dateianhänge As Integer
    Dim Dokumentart(100)
    Wartezeit = 3 ' Sekunden
    Zielpfad_ER = "S:\Rechnungen\"
    Zielpfad_LB = "M:\Leistungsbelege Servicepartner\"
    Temppfad = Zielpfad_ER & "- Temp\"
    Modulpfad = Zielpfad_ER & "- PDFtoTXT\"
    Zielpfad_ER = Zielpfad_ER & "Eingangsrechnungen\"
    If Dir(Modulpfad & "pdftotext.exe") = "" Then MsgBox ("Unter " & Modulpfad & " ist kein PDT-Converter gespeichert!")
    If Dir(Modulpfad & "pdftotext.exe") = "" Then Exit Sub
    Drucker = "Microsoft Print to PDF"
    If Environ("USERNAME") = "Rolf" Then Drucker = "\\srv-file02\Kyocera P2040DN"
    If Environ("USERNAME") = "Rolf" Then Drucker_Duplex = "\\srv-file02\Kyocera P2040DN_Duplex"
    If Format(Environ("USERNAME"), "<") = "Max" Then Drucker = "\\srv-file02\Kyocera ECOSYS M2540dn FIBU"
    If Format(Environ("USERNAME"), "<") = "Max" Then Drucker_Duplex = "\\srv-file02\FIBU_Duplex"
    If Format(Environ("USERNAME"), "<") = "Hans" Then Drucker = "\\srv-file02\Kyocera ECOSYS M2540dn FIBU"
    If Format(Environ("USERNAME"), "<") = "Hans" Then Drucker_Duplex = "\\srv-file02\FIBU_Duplex"
    Set olNsp = Application.Application.GetNamespace("MAPI")
    Set Ordner = Application.ActiveExplorer.CurrentFolder
    Set Auswahl = Application.ActiveExplorer.Selection
    Frage = 6
    If Auswahl.Count > 1 Then Frage = MsgBox("Sollen die PDF-Anhänge der " & Auswahl.Count & " ausgewählten eMails ausgedruckt werden?" & Chr(10) & Chr(10), 4, "Ausdruck und Analyse PDF-Anhänge ausgewählter eMails")
    If Frage <> 6 Then Exit Sub
    For Each aktuelle_eMail In Auswahl
        Absender = Right(aktuelle_eMail.SenderEmailAddress, Len(aktuelle_eMail.SenderEmailAddress) - InStr(aktuelle_eMail.SenderEmailAddress, "@"))
        If InStr(Absender, "ADMINISTRATIVE GRUPPE") > 0 Or InStr(Absender, "ADMINISTRATIVE GROUP") > 0 Then
            Absender = "intern weitergeleitete eMail"
            Mailtext = aktuelle_eMail.Body
            While InStr(Mailtext, "@") > 0
                Mailtext = Right(Mailtext, Len(Mailtext) - InStr(Mailtext, "@"))
                If Left(Format(Mailtext, "<"), 5) <> "Firma" Then
                    Absender = Mailtext
                    If InStr(Absender, " ") > 0 Then Absender = Left(Absender, InStr(Absender, " ") - 1)
                    If InStr(Absender, ">") > 0 Then Absender = Left(Absender, InStr(Absender, ">") - 1)
                    If InStr(Absender, ";") > 0 Then Absender = Left(Absender, InStr(Absender, ";") - 1)
                    Mailtext = ""
                End If
            Wend
        End If
        Anzahl_Dateianhänge = aktuelle_eMail.Attachments.Count
'        MsgBox "Anwender:      " & Chr(9) & Environ("USERNAME") & Chr(10) & _
               "Absender:      " & Chr(9) & aktuelle_eMail.SenderEmailAddress & Chr(10) & _
               "Absendername:  " & Chr(9) & aktuelle_eMail.SenderName & Chr(10) & _
              "Betreff:       " & Chr(9) & aktuelle_eMail.Subject & Chr(10) & _
               "Empfänger:     " & Chr(9) & aktuelle_eMail.To & Chr(10) & _
               "Empfänger_CC:  " & Chr(9) & aktuelle_eMail.CC & Chr(10) & _
               "Empfänger_BCC: " & Chr(9) & aktuelle_eMail.BCC & Chr(10) & Chr(10) & _
               "Dateianhänge:  " & Chr(9) & Anzahl_Dateianhänge & Chr(10), 0, "ausgelesene Daten"
        If Anzahl_Dateianhänge > 0 Then
            For Z = 1 To Anzahl_Dateianhänge
                Dokumentnummer = Dokumentnummer + 1
                Dokumentart(Dokumentnummer) = ""
                If Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "PDF" Then
                    Ziel = Temppfad & "Temp " & Format(Date, "YYYY-MM-DD") & " " & Format(Time, "hh-mm-ss") & " " & Environ("USERNAME") & " " & aktuelle_eMail.Attachments.Item(Z).FileName
                    aktuelle_eMail.Attachments.Item(Z).SaveAsFile Ziel
                    TXT_Datei = Left(Ziel, Len(Ziel) - 4) & ".txt"
                    Call Funktion_GetPDFText(Ziel, Modulpfad)
                    Call Funktion_TXT_einlesen(TXT_Datei, Gesamttext)
                    While Left(Gesamttext, 1) = " "
                        Gesamttext = Right(Gesamttext, Len(Gesamttext) - 1)
                    Wend
'                    Testtext = Format(Gesamttext, ">")
'                    MsgBox Testtext
                    If InStr(Gesamttext, "RECHNUNG") > 0 _
                    Or InStr(Gesamttext, "Rechnung") > 0 _
                    Or InStr(Gesamttext, "INVOICE") > 0 _
                    Or InStr(Gesamttext, "Invoice") > 0 _
                    Or InStr(Gesamttext, "FACTUUR") > 0 _
                    Or InStr(Gesamttext, "Factuur") > 0 Then Dokumentart(Dokumentnummer) = "ER" Else Dokumentart(Dokumentnummer) = "LB"
                   
                    dokumenartzusammenfassung = dokumenartzusammenfassung & Dokumentnummer & Chr(9) & Dokumentart(Dokumentnummer) & Chr(10)
                   
'                    Set Zielordner = olNsp.Folders.Item("r.thielmann@hg-systems.com").Folders.Item("Digitalisierung").Folders.Item("Test").Folders.Item("verschoben").Folders.Item("ER")
                    Select Case Absender
                    Case "indelpro.be"
                        Lieferant = "Indelpro"
                        Call Funktion_ER_Indelpro(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
                    Case "mhtechniek.nl"
                        Lieferant = "M&H"
                        Call Funktion_ER_MundH(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
                    Case "vnsmachinery.be"
                        Lieferant = "VNS"
                        Call Funktion_ER_VNS(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
                    Case Else
                        Lieferant = Absender
'                        MsgBox ("Die eMailadresse " & aktuelle_eMail.SenderEmailAddress & "konnte keinem vorbereiteten Absender zugeordnet werden!")
                    End Select
                    On Error Resume Next
                    Kill Left(TXT_Datei, Len(TXT_Datei) - 3) & "*"
                    On Error GoTo 0
                    Ziel = ""
'                    MsgBox (aktuelle_eMail.Subject & Chr(10) & aktuelle_eMail.Attachments.Item(Z) & Chr(10) & Chr(10) & ">>>" & Rechnungsnummer & "<<<" & Chr(10) & ">>>" & Auftragsnummer & "<<<" & Chr(10) & ">>>" & Maschinennummer & "<<<" & Chr(10) & Chr(10) & Gesamttext)
                End If
            Next Z
            Dokumentnummer = 0
            If Lieferant = "" Then Lieferant = "- nicht ermittelbar -"
            If Auftragsnummer = "" Then Auftragsnummer = "- nicht ermittelbar -"
            If Bestellnummer = "" Then Bestellnummer = "- nicht ermittelbar -"
           
           
            For Z = 1 To Anzahl_Dateianhänge
                Dokumentnummer = Dokumentnummer + 1
                If Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "PDF" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "TXT" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "DOC" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 4), ">") = "DOCX" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 3), ">") = "XLS" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 4), ">") = "XLSX" _
                    Or Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 4), ">") = "ZIP" Then
'                    Ziel = Zielpfad_ER & "Auftrag " & Auftragsnummer & ".PDF"
                    Ziel = "Auftrag " & Auftragsnummer & " - Bestellung " & Bestellnummer & " ( " & Lieferant & " - R-Nr. " & Rechnungsnummer & " - " & Kunde & " - M-Nr. " & Maschinennummer & " ) "
                    If Dokumentart(Dokumentnummer) <> "" Then Ziel = Ziel & "- ( " & Dokumentart(Dokumentnummer) & " ) "
                    Ziel = Ziel & aktuelle_eMail.Attachments.Item(Z).FileName
                    Call Funktion_Dateiname_bereinigen(Ziel)
                    Ziel = Zielpfad_ER & Ziel
'                    MsgBox (Dokumentnummer & Chr(9) & Dokumentart(Dokumentnummer) & Chr(10) & Chr(10) & dokumenartzusammenfassung)
                    aktuelle_eMail.Attachments.Item(Z).SaveAsFile Ziel
                    If Dokumentart(Dokumentnummer) = "ER" Then Temporärer_Drucker = Drucker_Duplex Else Temporärer_Drucker = Drucker
                    If Format(Right(aktuelle_eMail.Attachments.Item(Z).FileName, 4), ">") <> "ZIP" Then Call ShellExecute(0&, "printto", Ziel, Chr(34) & Temporärer_Drucker & Chr(34), vbNullString, 0&)
                    If (Lieferant = "Indelpro" Or Lieferant = "M&H" Or Lieferant = "VNS") And Dokumentart(Dokumentnummer) <> "ER" Then
                        Ziel = Kunde & " - " & Lieferant & " ) " & aktuelle_eMail.Attachments.Item(Z).FileName
                        Call Funktion_Dateiname_bereinigen(Ziel)
                        Ziel = Zielpfad_LB & Ziel
                        aktuelle_eMail.Attachments.Item(Z).SaveAsFile Ziel
                    End If
                End If
            Next Z
            Dokumentnummer = 0
            Rechnungsnummer = ""
            Auftragsnummer = ""
            Maschinennummer = ""
            Kunde = ""
'            aktuelle_eMail.ItemProperties.Read = True
            aktuelle_eMail.UnRead = False
            If Auswahl.Count > 1 Then
                Fortzsetzungszeit = Time + Wartezeit / 24 / 60 / 60
                While Time < Fortzsetzungszeit
    '                MsgBox (Time & Chr(10) & Fortsetzungszeit)
                Wend
            End If
        End If
'        aktuelle_eMail.Move Zielordner
    Next
    Hinweistext = "Es wurden  " & Auswahl.Count & " eMails mit Eingangsrechnungen verarbeitet."
    If Auswahl.Count > 1 Then MsgBox "Es wurden  " & Auswahl.Count & " eMails mit Eingangsrechnungen verarbeitet.", 0, "Analyse PDFs aus markierten eMails"
End Sub

Function Funktion_Dateiname_bereinigen(Ziel)
    While InStr(Ziel, "*") > 1
        Ziel = Left(Ziel, InStr(Ziel, "*\") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "*"))
    Wend
    While InStr(Ziel, "?") > 1
        Ziel = Left(Ziel, InStr(Ziel, "?") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "?"))
    Wend
    While InStr(Ziel, "\") > 1
        Ziel = Left(Ziel, InStr(Ziel, "\") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "\"))
    Wend
    While InStr(Ziel, "/") > 1
        Ziel = Left(Ziel, InStr(Ziel, "/") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "/"))
    Wend
    While InStr(Ziel, "|") > 1
        Ziel = Left(Ziel, InStr(Ziel, "|") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "|"))
    Wend
    While InStr(Ziel, ":") > 1
        Ziel = Left(Ziel, InStr(Ziel, ":") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, ":"))
    Wend
End Function




Und das ist der Code für die Einzelanalyse je nach Absender:

Code: Alles auswählen
Function Funktion_ER_Indelpro(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
    If InStr(Gesamttext, "FACTUUR") > 0 Then
        Rechnungsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "docnr:") - 5)
        If InStr(Rechnungsnummer, "klantnr:") > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, "klantnr:") - 1)
        If InStr(Rechnungsnummer, Chr(10)) > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, Chr(10)) - 1)
        While Left(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
        While Right(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Left(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
        If InStr(Gesamttext, "uw opd:") > 0 Then Auftragsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "uw ref:") - 6)
        If InStr(Auftragsnummer, Chr(10)) > 0 Then Auftragsnummer = Left(Auftragsnummer, InStr(Auftragsnummer, Chr(10)) - 1)
        While Left(Auftragsnummer, 1) = " "
            Auftragsnummer = Right(Auftragsnummer, Len(Auftragsnummer) - 1)
        Wend
        If InStr(Gesamttext, "uw ref:") > 0 Then Bestellnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "uw ref:") - 6)
        If InStr(Bestellnummer, "PO") > 0 Then Bestellnummer = Right(Bestellnummer, Len(Bestellnummer) - InStr(Bestellnummer, "PO") - 1)
        If InStr(Bestellnummer, Chr(10)) > 0 Then Bestellnummer = Left(Bestellnummer, InStr(Bestellnummer, Chr(10)) - 1)
        While Left(Bestellnummer, 1) = " "
            Bestellnummer = Right(Bestellnummer, Len(Bestellnummer) - 1)
        Wend
        If InStr(Gesamttext, "- -") > 0 Then Maschinennummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "- -") - 2)
        While Left(Maschinennummer, 1) = " " Or Left(Maschinennummer, 1) = "-"
            Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
        Wend
        If InStr(Maschinennummer, " ") > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, " ") - 1)
        If InStr(Maschinennummer, Chr(10)) > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, Chr(10)) - 1)
        If InStr(Gesamttext, "WERFADRES:") > 0 Then Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "WERFADRES:") - 9)
        If InStr(Kunde, Chr(10)) > 0 Then Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
        While Right(Kunde, 1) = " "
            Kunde = Left(Kunde, Len(Kunde) - 1)
        Wend
        While Left(Kunde, 1) = " "
            Kunde = Right(Kunde, Len(Kunde) - 1)
        Wend
        If InStr(Gesamttext, "Onderhoud") > 0 Then
            Kunde = Auftragsnummer
            Auftragsnummer = "Wartung"
            If Maschinennummer <> "" Then Auftragsnummer = Auftragsnummer & " " & Maschinennummer
        End If
    Else
        If InStr(Gesamttext, "WERKBON") > 0 Then
            Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Naam:") - 4)
            If InStr(Kunde, Chr(10)) > 0 Then Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
            While Right(Kunde, 1) = " "
                Kunde = Left(Kunde, Len(Kunde) - 1)
            Wend
            While Left(Kunde, 1) = " "
                Kunde = Right(Kunde, Len(Kunde) - 1)
            Wend
            If InStr(Gesamttext, "Straat:") > 0 Then Kundenadresse = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Straat:") - 6)
            If InStr(Kundenadresse, Chr(10)) > 0 Then Kundenadresse = Left(Kundenadresse, InStr(Kundenadresse, Chr(10)) - 1)
            While Right(Kundenadresse, 1) = " "
                Kundenadresse = Left(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            While Left(Kundenadresse, 1) = " "
                Kundenadresse = Right(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            Kundenort = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Gemeente:") - 8)
            If InStr(Kundenort, Chr(10)) > 0 Then Kundenort = Left(Kundenort, InStr(Kundenort, Chr(10)) - 1)
            While Right(Kundenort, 1) = " "
                Kundenort = Left(Kundenort, Len(Kundenort) - 1)
            Wend
            While Left(Kundenort, 1) = " "
                Kundenort = Right(Kundenort, Len(Kundenort) - 1)
            Wend
            If InStr(Kunde, Kundenort) > 0 Then
                Kunde = Left(Kunde, InStr(Kunde, Kundenort) - 1)
                While Right(Kunde, 1) = " "
                    Kunde = Left(Kunde, Len(Kunde) - 1)
                Wend
            End If
            If Kundenadresse <> "" Then Kunde = Kunde & ", " & Kundenadresse
            If Kundenort <> "" Then Kunde = Kunde & ", " & Kundenort
        Else
            If Environ("USERNAME") = "r.thielmann" And Frage = 6 Then MsgBox ("Lieferant " & Chr(9) & Lieferant & Chr(10) & Chr(10) & "gescanntes PDF!" & Chr(10) & Chr(10) & "Kunde     " & Chr(9) & Kunde & Chr(10) & "Maschine " & Chr(9) & Maschinennummer & Chr(10) & "Auftrag   " & Chr(9) & Auftragsnummer & Chr(10) & "Bestellung   " & Chr(9) & Bestellnummer & Chr(10) & "Rechnung " & Chr(9) & Rechnungsnummer)
        End If
    End If
End Function

Function Funktion_ER_MundH(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
    If InStr(Gesamttext, "Factuur") > 0 Then
        Rechnungsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Factuurnum m er") - 14)
        If InStr(Rechnungsnummer, Chr(10)) > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, Chr(10)) - 1)
        While Left(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
        If InStr(Gesamttext, "Uw opdracht") > 0 Then Auftragsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Uw referentie") - 12)
        If InStr(Auftragsnummer, Chr(10)) > 0 Then Auftragsnummer = Left(Auftragsnummer, InStr(Auftragsnummer, Chr(10)) - 1)
        While Left(Auftragsnummer, 1) = " "
            Auftragsnummer = Right(Auftragsnummer, Len(Auftragsnummer) - 1)
        Wend
        If InStr(Gesamttext, "Uw referentie") > 0 Then Bestellnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Uw referentie") - 12)
        If InStr(Bestellnummer, Chr(10)) > 0 Then Bestellnummer = Left(Bestellnummer, InStr(Bestellnummer, Chr(10)) - 1)
        While Left(Bestellnummer, 1) = " "
            Bestellnummer = Right(Bestellnummer, Len(Bestellnummer) - 1)
        Wend
        If InStr(Gesamttext, "Machinenr:") > 0 Then Maschinennummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Machinenr:") - 9)
        If InStr(Maschinennummer, Chr(10)) > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, Chr(10)) - 1)
        While Left(Maschinennummer, 1) = " "
            Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
        Wend
        If InStr(Gesamttext, "Onderhoud") > 0 Then
            Kunde = Auftragsnummer
            Auftragsnummer = "Wartung"
            If Maschinennummer <> "" Then Auftragsnummer = Auftragsnummer & " " & Maschinennummer
        End If
    Else
        If InStr(Gesamttext, "Werkrapport") > 0 Then
            Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Naam") - 3)
            If InStr(Kunde, "Naam monteur") > 0 Then Kunde = Left(Kunde, InStr(Kunde, "Naam monteur") - 1)
            If InStr(Kunde, Chr(10)) > 0 Then Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
            While Right(Kunde, 1) = " "
                Kunde = Left(Kunde, Len(Kunde) - 1)
            Wend
            While Left(Kunde, 1) = " "
                Kunde = Right(Kunde, Len(Kunde) - 1)
            Wend
            Kundenadresse = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Adres") - 4)
            If InStr(Kundenadresse, "Type machine") > 0 Then Kundenadresse = Left(Kundenadresse, InStr(Kundenadresse, "Type machine") - 1)
            If InStr(Kundenadresse, Chr(10)) > 0 Then Kundenadresse = Left(Kundenadresse, InStr(Kundenadresse, Chr(10)) - 1)
            While Right(Kundenadresse, 1) = " "
                Kundenadresse = Left(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            While Left(Kundenadresse, 1) = " "
                Kundenadresse = Right(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            Kundenort = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Woonplaats") - 9)
            If InStr(Kundenort, "Machinenummer") > 0 Then Kundenort = Left(Kundenort, InStr(Kundenort, "Machinenummer") - 1)
            If InStr(Kundenort, Chr(10)) > 0 Then Kundenort = Left(Kundenort, InStr(Kundenort, Chr(10)) - 1)
            While Right(Kundenort, 1) = " "
                Kundenort = Left(Kundenort, Len(Kundenort) - 1)
            Wend
            While Left(Kundenort, 1) = " "
                Kundenort = Right(Kundenort, Len(Kundenort) - 1)
            Wend
            If InStr(Kunde, Kundenort) > 0 Then
                Kunde = Left(Kunde, InStr(Kunde, Kundenort) - 1)
                While Right(Kunde, 1) = " "
                    Kunde = Left(Kunde, Len(Kunde) - 1)
                Wend
            End If
            If Kundenadresse <> "" Then Kunde = Kunde & ", " & Kundenadresse
            If Kundenort <> "" Then Kunde = Kunde & ", " & Kundenort
            If InStr(Gesamttext, "Uw referentie") > 0 Then Auftragsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Uw referentie") - 12)
            If InStr(Auftragsnummer, Chr(10)) > 0 Then Auftragsnummer = Left(Auftragsnummer, InStr(Auftragsnummer, Chr(10)) - 1)
            While Left(Auftragsnummer, 1) = " "
                Auftragsnummer = Right(Auftragsnummer, Len(Auftragsnummer) - 1)
            Wend
            If InStr(Gesamttext, "Machinenummer") > 0 Then Maschinennummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Machinenummer") - 12)
            If InStr(Maschinennummer, Chr(10)) > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, Chr(10)) - 1)
            While Left(Maschinennummer, 1) = " "
                Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
            Wend
        Else
            If Environ("USERNAME") = "r.thielmann" And Frage = 6 Then MsgBox ("Lieferant " & Chr(9) & Lieferant & Chr(10) & Chr(10) & "gescanntes PDF!" & Chr(10) & Chr(10) & "Kunde     " & Chr(9) & Kunde & Chr(10) & "Maschine " & Chr(9) & Maschinennummer & Chr(10) & "Auftrag   " & Chr(9) & Auftragsnummer & Chr(10) & "Bestellung   " & Chr(9) & Bestellnummer & Chr(10) & "Rechnung " & Chr(9) & Rechnungsnummer)
        End If
    End If
End Function
Function Funktion_ER_VNS(Gesamttext, Lieferant, Kunde, Maschinennummer, Auftragsnummer, Bestellnummer, Rechnungsnummer, Frage)
    If InStr(Gesamttext, "FACTUUR") > 0 Then
        Rechnungsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "PO NR") - 4)
        If InStr(Rechnungsnummer, Chr(10)) > 0 Then Rechnungsnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - InStr(Rechnungsnummer, Chr(10)))
        If InStr(Rechnungsnummer, Chr(10)) > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, Chr(10)) - 1)
        If InStr(Rechnungsnummer, " / ") > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, " / ") - 1) & "-" & Right(Rechnungsnummer, Len(Rechnungsnummer) - InStr(Rechnungsnummer, " / ") - 2)
        If InStr(Rechnungsnummer, "/") > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, "/") - 1) & "-" & Right(Rechnungsnummer, Len(Rechnungsnummer) - InStr(Rechnungsnummer, "/"))
        Bestellnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - InStr(Rechnungsnummer, " "))
        While Left(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
        If InStr(Rechnungsnummer, " ") > 0 Then Rechnungsnummer = Left(Rechnungsnummer, InStr(Rechnungsnummer, " ") - 1)
        Auftragsnummer = "Reparatur"
        If Auftragsnummer = "Reparatur" And (InStr(Gesamttext, "onderhoud") > 0 Or InStr(Gesamttext, "maintenance") > 0 Or InStr(Gesamttext, "Maintenance") > 0) Then Auftragsnummer = "Wartung"
        If InStr(Gesamttext, "bestellung") > 0 Then Bestellnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "bestellung") - 9)
        While Left(Bestellnummer, 1) = " "
            Bestellnummer = Right(Bestellnummer, Len(Bestellnummer) - 1)
        Wend
        If InStr(Bestellnummer, " ") > 0 Then Bestellnummer = Left(Bestellnummer, InStr(Bestellnummer, " ") - 1)
        If InStr(Bestellnummer, Chr(10)) > 0 Then Bestellnummer = Left(Bestellnummer, InStr(Bestellnummer, Chr(10)) - 1)
        While InStr(Bestellnummer, " ") > 0
            Bestellnummer = Left(Bestellnummer, InStr(Bestellnummer, " ") - 1) & Right(Bestellnummer, Len(Bestellnummer) - InStr(Bestellnummer, " "))
        Wend
        If (Mid(Bestellnummer, 3, 1) = "/" Or Mid(Bestellnummer, 3, 1) = "-" Or Mid(Bestellnummer, 3, 1) = ".") And (Mid(Bestellnummer, 6, 3) = "/20" Or Mid(Bestellnummer, 6, 3) = "-20" Or Mid(Bestellnummer, 6, 3) = ".20") Then Bestellnummer = Right(Bestellnummer, Len(Bestellnummer) - 10)
        If Bestellnummer = "" And Auftragsnummer = "Wartung" Then Bestellnummer = "Wartung"
       
        If InStr(Gesamttext, "LEVERINGSADRES:") > 0 Then Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "LEVERINGSADRES:") - 14)
        If InStr(Kunde, Chr(10)) > 0 Then Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
        While Left(Kunde, 1) = " "
            Kunde = Right(Kunde, Len(Kunde) - 1)
        Wend
        If Kunde = "" Then
            Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Totaal") - 5)
            While Left(Kunde, 1) = Chr(10)
                Kunde = Right(Kunde, Len(Kunde) - 1)
            Wend
            Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
            If InStr(Format(Kunde, ">"), " BON ") > 0 Then Kunde = Left(Kunde, InStr(Format(Kunde, ">"), " BON ") - 1)
            If InStr(Format(Kunde, ">"), "ONDERHOUD") > 0 Then Kunde = Left(Kunde, InStr(Format(Kunde, ">"), "ONDERHOUD") - 1) & Right(Kunde, Len(Kunde) - InStr(Format(Kunde, ">"), "ONDERHOUD") - 8)
            While Left(Kunde, 1) = " "
                Kunde = Right(Kunde, Len(Kunde) - 1)
            Wend
        End If
        Maschinennummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Totaal") - 5)
        While Left(Maschinennummer, 1) = Chr(10)
            Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
        Wend
        Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, Chr(10)) - 1)
        While InStr(Format(Maschinennummer, ">"), " NR ") > 0
            Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - InStr(Format(Maschinennummer, ">"), " NR ") - 3)
        Wend
        While Left(Kunde, 1) = " "
            Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
        Wend
        If InStr(Maschinennummer, " ") > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, " ") - 1)
        If InStr(Gesamttext, "maintenance") > 0 Then
            Kunde = Auftragsnummer
            Auftragsnummer = "Wartung"
            If Maschinennummer <> "" Then Auftragsnummer = Auftragsnummer & " " & Maschinennummer
        End If
    Else
        If InStr(Gesamttext, "Werkrapport") > 0 Then
            Kunde = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Naam") - 3)
            If InStr(Kunde, "Naam monteur") > 0 Then Kunde = Left(Kunde, InStr(Kunde, "Naam monteur") - 1)
            If InStr(Kunde, Chr(10)) > 0 Then Kunde = Left(Kunde, InStr(Kunde, Chr(10)) - 1)
            While Right(Kunde, 1) = " "
                Kunde = Left(Kunde, Len(Kunde) - 1)
            Wend
            While Left(Kunde, 1) = " "
                Kunde = Right(Kunde, Len(Kunde) - 1)
            Wend
            Kundenadresse = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Adres") - 4)
            If InStr(Kundenadresse, "Type machine") > 0 Then Kundenadresse = Left(Kundenadresse, InStr(Kundenadresse, "Type machine") - 1)
            If InStr(Kundenadresse, Chr(10)) > 0 Then Kundenadresse = Left(Kundenadresse, InStr(Kundenadresse, Chr(10)) - 1)
            While Right(Kundenadresse, 1) = " "
                Kundenadresse = Left(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            While Left(Kundenadresse, 1) = " "
                Kundenadresse = Right(Kundenadresse, Len(Kundenadresse) - 1)
            Wend
            Kundenort = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Woonplaats") - 9)
            If InStr(Kundenort, "Machinenummer") > 0 Then Kundenort = Left(Kundenort, InStr(Kundenort, "Machinenummer") - 1)
            If InStr(Kundenort, Chr(10)) > 0 Then Kundenort = Left(Kundenort, InStr(Kundenort, Chr(10)) - 1)
            While Right(Kundenort, 1) = " "
                Kundenort = Left(Kundenort, Len(Kundenort) - 1)
            Wend
            While Left(Kundenort, 1) = " "
                Kundenort = Right(Kundenort, Len(Kundenort) - 1)
            Wend
            If InStr(Kunde, Kundenort) > 0 Then
                Kunde = Left(Kunde, InStr(Kunde, Kundenort) - 1)
                While Right(Kunde, 1) = " "
                    Kunde = Left(Kunde, Len(Kunde) - 1)
                Wend
            End If
            If Kundenadresse <> "" Then Kunde = Kunde & ", " & Kundenadresse
            If Kundenort <> "" Then Kunde = Kunde & ", " & Kundenort
            If InStr(Gesamttext, "Uw referentie") > 0 Then Auftragsnummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Uw referentie") - 12)
            If InStr(Auftragsnummer, Chr(10)) > 0 Then Auftragsnummer = Left(Auftragsnummer, InStr(Auftragsnummer, Chr(10)) - 1)
            While Left(Auftragsnummer, 1) = " "
                Auftragsnummer = Right(Auftragsnummer, Len(Auftragsnummer) - 1)
            Wend
            If InStr(Gesamttext, "Machinenummer") > 0 Then Maschinennummer = Right(Gesamttext, Len(Gesamttext) - InStr(Gesamttext, "Machinenummer") - 12)
            If InStr(Maschinennummer, Chr(10)) > 0 Then Maschinennummer = Left(Maschinennummer, InStr(Maschinennummer, Chr(10)) - 1)
            While Left(Maschinennummer, 1) = " "
                Maschinennummer = Right(Maschinennummer, Len(Maschinennummer) - 1)
            Wend
        Else
            If Environ("USERNAME") = "r.thielmann" And Frage = 6 Then MsgBox ("Lieferant " & Chr(9) & Lieferant & Chr(10) & Chr(10) & "gescanntes PDF!" & Chr(10) & Chr(10) & "Kunde     " & Chr(9) & Kunde & Chr(10) & "Maschine " & Chr(9) & Maschinennummer & Chr(10) & "Auftrag   " & Chr(9) & Auftragsnummer & Chr(10) & "Bestellung   " & Chr(9) & Bestellnummer & Chr(10) & "Rechnung " & Chr(9) & Rechnungsnummer)
        End If
    End If
End Function


Wir haben natürlich mehr als nur 3 User, die das nutzen. Ich wollte das makro an dieser Stelle aber nicht mit den ganzen Druckerdefinitionen "aufblähen".
Das sind jetzt Textanalysefunktionen für 3 Lieferanten. Aber es müssen noch für einige andere eine derartige Funktion hinzugefügt werden.
Es ist auch damit zu rechnen, dass sich Rechnungen ändern. Dann müsste die Funktion des entsprechenden Lieferanten angepasst werden.
Ich würde in einem solchen Fall gerne das Makro bei mir entwickeln und dann als .bas-Datei im Netzwerk speichern, so dass das (dann erweiterte) Hauptmakro das entsprechende Modul entfernt und durch die zu importierende .bas-Datei ersetzt.

Vielen Dank für jedwede Anregung.

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: Aktualisierung Makros per Makro

Beitragvon HKindler » 23. Sep 2021, 14:09

Hi Rolf,

ich würde mal ganz schnell noch die E-Mail-Adressen in deinem Code unkenntlich machen!

Ansonsten: habe jetzt nicht alles angeschaut, aber ganz schön umständlich programmiert. Gleich mehr dazu.


EDIT:
So jetzt geht's weiter, wollte nur so schnell wie möglich die Warnung los werden.

Zu dem was ich mit umständlich meinte hier nur einige Beispiele:

If Format(Environ("USERNAME"), "<") = "Max" Then
Mal ganz davon abgesehen, dass die Bedingung so nie WAHR wird, da dein Format() niemals Großbuchstaben zurückgeben wird (aber ich gehe davon aus, dass das ein Übertragungsfehler ist), geht das Ganze auch einfacher:
If LCase(Environ("USERNAME")) = "max" Then
Und wenn du Großbuchstaben willst, dann gibt es noch UCase()

Code: Alles auswählen
                    If InStr(Gesamttext, "RECHNUNG") > 0 _
                    Or InStr(Gesamttext, "Rechnung") > 0 _
                    Or InStr(Gesamttext, "INVOICE") > 0 _
                    Or InStr(Gesamttext, "Invoice") > 0 _
                    Or InStr(Gesamttext, "FACTUUR") > 0 _
                    Or InStr(Gesamttext, "Factuur") > 0 Then
geht auch kürzer
Code: Alles auswählen
                    If InStr(1, Gesamttext, "RECHNUNG", vbTextCompare) + _
                    InStr(1, Gesamttext, "INVOICE", vbTextCompare) + _
                    InStr(1, Gesamttext, "FACTUUR", vbTextCompare) Then
Das funktioniert, da alle Zahlen ungleich 0 von VBA als Wahr gewertet werden. Da InStr entweder 0 oder die Position des Textes zurückgibt, kan man hier einfach addieren. Gibt es irgendeinen der werte, hat man irgendetwas >0 und somit ist die Bedingung Wahr. Den Vergleich mit unterschiedlichen Schreibweisen kann man sich durch vbTextCompare sparen (Achtung! Dann muss man auch das 1. Argument, den Startwert, angeben). Alternativ könnten man auch z.B. InStr(UCase(Gesamttext), "RECHNUNG") verwenden.

Code: Alles auswählen
    While InStr(Ziel, "*") > 1
        Ziel = Left(Ziel, InStr(Ziel, "*\") - 1) & "_" & Right(Ziel, Len(Ziel) - InStr(Ziel, "*"))
    Wend
auch das geht effektiver:
Code: Alles auswählen
Ziel = Replace(Ziel, "*", "_")


Und noch etwas vergleichbares:
Code: Alles auswählen
        While Left(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Right(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
        While Right(Rechnungsnummer, 1) = " "
            Rechnungsnummer = Left(Rechnungsnummer, Len(Rechnungsnummer) - 1)
        Wend
wird zu
Code: Alles auswählen
Rechnungsnummer = Trim(Rechnungsnummer)



Soviel mal zu dem, was mir direkt ins Auge gestochen ist. Ich hatte keine Lust, deine Funktionen für die Lieferanten genauer zu analysieren, aber ich denke, dass man das alles auch in eine einzige Funktion packen kann und dieser Funktion dann den Lieferantennamen zu übergeben um dann entweder nach "RECHNUNG", "INVOICE" oder nach "FACTUUR" suchen zu lassen. Eventuell muss man das nicht mal untersccheiden und sucht einfach alle 3 Ereignisse. Wenn ich das richtig sehe, wird ja z.B. die Rechnungsnummer oder die Maschine aus dem Gesamttext extrahiert. Das könnte auch so gehen
Code: Alles auswählen
Function Extrakt(Gesamttext As String, SuchText As String, Optional EndText As String = " ") As String
Dim Pos As Long
Dim tmp As String
Pos = InStr(LCase(Gesamttext), LCase(SuchText))
tmp = Mid(Gesamttext, Pos + Len(SuchText))
tmp = Trim(tmp)
Pos = InStr(LCase(tmp), LCase(EndText))
If Pos Then tmp = Left(tmp, Pos -1)
Extrakt = tmp
End Function
Diese Funktion liefert dir alles zwischen SuchText ( + folgende Leerzeichen) und dem nächsten Leerzeichen bzw. EndText.
Alternativ könntest du auch auf RegularExpressions zurückgreifen. Aber das ist ein anderes Thema.
Somit brauchst du keine eigene Funktion für jeden Lieferanten. Wenn du die Rechnungsnummer eines englischen Liferanten haben willst, dann lautetet der Aufruf Rechnungsnummer = Extrakt(Gesamttext, "Invoice")
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6294
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Aktualisierung Makros per Makro

Beitragvon RTausD » 02. Okt 2021, 18:55

Hallo Hellmut,

VIELEN DANK für die Tipps zu meiner Programmierung.
Ich werde mir das anschauen und das ein oder andere übernehmen.

Aber das eigentliche Problem, wie ich die Makrus/Funktionen austauschen kann, ist damit leider noch nicht gelöst.

Hat jemand eine Idee, wie das funktionieren könnte?

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: Aktualisierung Makros per Makro

Beitragvon Gast » 03. Okt 2021, 00:16

Hallo Rolf,

aus gutem Grund geht das in Outlook nicht, denn das wäre ein riesen Sicherheitsproblem.

Gruß Ulrich
Gast
 

Re: Aktualisierung Makros per Makro

Beitragvon RTausD » 05. Okt 2021, 20:25

Hallo Ulrich,

warum wäre es denn ein größeres Sicherheitsproblem, als bei Excel. Da geht es.

Vielleicht hat ja doch jemand eine Idee, wie man das lösen könnte.

Viele Grüße

Rolf
RTausD
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 280
Registriert: 24. Feb 2007, 10:51

Re: Aktualisierung Makros per Makro

Beitragvon knobbi38 » 05. Okt 2021, 21:25

Hallo Rolf,

warum wäre es denn ein größeres Sicherheitsproblem, als bei Excel. Da geht es.

Es ist auch in Excel ein großes Sicherheitsproblem und deshalb in Excel standardmäßig nicht erlaubt. In den Optionen kann man dort andere Sicherheitseinstellungen vornehmen, solange das nicht anderweitig verboten wird, aber dann weiß man ja, was man tut.
Für Outlook, welches täglich mit externen Inhalten, z.T. aus unbekannten Quellen, beaufschlagt wird, wäre so eine allg. Sicherheitsfreigabe fatal.

Auch ist das dynamische Austauschen/Ergänzen von Code eher unüblich. In Kompilersprachen, wo der Code ja nicht so einfach zur Laufzeit geändert werden kann, erstellt man für so etwas ein Regelwerk und entwickelt dafür einen Parser oder ergänzt das System um dynamisch nachladbare oder austauschbare Bibliotheken (DLLs), was in VBA nicht so einfach ist. Diese müßten dann in einer anderen Programmiersprache erstellt werden. Man könnte noch in VBA auf COM-Komponenten (ActiveX) mit Late-Binding ausweichen, ist dann aber m.W. auf 32Bit beschränkt.
Vielleicht gäbe es auch noch eine Möglichkeit mit dem Dotnet Framework, aber da kann ich dir nicht weiterhelfen und dieses würde hier auch den Rahmen des Forums sprengen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3456
Registriert: 02. Jul 2015, 14:23

Re: Aktualisierung Makros per Makro

Beitragvon mmarkus » 06. Okt 2021, 07:42

Die Hinweise in der Dokumentation hast du wahrgenommen?

https://docs.microsoft.com/de-de/outloo ... ba-project

@Ulrich, warum sollen COM Komponenten auf 32Bit beschränkt sein? Die kann man doch erstellen wie man will.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2142
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Aktualisierung Makros per Makro

Beitragvon knobbi38 » 06. Okt 2021, 13:00

@markus:
Ja, sicherlich kann man 64 Bit Komponenten erstellen, aber eben nicht mit VBA/VB6. Da muß man schon auf andere Programmierumgebungen ausweichen. Da habe ich mich vielleicht etwas falsch ausgedrückt.
Auf jeden Fall muß man die Kompatibilität zwischen den 32Bit und 64 Bit Office Versionen beachten.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3456
Registriert: 02. Jul 2015, 14:23

Re: Aktualisierung Makros per Makro

Beitragvon mmarkus » 06. Okt 2021, 21:39

knobbi38 hat geschrieben:@markus:
Ja, sicherlich kann man 64 Bit Komponenten erstellen, aber eben nicht mit VBA/VB6. [/url].


Jetzt verstehe ich das. Die Zeiten ändern sich eben. VB6 ist in Wirklichkeit schon lange obsolet.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2142
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Aktualisierung Makros per Makro

Beitragvon knobbi38 » 06. Okt 2021, 22:24

@markus:
VB6 ist in Wirklichkeit schon lange obsolet

Ja richtig, wird aber immer noch ganz gerne wegen der Ähnlichkeiten zu VBA für die Erstellung von 32Bit ActiveX verwendet.
Was ist eigentlich dein aktuell favorisiertes Framework für die Erstellung von 32/64Bit ActiveX Komponenten?

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3456
Registriert: 02. Jul 2015, 14:23

Re: Aktualisierung Makros per Makro

Beitragvon mmarkus » 07. Okt 2021, 06:09

knobbi38 hat geschrieben:Was ist eigentlich dein aktuell favorisiertes Framework für die Erstellung von 32/64Bit ActiveX Komponenten?


Also beruflich brauche ich das nicht.
Ich verwende derzeit Delphi - > also Rad Studio. Ist halt nicht grade Mainstream.
COM habe ich damit noch nicht geschrieben.
Nutze das für dll und meine asm Programmierung.
Was ich recht nützlich finde ist eine COM-Klasse für Subclassing.
Mit stabilem Subclassing ist ja einiges möglich - die möchte ich gerne für 64 Bit schreiben, da 64 Bit gegenüber 32 Bit für asm Programmierung so viele Vorteile bieten würde.

Wenn würde mich Multithreading interessieren.
Aber ich sehe wenig Sinn darin, dass bei Access reinzuwürgen, wenn man doch gleich mit was Sinnvollem programmieren kann.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2142
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Aktualisierung Makros per Makro

Beitragvon knobbi38 » 07. Okt 2021, 11:08

@markus:
Danke für die Rückmeldung. Delphi ist lange her und ich glaube, in meiner PE-Lizenz ist die Erstellung von ActiveX nicht enthalten.

Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3456
Registriert: 02. Jul 2015, 14:23


Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast