Eigentumsrevision

Hallo zusammen,
Wir verwenden die Revisionstabellen in den MEPs, um den Revisionsindex zu erhöhen und die vorgenommenen Änderungen zu notieren.
Daher befindet sich die Revisions-Eigenschaft in der MEP-Datei.

Ist es möglich, diese Eigenschaft des MEP-Revisionsindexes mit einer Eigenschaft im Teil oder der Baugruppe zu verknüpfen, um sie beispielsweise in Stücklisten hinzuzufügen?

Vielen Dank im Voraus.
Schönen Tag

Hallo @remrem, es ist schon eine Weile her... :grinning:

Wenn Sie Zugriff auf die MyCadTools-Suite haben, ermöglicht Ihnen das Smartproperties-Tool folgendes:

Aber ich empfehle es überhaupt nicht, diese Funktion hat kein Konzept von " Automatisches Update ".
=> Wenn die Zeichnung mit einem neuen Index aktualisiert wird, musst du die Smartproperties auf dieser Zeichnung neu starten, dann das zugehörige 3D öffnen und die Smartproperties erneut neu starten... Das ist ein großes Fehlerpotenzial.

1 „Gefällt mir“

Hallo Remrem,

Ich denke, es wäre nicht ratsam, 3D zu indexieren. Wie nur das 3D schon einmal sagte.

Was wir tun, um ein 3D über ein WWTP an Kunden zu senden, indem wir es mit dem Index und dem Gründungsdatum des WWTP umbenennen.

Ansonsten benutze ein PLM, um das alles zu verwalten...
Es liegt an dir.
@+.
AR.

Ja. In der Tat. Ich bin zurück. :wink:
Ich habe die MyCadTools-Suite nicht...

Tatsächlich ist das Ziel, Fehler zu begrenzen.

Ich verstehe deine Antwort nicht wirklich.
Wenn 3D Spaß macht, warum nicht 3D indexieren?

Nun, es wird ein Risiko von Fehlern geben.
deshalb empfehle ich dir, ein umbenanntes WWTP mit Index und Fertigstellungsdatum zu machen.
Da hast du es...
@+.
AR.

Hallo,
In unserem Land (selbst wenn wir Solidworks PDM haben) ist es das 3D, das den Index in seinen Eigenschaften tragt.
Die Informationen werden in den Zeichnungseigenschaften entweder per Makro oder über den Tresor dupliziert.
Dann gibt es auch Makros, die die Informationen aus der Index-Eigenschaft abrufen, um Exportnamen zu formatieren (STEP, IGES, STL ...)

1 „Gefällt mir“

Danke für deine Antwort, du benutzt keine Überprüfungstabellen?

Nein, nie umgesetzt

Deshalb ist meine Überarbeitung im MEP.
Wenn eine neue Zeile in der Tabelle erstellt wird, wird die Eigenschaft " Revision " automatisch erhöht. Aber sie steht im Europaabgeordneten.

1 „Gefällt mir“

Hallo

Aber was, wenn der Fehler vom Plan kommt, aber nicht vom 3D?

Zu Hause ist es kompliziert geworden :sweat_smile:
Es gibt einen Zimmerindex und einen Planindex.
Wir geben in den allgemeinen Plänen in der Nomenklatur den Index des Werks an. Und auch in den Detailaufnahmen.

Diese Informationen sind unabhängig voneinander.

Wenn sich der 3D-Teil ändert, entwickelt sich das 3D weiter und der Plan steigt zwangsläufig ebenfalls auf.
Wenn sich der Plan entwickelt (z. B. eine Nota oder Ähnliches), steigt der Plan nach Index, aber nicht nach Stück?

Du kannst den Index des Grundrisses und den Raum verknüpfen, du musst eine benutzerdefinierte Eigenschaftskette mit einem anderen Term als dem Index des Plans nachbilden. Dennoch wird der Planindex weiterhin bestehen. Man muss Text, der mit einer Eigenschaft verknüpft ist, im Titelblock und in der Revisionsleiste neu erstellen.

Hallo,

Bei uns ist es genauso wie @Cyril_f : Es ist das 3D, das den Hinweis trägt (was dadurch leicht in der 2D zu finden ist).

Hinweis: In der Praxis haben die beiden einen parallel montierten Index, aber der Hauptindex bleibt der 3D.

Um @FRED78 Frage zu beantworten: Wir geben einen Hinweis auf das 3D, selbst wenn die Modifikation nur in der Praxis am 2D vorgenommen wird (wie das Hinzufügen eines Nota), weil eine kleine Note einen großen Einfluss auf das Teil haben kann (auch wenn sich die 3D-Geometrie nicht ändert).

Was ist der Strang, um diese Eigenschaft zu binden?

@remrem

Vielleicht für den falschen Zweck verwendet, ich dachte an eine Kette von 3D zu MEP, Teil-Montage, Montage und Plan. Und um einen Link (den Hinweis) von 3D auf 2D weiterzuleiten.
Aber ich habe mich wahrscheinlich schlecht ausgedrückt :sweat_smile:

Hier ist ein Makro, das die Eigenschaft " Revision" des Teils oder der Montage durch die "Revision "-Eigenschaft des MEP ersetzt.

Option Explicit
    Dim PrtPath As String
    Dim AsmPath As String


Sub main()
    Dim swApp As SldWorks.SldWorks
    
    Dim swDrawModel As SldWorks.ModelDoc2
    Dim swDrawModelDocExt As ModelDocExtension
    Dim swDrawCustProp As CustomPropertyManager
    Dim swDrawDoc As SldWorks.DrawingDoc
    Dim swDrawView As SldWorks.View
    Dim DrawVal As String
    Dim DrawRevision As String
    Dim DrawBool As Boolean
    
    Dim swRefModel As SldWorks.ModelDoc2
    Dim swRefPath As String
    Dim swRefModelDocExt As ModelDocExtension
    Dim swRefCustProp As CustomPropertyManager
    Dim RefReturn As Integer
    Dim RefBool As Boolean
    Dim RefVal As String
    Dim RefRevision As String
    Dim RefDocType As swDocumentTypes_e
    
    Dim FileError As Long
    Dim FileWarning As Long

    Set swApp = Application.SldWorks
    Set swDrawModel = swApp.ActiveDoc

    If swDrawModel Is Nothing Then
        swApp.SendMsgToUser2 "Ouvrir un fichier mise en plan", swMbWarning, swMbOk
        Exit Sub
    End If

    If swDrawModel.GetType <> swDocDRAWING Then 'swDocASSEMBLY, swDocPART
        swApp.SendMsgToUser2 "Ouvrir un fichier mise en plan", swMbWarning, swMbOk
        Exit Sub
    Else
        RefDocType = RefDocTypeSearch(swDrawModel.GetPathName)
        Select Case RefDocType
            Case swDocPART
                Set swRefModel = swApp.OpenDoc6(PrtPath, swDocPART, swOpenDocOptions_Silent, "", FileError, FileWarning)
                Debug.Print "PrtPath = " & PrtPath
                Debug.Print "FileError = " & FileError
                Debug.Print "FileWarning = " & FileWarning
                
            Case swDocASSEMBLY
                Set swRefModel = swApp.OpenDoc6(AsmPath, swDocASSEMBLY, swOpenDocOptions_Silent, "", FileError, FileWarning)
                Debug.Print "AsmPath = " & AsmPath
                Debug.Print "FileError = " & FileError
                Debug.Print "FileWarning = " & FileWarning
                
        End Select
        
        If Not swRefModel Is Nothing Then
            swRefPath = swRefModel.GetPathName
            If IsFileExist(swRefModel.GetPathName) Then
                Set swDrawModelDocExt = swDrawModel.Extension
                Set swDrawCustProp = swDrawModelDocExt.CustomPropertyManager("")
                
                DrawBool = swDrawCustProp.Get4("Révision", False, DrawVal, DrawRevision)
                Debug.Print "DrawBool = " & DrawBool
                Debug.Print "DrawRevision = " & DrawRevision
                
                Set swRefModelDocExt = swRefModel.Extension
                Set swRefCustProp = swRefModelDocExt.CustomPropertyManager("")
                
                RefReturn = swRefCustProp.Set("Révision", DrawRevision)
                Debug.Print "RefReturn = " & RefReturn
                
                RefBool = swRefCustProp.Get4("Révision", False, RefVal, RefRevision)
                Debug.Print "RefModelPath = " & swRefModel.GetPathName
                Debug.Print "RefBool = " & RefBool
                Debug.Print "RefRevision = " & RefRevision
            End If
        End If
    End If
End Sub
Function RefDocTypeSearch(DrawPath As String) As swDocumentTypes_e
    Dim DrawPathLow As String
    
    DrawPathLow = LCase(DrawPath)
    Debug.Print "DrawPath = " & DrawPath
    Debug.Print "DrawPathLow = " & DrawPathLow
    
    PrtPath = Replace(DrawPathLow, "slddrw", "sldprt")
    AsmPath = Replace(DrawPathLow, "slddrw", "sldasm")
    
    If IsFileExist(PrtPath) Then
        RefDocTypeSearch = swDocPART
        Exit Function
    End If
    If IsFileExist(AsmPath) Then
        RefDocTypeSearch = swDocASSEMBLY
    End If
End Function


Function IsFileExist(FullName As String) As Boolean
  ' Vérifie l'existence d'un fichier
  IsFileExist = Dir(FullName) <> ""
End Function

Assembly-, Part- und MEp-Dateien müssen im selben Ordner liegen

3 „Gefällt mir“

Herzlichen Glückwunsch zum Geburtstag von Forum @remrem :birthday: !

Danke fürs Makroteilen. (Der Schlüssel wird sein, daran zu denken, es regelmäßig :sweat_smile: zu starten).

Seid vorsichtig bei denen, die " Revision " (ohne Akzent) verwenden, es wird notwendig sein, den Code leicht zu ändern...

2 „Gefällt mir“

Danke. :wink:
Ich habe mich 2013 angemeldet und hatte bereits weiße Haare :joy:

2 „Gefällt mir“

Happy Birthday Forum – eines der sehr seltenen, viel älteren als ich!
Und für mich immer noch sehr wenig weiße Haare! :rofl:
image

2 „Gefällt mir“

@remrem habe ich mir die Freiheit genommen, mit deinem Makro zu beginnen, um es etwas " universeller " zu machen (gib mir nicht die Schuld).
Die Änderungen konzentrieren sich hauptsächlich auf doppeltes Lesen
" Überarbeitung " versus " Überarbeitung ".
Ich habe auch die " Perplexity "-KI verwendet, um Textkommentare hinzuzufügen (KIs sind darin immer noch nur gut, aber es ist immer noch sehr praktisch).
Theoretisch ist auch die Kompatibilität mit der Solidworks > Version 2022 erhöht. (aber ich kann nicht testen!).

Tipp:
Für diejenigen, die die " Mycad "-Suite besitzen, soll diese Version mit ihrer Nutzung in Smartproperties kompatibel sein (und daher beim Schließen des Smartproperties-Fensters automatisiert werden können (falls Ihre Änderungen mit diesem Tool generiert werden).
Das sollte das Risiko einer schlechten Überarbeitung zwischen 3D und Zeichnungen erheblich verringern...

Beispiel:

Option Explicit

' =====================================================
' DÉCLARATIONS GLOBALES
' =====================================================
' Ces variables globales stockent les chemins des fichiers pièce (.sldprt) et assemblage (.sldasm)
' détectés automatiquement à partir du chemin de la mise en plan (.slddrw).
' Pourquoi globales ? Pour qu'elles soient accessibles par toutes les fonctions de la macro.
Dim PrtPath As String     ' Chemin complet vers la pièce référencée
Dim AsmPath As String     ' Chemin complet vers l'assemblage référencé

' =====================================================
' PROCÉDURE PRINCIPALE : main()
' =====================================================
' BUT : Synchroniser la propriété "Révision/Revision" de la mise en plan vers son modèle référencé
'       (pièce ou assemblage). Fonctionne avec SolidWorks 2022 et ses spécificités API.
Sub main()
    On Error GoTo GestionErreur    ' Gestion centralisée des erreurs
    
    ' =====================================================
    ' DÉCLARATION DES OBJETS SOLIDWORKS
    ' =====================================================
    ' swApp : Instance principale de SolidWorks (toujours accessible via Application.SldWorks)
    Dim swApp As SldWorks.SldWorks
    ' swDrawModel : Document actif (la mise en plan)
    Dim swDrawModel As SldWorks.ModelDoc2
    ' Extensions et gestionnaires de propriétés personnalisées
    Dim swDrawModelDocExt As ModelDocExtension
    Dim swDrawCustProp As CustomPropertyManager
    ' Modèle référencé (pièce ou assemblage à synchroniser)
    Dim swRefModel As SldWorks.ModelDoc2
    Dim swRefModelDocExt As ModelDocExtension
    Dim swRefCustProp As CustomPropertyManager
    Dim RefDocType As swDocumentTypes_e    ' Type du document référencé
    
    ' =====================================================
    ' VARIABLES UTILITAIRES
    ' =====================================================
    Dim DrawRevision As String    ' Valeur de révision dans la mise en plan
    Dim RefRevision As String     ' Valeur de révision dans le modèle
    Dim PropName As String        ' Nom exact de la propriété (ex: "Revision" ou "Révision")
    Dim FileError As Long         ' Code d'erreur ouverture fichier
    Dim FileWarning As Long       ' Code d'avertissement ouverture fichier
    Dim Msg As String             ' Message informatif
    Dim addRes As Long            ' Résultat de l'ajout de propriété
    
    ' =====================================================
    ' ÉTAPE 1 : CONNEXION À SOLIDWORKS ET VÉRIFICATIONS
    ' =====================================================
    Set swApp = Application.SldWorks           ' Récupère l'instance SolidWorks courante
    Set swDrawModel = swApp.ActiveDoc          ' Document actif = mise en plan
    
    ' Vérification : un document doit être actif
    If swDrawModel Is Nothing Then
        swApp.SendMsgToUser2 "Aucun document actif. Ouvrez une mise en plan.", swMbWarning, swMbOk
        Exit Sub
    End If
    
    ' Vérification : le document actif DOIT être une mise en plan (.slddrw)
    If swDrawModel.GetType <> swDocDRAWING Then
        swApp.SendMsgToUser2 "Le document actif n'est pas une mise en plan.", swMbWarning, swMbOk
        Exit Sub
    End If
    
    ' =====================================================
    ' ÉTAPE 2 : DÉTECTION DU MODÈLE RÉFÉRENCÉ
    ' =====================================================
    ' Recherche automatique du fichier .sldprt ou .sldasm correspondant au .slddrw
    RefDocType = RefDocTypeSearch(swDrawModel.GetPathName)
    If RefDocType = 0 Then
        swApp.SendMsgToUser2 "Aucun modèle référencé trouvé (.sldprt ou .sldasm).", swMbWarning, swMbOk
        Exit Sub
    End If
    
    ' =====================================================
    ' ÉTAPE 3 : OUVERTURE SILENCIEUSE DU MODÈLE
    ' =====================================================
    ' Ouverture sans interface utilisateur (swOpenDocOptions_Silent)
    Select Case RefDocType
        Case swDocPART      ' Pièce
            Set swRefModel = swApp.OpenDoc6(PrtPath, swDocPART, swOpenDocOptions_Silent, "", FileError, FileWarning)
        Case swDocASSEMBLY  ' Assemblage
            Set swRefModel = swApp.OpenDoc6(AsmPath, swDocASSEMBLY, swOpenDocOptions_Silent, "", FileError, FileWarning)
    End Select
    
    ' Vérification ouverture réussie
    If swRefModel Is Nothing Or FileError <> 0 Then
        swApp.SendMsgToUser2 "Échec ouverture modèle.", swMbStop, swMbOk
        Exit Sub
    End If
    
    ' =====================================================
    ' ÉTAPE 4 : LECTURE PROPRIÉTÉS M ISE EN PLAN
    ' =====================================================
    Set swDrawModelDocExt = swDrawModel.Extension
    Set swDrawCustProp = swDrawModelDocExt.CustomPropertyManager("")    ' Propriétés document ("" = niveau document)
    
    ' DÉTECTION INTELLIGENTE du nom exact de la propriété révision
    PropName = DetectRevisionPropertyFixed(swDrawCustProp)
    Debug.Print "=== PROPNAME FINAL : '" & PropName & "' ==="    ' Debug pour développeur
    
    If PropName = "" Then
        swApp.SendMsgToUser2 "Aucune propriété Révision/Revision trouvée.", swMbStop, swMbOk
        GoTo NettoyageSimple
    End If
    
    ' Lecture de la valeur (avec fallback si vide)
    If Not GetCustomPropValue(swDrawCustProp, PropName, DrawRevision) Then
        DrawRevision = "NON_RENSEIGNÉ"    ' Valeur par défaut
        Debug.Print "Valeur mise en plan vide ? fallback"
    End If
    
    Debug.Print "Valeur À SYNCHRONISER : '" & DrawRevision & "'"
    
    ' =====================================================
    ' ÉTAPE 5 : ACCÈS PROPRIÉTÉS MODÈLE RÉFÉRENCÉ
    ' =====================================================
    Set swRefModelDocExt = swRefModel.Extension
    Set swRefCustProp = swRefModelDocExt.CustomPropertyManager("")    ' Propriétés du modèle
    
    ' =====================================================
    ' ÉTAPE 6 : SYNCHRONISATION (CRU DE LA MACRO)
    ' =====================================================
    Debug.Print "--- DÉBUT SYNCHRO ---"
    
    ' ? IMPORTANT SolidWorks 2022 : Force la reconstruction pour rafraîchir les propriétés
    swRefModel.ForceRebuild3 False    ' False = ne pas afficher les messages
    
    ' Test 1 : La propriété existe-t-elle déjà dans le modèle ?
    If GetCustomPropValue(swRefCustProp, PropName, RefRevision) Then
        Debug.Print "  ? Propriété existe : '" & RefRevision & "'"
        If RefRevision <> DrawRevision Then
            Debug.Print "  ? MISE À JOUR nécessaire"
            
            ' Mise à jour de la valeur existante
            Dim setRes As Long
            setRes = swRefCustProp.Set2(PropName, DrawRevision)    ' Set2 = mise à jour
            Debug.Print "  ? Set2 retour : " & setRes
            
            If setRes = 0 Then
                Msg = "? " & PropName & " mise à jour : " & DrawRevision
            Else
                Msg = "? Échec mise à jour " & PropName
            End If
        Else
            Msg = "? Déjà OK : " & PropName & " = " & DrawRevision
        End If
    Else
        Debug.Print "  ? CRÉATION propriété manquante"
        ' Création avec Add2 (stable sur SolidWorks 2022)
        addRes = swRefCustProp.Add2(PropName, swCustomInfoText, DrawRevision)
        Debug.Print "  ? Add2 retour : " & addRes
        
        If addRes = 0 Or addRes = 2 Then    ' 0=OK, 2=existe déjà
            Msg = "? " & PropName & " créée : " & DrawRevision
        Else
            ' Fallback Add3 si Add2 échoue
            addRes = swRefCustProp.Add3(PropName, swCustomInfoText, DrawRevision, 0)
            Debug.Print "  ? Add3 fallback retour : " & addRes
            If addRes = 0 Or addRes = 2 Then
                Msg = "? " & PropName & " créée (Add3) : " & DrawRevision
            Else
                Msg = "? ÉCHEC création " & PropName & " (Add2=" & addRes & ", Add3=" & addRes & ")"
            End If
        End If
    End If
    
    ' Debug.Print "--- SYNCHRO TERMINÉE : " & Msg & " ---"
    ' swApp.SendMsgToUser2 Msg, swMbInformation, swMbOk    ' Décommentez pour voir le résultat

    ' =====================================================
    ' NETTOYAGE : FERMETURE MODÈLE
    ' =====================================================
NettoyageSimple:
    If Not swRefModel Is Nothing Then
        On Error Resume Next      ' Ignore erreurs de fermeture
        swApp.CloseDoc swRefModel.GetPathName    ' Ferme sans sauvegarde
        On Error GoTo 0           ' Restaure gestion erreurs normale
    End If
    Exit Sub

    ' =====================================================
    ' GESTION D'ERREUR CENTRALE
    ' =====================================================
GestionErreur:
    swApp.SendMsgToUser2 "Erreur : " & Err.Description, swMbStop, swMbOk
    Debug.Print "ERREUR # " & Err.Number & " : " & Err.Description
    Resume NettoyageSimple    ' Nettoyage avant sortie
End Sub

' =====================================================
' FONCTION : DetectRevisionPropertyFixed()
' =====================================================
' BUT : Détecte intelligemment le nom exact de la propriété révision
'       Teste d'abord "Revision" ? "Révision" ? scan complet des propriétés
Function DetectRevisionPropertyFixed(CustMgr As CustomPropertyManager) As String
    Dim propNames As Variant
    Dim i As Long
    Dim PropName As String
    Dim propVal As String
    
    Debug.Print "=== SCAN COMPLET ==="
    
    ' 1?? PRIORITÉ 1 : Test direct "Revision" (standard anglais)
    If CustMgr.Get4("Revision", False, "", propVal) Then
        DetectRevisionPropertyFixed = "Revision"
        Debug.Print "? DIRECT : Revision"
        Exit Function
    End If
    
    ' 2?? PRIORITÉ 2 : Test "Révision" (standard français)
    If CustMgr.Get4("Révision", False, "", propVal) Then
        DetectRevisionPropertyFixed = "Révision"
        Debug.Print "? DIRECT : Révision"
        Exit Function
    End If
    
    ' 3?? PRIORITÉ 3 : Scan complet de TOUTES les propriétés
    propNames = CustMgr.GetNames    ' Tableau des noms de propriétés
    Debug.Print "Nb props: " & IIf(IsEmpty(propNames), 0, UBound(propNames) + 1)
    
    If Not IsEmpty(propNames) Then
        For i = 0 To UBound(propNames)
            PropName = CStr(propNames(i))
            Debug.Print "Prop " & i & ": '" & PropName & "'"
            ' Recherche insensible à la casse contenant "revision"
            If InStr(LCase(PropName), "revision") > 0 Then
                DetectRevisionPropertyFixed = PropName
                Debug.Print "? TROUVÉ : '" & PropName & "'"
                Exit Function
            End If
        Next i
    End If
    
    Debug.Print "? RIEN TROUVÉ"
    DetectRevisionPropertyFixed = ""    ' Aucune propriété trouvée
End Function

' =====================================================
' FONCTION : GetCustomPropValue()
' =====================================================
' BUT : Lit une propriété personnalisée avec gestion des valeurs vides
' RETOUR : True si propriété existe, False sinon
Function GetCustomPropValue(CustMgr As CustomPropertyManager, PropName As String, ByRef PropValue As String) As Boolean
    Dim res As Boolean
    Dim valOut As String, valEval As String    ' valEval = valeur évaluée (résolue)
    
    On Error Resume Next    ' Ignore erreurs Get4
    res = CustMgr.Get4(PropName, False, valOut, valEval)    ' Lecture propriété
    On Error GoTo 0         ' Restaure gestion erreurs
    
    Debug.Print "  Get4('" & PropName & "') ? res=" & res & " | val='" & valEval & "'"
    
    If res Then
        PropValue = IIf(valEval = "", "VIDE", valEval)    ' Gère les valeurs vides
        GetCustomPropValue = True
    Else
        PropValue = ""
        GetCustomPropValue = False
    End If
End Function

' =====================================================
' FONCTION : RefDocTypeSearch()
' =====================================================
' BUT : Détecte si le chemin .slddrw pointe vers .sldprt OU .sldasm
'       Remplit les variables globales PrtPath/AsmPath
Function RefDocTypeSearch(DrawPath As String) As swDocumentTypes_e
    Dim DrawPathLow As String
    DrawPathLow = LCase(DrawPath)    ' Minuscules pour comparaison
    
    ' Conversion automatique des noms de fichiers
    PrtPath = Replace(DrawPathLow, "slddrw", "sldprt")    ' Mise en plan ? Pièce
    AsmPath = Replace(DrawPathLow, "slddrw", "sldasm")    ' Mise en plan ? Assemblage
    
    Debug.Print "Test pièce : " & PrtPath & " ? " & IIf(IsFileExist(PrtPath), "OK", "KO")
    Debug.Print "Test assem : " & AsmPath & " ? " & IIf(IsFileExist(AsmPath), "OK", "KO")
    
    If IsFileExist(PrtPath) Then
        RefDocTypeSearch = swDocPART
        Exit Function
    End If
    If IsFileExist(AsmPath) Then
        RefDocTypeSearch = swDocASSEMBLY
    End If    ' Retourne 0 si aucun fichier trouvé
End Function

' =====================================================
' FONCTION UTILITAIRE : IsFileExist()
' =====================================================
' BUT : Teste l'existence d'un fichier sur disque
Function IsFileExist(FullName As String) As Boolean
    IsFileExist = (Dir(FullName) <> "")          ' VBA standard : Dir retourne "" si fichier inexistant
End Function

2 „Gefällt mir“

Ich gebe dir keine Schuld.
KI ist gut, aber verstehst du, was sie bewirkt? :wink:
Die Kommentare enthalten manchmal Fragen, weil sie nicht alles versteht, und manche Elemente stechen mir in die Augen, wie das " On error ", das man vermeiden sollte, weil es nicht erlaubt, die Mängel zu finden.
Mein Code ist sicherlich nicht erschöpfend, aber das Fehlermanagement durch das Management ermöglicht es mir (es wird erwartet), den Benutzer entsprechend den Fehlern zu benachrichtigen.

1 „Gefällt mir“