Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Verweis auf DVB-Projekt während Laufzeit setzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
Autor Thema:  Verweis auf DVB-Projekt während Laufzeit setzen (1510 mal gelesen)
jemuehh
Mitglied
Selbstständig


Sehen Sie sich das Profil von jemuehh an!   Senden Sie eine Private Message an jemuehh  Schreiben Sie einen Gästebucheintrag für jemuehh

Beiträge: 24
Registriert: 16.03.2006

erstellt am: 11. Apr. 2009 11:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

Ich habe ein Problem und weiß nicht, wie is dieses lösen soll.

Ich habe ca. 150 DVB-Projekte. In jedem Projekt ist ein Verweis gesetzt zu der Datei SYSTEM.DVB

Wenn ich nun meine DVB's auf einem anderen System installiere, ist natürlich der Pfad zur SYSTEM.DVB verschieden zu dem Pfad, wie er auf meiner Ursprungsmaschine ist.

Die Prozeduren un den DVB's werden über Lisp getriggert. Nach der Triggerung wird das entsprechende Projekt geladen und die Prozedur ausgeführt. Ich habe eine Methode entwickelt, den Pfad zum Verweis während der Laufzeit zu setzen.

Bei jedem Prozedurstart wird folgender Code durchlaufen:

Public Sub defun_ASlink()

Dim objProject As VBProject
Dim objProjects As VBProjects
Dim ASroot As String
Dim ASverweis As String
Dim ASpath As String
Dim i As Integer
Dim z As Integer

    On Error Resume Next
    ASroot = "SUBPROZEDUR"
   
    For z = 1 To 1
        Select Case z
            Case Is = 1
                ASpath = Environ("appdata") & "\SYSTEM.dvb"
        End Select
        Set objProjects = Application.VBE.VBProjects
        For i = 1 To objProjects.Count
            Set objProject = objProjects.Item(i)
            If objProject.Name = ASroot Then
                objProject.References.AddFromFile (ASpath)
                ASpath = objProject.FileName
                objProject.SaveAs ASpath
                Exit For
            End If
        Next i
    Next z

End Sub

Das funktioniert schon ganz gut, aber das "objProject.SaveAs ASpath" triggert eine Fehlermeldung. Vorerst stört mich das aber nicht weiter

Wenn ich nun meine Projekte auf einer anderen Maschine (mit einem anderen Pfad zur SYSTEM.DVB) installiere, erhalte ich bei der Ausführung verschiedene Resultate.
Dies ist abhängig davon, ob ich den Original-Verweis in meinem Projekt lösche oder drin lasse und ob ich das Projekt Sperre oder offen lasse.

1) - Project gesperrt
    - referenz zu SYSTEM.DVB gesetzt
    ---> nach Triggerung von Commando
            - startup error message "File-Path not found" (PROBLEM!)
            - danach alles super (OK!)
            - beim Beenden von ACAD keine Nachricht (OK!)

2) - Project gesperrt
    - referenz zu SYSTEM.DVB gelöscht
    ---> nach Triggerung von Commando
            - Fenster zur Eingabe des Passwords erscheint (PROBLEM!)
            - danach alles super (OK!)
            - beim Beenden von ACAD erscheint Nachricht, ob Projekt gespeichert werden soll (PROBLEM!)

3) - Project frei
    - referenz zu SYSTEM.DVB gesetzt
    ---> nach Triggerung von Commando
            - keine Nachricht (OK!)
            - danach alles super (OK!)
            - beim Beenden von ACAD keine Nachricht (OK!)
            - SO SOLL ES SEIN, ABER DAS PROJEKT MUSS LOCKED SEIN!!!

4) - Project frei
    - referenz zu SYSTEM.DVB gelöscht
    ---> nach Triggerung von Commando
            - keine Nachricht (OK!)
            - danach alles super (OK!)
            - beim Beenden von ACAD erscheint Nachricht, ob Projekt gespeichert werden soll (PROBLEM!)


Um das Speichern beim Shutdown von ACAD abzufangen, habe ich mir folgendes Überlegt:

Private Sub AcadDocument_BeginClose()

    Dim objProject As VBProject
    Dim objProjects As VBProjects
    Dim ASpath As String
    On Error Resume Next
    Set objProjects = Application.VBE.VBProjects
    For laenge = 1 To objProjects.count
        Set objProject = objProjects.Item(laenge)
        ASpath = objProject.FileName
        If objProject.Saved = False Then
            objProject.SaveAs ASpath
        End If
    Next laenge

end sub

Aber wie bereits angesprochen, das "objProject.SaveAs ASpath" triggert eine Fehlermeldung.


Ich habe wirklich keine Idee mehr, was man da noch tun könnte.
Hat jemand von euch eine Idee oder Erfahrung damit???

Besten Dank aus Köln,
Jens

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 11. Apr. 2009 21:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Jens,

ich hab's nicht probiert (die Konstellation ist mir ein wenig zu viel um sie nachzubauen  ), aber als Idee hätte ich mal probiert:

Verzichte auf Verweise setzen, es sollte reichen, wenn Du dafür sorgt, dass Dein SYSTEM.DVB geladen wird, dann solltest Du Klassen/Funktionen/Sub's direkt verwenden können, im Notfall mit LateBinding.

Damit fallen alle Probleme mit 'Modul gesperrt', 'beim Beenden Frage nach speichern', ... weg.

Lass uns/mich wissen, wenn ich mich täuschen sollte.

- alfred -

------------------
www.hollaus.at

jemuehh
Mitglied
Selbstständig


Sehen Sie sich das Profil von jemuehh an!   Senden Sie eine Private Message an jemuehh  Schreiben Sie einen Gästebucheintrag für jemuehh

Beiträge: 24
Registriert: 16.03.2006

erstellt am: 13. Apr. 2009 11:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Alfred,

danke für Deine schnelle Antwort!

Nun, die SYSTEM.DVB ist immer geladen und als Projekt in VBA vorhanden.
Wenn ich nun aus einem anderen Projekt ohne den Verweis auf eine Prozedur in der SYSTEM.DVB zugreifen will, sagt mir VBA natürlich, dass die Prozedur nicht definiert ist. Soweit ich weiß geschieht diese Definition über den Verweis auf die SYSTEM.DVB. Gibts da mit LateBinding eine Möglichkeit, dieses zu umgehen. Wie funktioniert sowas?

Besten Dank!

Viele Grüße aus Köln,
jens

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 13. Apr. 2009 23:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Jens,

ich muss mich wohl korrigieren, hab das mit dem Aufrufen ohne Verweise falsch im Kopf gehabt. Eigentlich war ich der Meinung, wenn es schon geladen ist, dass ich dann mit Punkt-Notation durch <ProjektName>.<ModulName>.<SubName> hinkomm, so sorry, mein Fehler 

Aber beim Schmökern (ob nämlich obiger Gedanke nicht doch irgendwie gehen könnte) ist mir eine Variante eingefallen, die Dir ev. hilft: Mit 'Microsoft Visual Basic for Applications Extensibility' (welches Du schon durch VBE.xxx verwendest) hast Du auch die Möglichkeit, aus Deiner SYSTEM.DVB die Codezeilen in Dein 'laufendes DVB' zu kopieren, dann gibt's auch mit dem Referenzieren kein Problem, da ja alles in einem Projekt läuft.

Das 'laufende DVB' kannst Du dann unter einen temporären Namen Speichern, damit wird auch beim Beenden von AutoCAD nicht mehr nach speichern gefragt.

HTH, - alfred -

------------------
www.hollaus.at

jemuehh
Mitglied
Selbstständig


Sehen Sie sich das Profil von jemuehh an!   Senden Sie eine Private Message an jemuehh  Schreiben Sie einen Gästebucheintrag für jemuehh

Beiträge: 24
Registriert: 16.03.2006

erstellt am: 14. Apr. 2009 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Alfred,

naja, die Idee könnte vielleicht funktionieren. Aber so wie ich es jetzt habe, finde ich es eigentlich sehr elegenat (bis auf dieses Problem!!). Wenn ich das so mache wie von Dir vorgeschlagen kommt natürlich wieder mehr Komplexität rein ins System.....

Kann ich den mit dem
    objProject.SaveAs ASpath
nur eine DVB-Datei mit einem anderen Namen speichern? Läuft der deswegen in einen Fehler, weil ich versuche, mit die DVB mit dem gleichen Namen zu schreiben?
Ist ja eigentlich ganz schön blöd, dass man das Projekt nicht einfach so speichern kann. Oder habe ich da irgendwas übersehen?

Besten Dank!

Viele Grüße aus Köln,
Jens

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 14. Apr. 2009 19:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
kommt natürlich wieder mehr Komplexität rein ins System
...das haben Workarounds leider so an sich, aber ev. kommen ja auch noch andere Ideen.

 

Zitat:
Läuft der deswegen in einen Fehler, weil ich versuche, mit die DVB mit dem gleichen Namen zu schreiben?
...nur mal kurz gedacht (ich meine mich damit), könnte es sein, dass Du das '.SaveAs' in dem Code aufrufst, den Du gerade speichern willst? Da könnte ich mir schon vorstellen, dass das Probleme macht (aber eben probiert hab ich's jetzt leider nicht, nur Idee)

- alfred -

------------------
www.hollaus.at



Anzeige:Infos zum Werbeplatz >>

SYSCAD CAD APP für Fassadenbau, Metallbau

SYSCAD - CAD für Fenster, Türen und Fassaden SYSCAD - CAD for windows, doors and curtain wall

jemuehh
Mitglied
Selbstständig


Sehen Sie sich das Profil von jemuehh an!   Senden Sie eine Private Message an jemuehh  Schreiben Sie einen Gästebucheintrag für jemuehh

Beiträge: 24
Registriert: 16.03.2006

erstellt am: 22. Apr. 2009 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!

nach langem rumprobieren habe ich nun doch selber die Lösung für das Problem gefunden. Bzw, jetzt weiß ich, was ich falsch gemacht habe.

Der Teufel liegt mal wieder im Detail, wie immer.

Ich habe den Fehler gemacht, dass ich meine DVB-Projekte für den Installer in ein anderes Verzeichnis kopiert habe, um diese dann anschließend zu laden, um die Projekte zu sperren.
Das mag die VBA-IDE mit der Referenz wohl nicht so gerne, mit dem Ergebnis der oben genannten Probleme.

Wenn die DVB's in dem Ursprungsordener gesperrt werden, funktioniert die Verknüpfung einzelner DVB's untereinander wunderbar.

Nun funktioniert es auf jeden Fall so, wie es soll.

Besten Dank für die Hilfe!

Viele Grüße aus Köln,
Jens

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz