| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: von VBA in VBA schreiben? (1013 mal gelesen)
|
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 24. Feb. 2004 13:48 <-- editieren / zitieren --> Unities abgeben:         
Ich habe in vielen Beiträgen gelesen, dass ich Dateien, die ich in VBA einlesen möchte (Steuerdateien, Textdateien oder ähnliche) einfach in einem Supportpfad stellen muss und dann ohne Pfad nutzen kann. Bei mir hat das bis jetzt nie funktioniert und ich musste im VBA immer den vollständigen Pfad angeben (vermutlich weil wir im Büro ausschliesslich mit Netzwerkpfaden arbeiten (\\Server\Projekt...)- macht leider auch bei Referenzen mächtige Probleme), da das langfristig aber eine große Fehlerquelle darstellt, möchte ich gerne den Grundpfad in VBA gespeichert haben um anschliessend nur die Restlichen Pfadteile anzuhängen (z.B. Grundpfad "\\Server\Autocad\" restlicher Teil "Schriftfeld\...") würde, wenn möglich, eine Möglichkeit bevorzugen, bei der ohne den Quellcode wieder vorzunehmen ein neuer Grundpfad dauerhaft in mein VBA geschrieben werden kann. Ich stelle mir das folgendermassen vor, ich erstelle in einem Modul eine Subroutine "Pfad" in der die globale HauptPfadveriable als String definiert ist und diese HauptPfadveriable überschreibe ich bei Bedarf durch eine andere Sub mit einem anderen PfadString. Geht sowas? viele Grüße aus Chemnitz, Hartmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 24. Feb. 2004 13:54 <-- editieren / zitieren --> Unities abgeben:          Nur für idraH
|
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 24. Feb. 2004 14:22 <-- editieren / zitieren --> Unities abgeben:         
@fuchsi Ich habe das gerade nochmal getestet und habe folgenden Code probiert: "MsgBox Environ("MyAppPfad")" - leider liefert mir ACAD nur eine leere Msgbox, also kein verwertbares Ergebnis!? Wie schon geschrieben, ich vermute dass es mit diesen Netzwerkpfaden zusammenhängt (verstehe zwar nicht warum ein Netzwerkprogramm nicht mit Netzwerkpfaden umgehen kann, aber wir haben da schon bei Referenzen unliebsame Erfahrungen machen müssen (hatte dazu im ACAD-Forum schon mal einen Beitrag)). Darum suche ich die Möglichkeit von VBA aus in VBA zu schreiben, Trotzdem Danke für diesen Tip
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 24. Feb. 2004 14:48 <-- editieren / zitieren --> Unities abgeben:          Nur für idraH
|
harryk Mitglied Projektleiter
 
 Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 24. Feb. 2004 14:57 <-- editieren / zitieren --> Unities abgeben:          Nur für idraH
welchen Grund es auch geben mag im Netz nur mit UNC Pfaden zu arbeiten, es sollte gehen. Ich verwende für jedes Projekt eine eigene ini, der Pfad dahin ist in der lokalen Registry gespeichert. Wird die Applikation zum ersten mal aufgerufen oder der Pfad existiert nicht mehr erscheint der Dialog um den Pfad zu bestimmen. Über die ini oder andere Recource Dateien kann ich jetzt jeden Autocad Arbeitsplatz steuern und Projektspezifische Einstellungen vornehmen, z.B. Xref-Projekt Pfade verändern. Gruss, Harry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 24. Feb. 2004 15:58 <-- editieren / zitieren --> Unities abgeben:         
@fuchsi In meiner Hilfe steht leider nicht viel zu environ variablen. Wie erzeuge ich diese? und in wie weit sind diese so unkompliziert zu handeln, so das nicht jeder Rechner (CAD-Arbeitsplatz) eingestellt werden muss? @harryk hört sich erstmal interessant an, ich habe aber einige Sachen, die mir wichtig sind, kann ich damit folgende Punkte erreichen? 1. ca. 20 Rechner damit auf dem laufendem halten, auch wenn immer wieder andere USER an dem Rechner sitzen und die Rechner immer wieder mal durch neue ersetzt werden. 2. unkompliziertes Handling durch die User ohne jeden User in die Handhabung einweisen zu müssen? Ich möchte gerne eine Lösung, die mit wenig Aufwand zukunftstüchtig ist, auch wenn sich die Grundpfade ändern, wo mit einem Arbeitsschritt für alle User eine gültige Einstellung erfolgt möglichst ohne jeden Rechner bearbeiten zu müssen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
 
 Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 24. Feb. 2004 17:32 <-- editieren / zitieren --> Unities abgeben:          Nur für idraH
generell kannst Du alles ändern, hängt halt davon ab was Du in die ini bringst. Deine Anwendung muss allerdings schon auf dem Rechner laufen. Ich würd aber dabei nicht gerade von wenig Aufwand sprechen, gerade wenn die organisatorische Seite nicht eindeutig geregelt ist. Wenn Du Dein Programm über die acad.dvb starten kannst sollte das ganze auch User unabhängig laufen, jeder User müsste dann nur beim ersten Acad Start auf Deine ini zeigen, oder, wenn wenigstens das eine Konstante sein kann, das Programm holt sich die ini über den festgelegten UNC Pfad selbst. Diese ini wird vom User/Deinem Anwendungsprogramm nur zum lesen verwendet, Änderungen selbst kannst nur Du vornehmen. Die Anzahl der User spielt keine Rolle, bei 200 vielleicht aber 20... z.B. acad.dvb startet, holt sich den ini Pfad aus der Registry, liesst den Revisionsstand der eigentlichen "Programm.dvb" aus der ini, vergleicht den mit der installierten, wenn höher wird die neue "Programm.dvb" auf die lokale Platte kopiert, und von der Acad dvb gestartet. Du benutzt die acad.dvb also nur als Application Loader. Ich hab die User mal auf eine auf dem Server liegende dvb zugreifen lassen, doofe Idee da man dann nur Änderungen vornehmen kann wenn alle Autocad geschlossen haben, und das ist i.d.R nach Feierabend... Gruss, Harry (ich hoffe Ihr seid nen Schulungshaus, oder weshalb wechseln User und Rechner so oft??)
[Diese Nachricht wurde von harryk am 24. Feb. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 24. Feb. 2004 22:14 <-- editieren / zitieren --> Unities abgeben:         
@harryk an soetwas ähnliches habe ich schon öfter mal in Bezug auf Windowsstandards gedacht, in Bezug auf ACAD ist die Idee aber auch recht interssant. Gerade die Möglichkeit eines "Application Loader" ist gut, ich verwende zwar zur Zeit zwei Ordner für meine VBA-Projekte im Netz, einsn zur Bearbeitung und einen für die USER und umgehe damit die Einschränkung mein Projekt nicht speichern zu können aber mitunter ist die Netzlast schon enorm und könnte zumindest in diesem Punkt umgangen werden, vielen Dank für die Richtung :-) und für alle, die es interssiert, mit folgendem Codeschnipsel habe ich ein wenig VBA in VBA erzeugt mir fehlt in der kürze der Zeit noch eine Option um das ganze zu sichern (eventuell muss noch der Verweis auf "Microsoft Visual Basic for Applications Extensibility..." o.ä. gesetzt werden Sub Modul_anlegen() Dim X_Count As Integer Dim NeueSubRoutine As String Dim Projekt_Existiert As Boolean Dim ObjModul As Object NeueSubRoutine = _ "Global HauptPfad as String" & vbCr & "Sub HauptPfad_anlegen()" & vbCr & " Hauptpfad =" & vbCr & "End Sub" Set VBP = ThisDrawing.Application.VBE.ActiveVBProject.VBComponents For i = 1 To VBP.Count If VBP(i).Name = "Pfad" Then Projekt_Existiert = True X_Count = i Exit For Else Projekt_Existiert = False End If Next If Projekt_Existiert = False Then Set ObjModul = _ VBP.Add(vbext_ct_stdmodule) VBP(VBP.Count).Name = "Pfad" VBP(VBP.Count).CodeModule.InsertLines 1, NeueSubRoutine X_Count = VBP.Count Else VBP(X_Count).CodeModule.ReplaceLine 3, " Hauptpfad = XXX" End If End Sub Wem noch auf die schnelle eine Möglichkeit der Sicherung des so veränderten Projektes oder andere interessante Möglichkeiten einfällt, kann das gerne mitteilen. vile Grüße aus Dresden, Hartmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
idraH Mitglied

 Beiträge: 64 Registriert: 22.04.2002 ACAD 2006 Win XP
|
erstellt am: 24. Feb. 2004 22:16 <-- editieren / zitieren --> Unities abgeben:         
|