Forum:CATIA V5 Programmierung
Thema:Makro-Version abfragen
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Diesaster

Beiträge: 58 / 0

Hallo Community,

hat jemand für mich eventuell einen Denkanstoß oder ähnliches?

Was ich versuchen möchte:

Ich habe in Excel eine Tabelle, welche via VBA in eine Zeichnung in Catia überführt wird.
Für den Fall, dass Fehler im Programm enthalten sind, welche nur durch reichliches Testen in Erfahrung gebracht warden können, möchte ich eine Makro-Versions-Prüfung einbinden.

Es kann durchaus der Fall sein, dass zum Beispiel die Excel-Datei in die Zeichnung als Objekt eingebunden ist.

Hierzu meine Frage:

Wenn ich das Makro aktualisiere und zum Beispiel einen Index (Version 1.0 zu Version 1.1) erhöhe, dann soll entsprechend eine Meldung angezeigt werden, wenn eine ältere Version des Excel-Programmes verwendet wird. Die aktuelle Excel-Datei wird sich aller Wahrscheinlichkeit nach global auf einem Netzwerk befinden.
Es soll also jedes Mal, wenn eine eingebundene Excel-Datei geöffnet wird, überprüft werden, ob das Makro, welches dahinter steckt noch das aktuellste ist.

Hat hierzu jemand einen Denkanstoß oder vielleicht sogar ähnliches schon einmal programmiert?

Danke für eure Antworten!

Gruß
Diesaster

bgrittmann

Beiträge: 10897 / 18

CATIA V5R19

Servus

Also ganz klar ist mir nicht was du vor hast.
Wo befindet sich das Makro? Nur in der Excel-Mappe? hast du mehrere Makro die miteinander "sprechen"? Wie wird das Makro ausgelöst?

Meine Ideen dazu:
- Makro aus der Excel-Mappe raus lösen, und nur zB als CATVba in einem globalen Verzeichnis ablegen. Dann ist immer nur die neuste Version vorhanden
- In der Initialisierung der Makro einen Versionscheck einbauen. Die Aktuelle Version könntest du zB als Parameter im Environment ablegen

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Diesaster

Beiträge: 58 / 0

Hallo bgrittmann,

Das Makro befindet sich in der Excel-Mappe selbst. Es ist nur ein Makro in der Mappe mit mehreren Modulen. Das Makro wird über Textfelder ausgelöst.

Zitat:
Makro aus der Excel-Mappe raus lösen, und nur zB als CATVba in einem globalen Verzeichnis ablegen. Dann ist immer nur die neuste Version vorhanden

Zum einen ist eine CATVBA schlecht, da nicht jeder Rechner die VBA-Application in Catia installiert hat. -> Müsste wenn erst installiert warden.
Zum anderen ist die Tabelle in Excel ein Standard, der auf die Zeichnung gebracht wird. Dieser kann sich ändern und somit sind Bezeichnungen in der Tabelle veränderlich und nicht nur das Makro.

Zitat:
In der Initialisierung der Makro einen Versionscheck einbauen. Die Aktuelle Version könntest du zB als Parameter im Environment ablegen

Genau so etwas wäre die Richtung, in die ich gerne ansetzen würde. Falls du einen Parameter in Catia meinst, so ist das denke ich weniger gut. Es sollte nach Möglichkeit automatisch passieren. Eine Idee von mir ist es, in einem Tabellenblatt, in dem sich Einstellungen befinden eine Zelle mit der Version einzutragen.

Aber hier stellt sich die Frage:

Wie schaffe ich es die im globalen Verzeichnis liegende Datei mit der verwendeten Datei zu vergleichen, ohne dass der Benutzer etwas davon mit bekommt. Es soll nur eine Meldung erscheinen, wenn Differenzen vorliegen.

Eine zweites, eventuelles Problem, ist: Was passiert wenn die Datei im globalen Verzeichnis im Moment von einem anderen Benutzer verwendet wird. Kann dann trotzdem eine Überprüfung stattfinden?

Noch eine Frage, die hinzu kommen würde, ist: Kann ein als Objekt in die Zeichnung eingebettetes Excel auch auf neuere Version überprüft warden?

Danke für deine Antwort. Entschuldige die spate Rückmeldung.

Gruß
Diesaster

Randle

Beiträge: 558 / 0

Win7 Pro x64/Win10
CATIA V5 R18, R19, R21, R24, R26

Hallo,

du könntest eine einfache Textdatei zentral (für jeden Anwender erreichbar) ablegen. Entweder schreibst du die aktuell gültige Version in die Datei oder benennst die Datei entsprechend. Beim Start des Makros könntest du die aktuell gültige Version mit einer Variablen/Konstanten innerhalb des Quellcodes vergleichen. Wenn ungleich, dann Meldung/Abbruch.

Habe dieses Prinzip schon mehrfach verwendet, ohne Probleme.

Gruß
Randle

------------------
Wer für nichts steht, fällt für alles!

Diesaster

Beiträge: 58 / 0

Hallo Randle,

danke für die Idee. Das könnte genau das sein, wonach ich gesucht habe!

Hätte ich auch selbst darauf kommen können.

Gruß
Diesaster

C.Samer

Beiträge: 70 / 0

Hey, du kannst auch direkt aus dem Makro die Version auslesen.
Habe das mal so in einem alten VBA Projekt verwendet und würde es jetzt so nicht
mehr machen (vor allem da ich jetzt nur noch in CATScript programmiere) aber vielleicht hilft es dir ja!

Copy Paste:

Code:

Attribute VB_Name = "ProjectName"
Option Explicit
Global Const glbProject = "ProjectName"
Global Const glbVersion = "1.2"
Global Const glbLanguage = "VBA"
Global Const glbAuthor = "Samer Christoph"
Global Const glbCompany = "Max Mustermann GmbH"
Global Const glbCreationDate = "23.March.2015, 12:00"
Global Const glbLastUpdate = "13.April.2015, 09:15"

Function CheckVersion()
    On Error Resume Next
        Dim strVerFile As String
        strVerFile = "Y:\CatiaMakros\" & glbProject & "\" & glbProject & ".bas"
        If CATIA.FileSystem.FileExists(strVerFile) Then
            Dim objFile As File
            Dim objTextStream As TextStream
            Set objFile = CATIA.FileSystem.GetFile(strVerFile)
            Set objTextStream = objFile.OpenAsTextStream("ForReading")
            Dim intCountLine As Integer
            intCountLine = 0
            Dim strVerLine As String
            For intCountLine = 0 To 20
                strVerLine = objTextStream.ReadLine
                If InStr(strVerLine, "Global Const glbVersion = ") Then
                    strVerLine = Split(strVerLine, "Global Const glbVersion = " & Chr(34))(1)
                    strVerLine = Split(strVerLine, Chr(34))(0)
                    If strVerLine <> CStr(glbVersion) Then
                        MsgBox "New version of this macro available." & vbCrLf & vbCrLf & _
                        "Your version:" & vbTab & CStr(glbVersion) & vbCrLf & _
                        "Newest version:" & vbTab & strVerLine
                        objTextStream.Close
                        End
                    Else
                        objTextStream.Close
                        Exit Function
                    End If
                End If
            Next
                If intCountLine >= 20 Then
                    MsgBox "An error occured while checking for macro-updates", vbExclamation, "Version Entry not found"
                    objTextStream.Close
                    End
                End If
        End If
        If Err.Number <> 0 Then
            MsgBox "An error occured while checking for macro-updates", vbExclamation, "General Error"
            objTextStream.Close
            Err.Clear
            End
        End If
    On Error GoTo 0
End Function


Gruß,
Christoph

[Diese Nachricht wurde von C.Samer am 27. Sep. 2018 editiert.]

Diesaster

Beiträge: 58 / 0

Hallo C.Samer,

herzlichen Dank für den Code. Die Idee bzw. Programmierung finde ich sehr hilfreich.

Gruß
Diesaster