Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  von VBA in VBA schreiben?

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: 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



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

Beiträge: 64
Registriert: 22.04.2002

ACAD 2006
Win XP

erstellt am: 24. Feb. 2004 13:48    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

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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 24. Feb. 2004 13:54    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 Nur für idraH 10 Unities + Antwort hilfreich

ein möglicher vorschlag von vielen

machs einfach mit normalen windows-systemvariablen

open environ("MyAppPfad") & "\test.txt" for input as #1 ...

------------------

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

idraH
Mitglied



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

Beiträge: 64
Registriert: 22.04.2002

ACAD 2006
Win XP

erstellt am: 24. Feb. 2004 14:22    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

@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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 24. Feb. 2004 14:48    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 Nur für idraH 10 Unities + Antwort hilfreich

du musst natürlich aud deiner maschine auch die umgebungsvariable MyAppPath anlegen

z.B.:MyAppPath=\\server\\freigabe\test

------------------

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

harryk
Mitglied
Projektleiter


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

Beiträge: 124
Registriert: 19.08.2003

erstellt am: 24. Feb. 2004 14:57    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 Nur für idraH 10 Unities + Antwort hilfreich

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



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

Beiträge: 64
Registriert: 22.04.2002

ACAD 2006
Win XP

erstellt am: 24. Feb. 2004 15: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

@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


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

Beiträge: 124
Registriert: 19.08.2003

erstellt am: 24. Feb. 2004 17:32    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 Nur für idraH 10 Unities + Antwort hilfreich

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



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

Beiträge: 64
Registriert: 22.04.2002

ACAD 2006
Win XP

erstellt am: 24. Feb. 2004 22:14    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

@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



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

Beiträge: 64
Registriert: 22.04.2002

ACAD 2006
Win XP

erstellt am: 24. Feb. 2004 22:16    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

@harryk

Ein Schulungshaus sind wir nicht aber durch Praktikanten, Lehrling und andere kommt es häufig zu Engpässen, wo auf andere Rechner ausgewichen werden muss

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