Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  SolidWorks
  Allgemeine Fragen zu VBA

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

Von der Idee zum echten Bauteil: Alles mit einer Plattform - SOLIDWORKS macht es möglich

Mehr Videos >>>

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 SOLIDWORKS
  
Optimieren Sie Ihre SOLIDWORKS Tasks mit Visiativ myCADtools - Jetzt Kostenlos testen >>, eine Pressemitteilung
Autor Thema:  Allgemeine Fragen zu VBA (543 / mal gelesen)
KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 19. Jun. 2025 10:46    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

Servus Leute,

ich habe vor Jahren C++ programmiert und komme mit VBA noch nicht so richtig zurecht. So kommen Fragen auf.

1. Ich habe mir kleine Hilfsmittel und Funktionen geschrieben. Früher kamen die in eine Header Datei und ich hatte die in neuen Projekten immer mit geladen. Jetzt muss ich die Funktionen immer in neue Projekte kopieren. Natürlich wenn sich was ändert ...

Gibt es eine Headerdatei in VBA, wo alles rein kann und immer zur Verfügung steht? In VBA gibt es Verweise. Aber wie erstelle ich einen eigenen Verweis?

2. Ich arbeite ungern mit globalen Variablen. In VBA bleiben diese sogar während der ganzen Laufzeit von SWX erhalten. Das gab auch schon unschöne Probleme. Also großes Ziel Variablen nur dort einsetzen wo sie gebraucht werden.

Jetzt kann ich aber keine Variablen in ein Formular mitnehmen. Es gibt einen String: Formular.Tag. Den nutze ich. Den übergebe ich irgendwie alle Informationen. Jetzt habe ich überlegt, ob ich nicht einfach einen Verweis, einen Zeiger übergeben könnte. Ich weiß VBA unterstützt so keine Zeiger. Im Prinzip sind in Funktionen alles Zeiger außer mit "ByVal". Die Speicheradresse konnte ich schon ermitteln. Jetzt sche ich eine Lösung: Pointer to Variable. Oder wie DIM Adresse as long (oder so)

3. Es nervt irgendwie wenn man Funktionen aus einer DLL haben möchte, alles manuell einzutragen. Unter C gibt es die Winuser.h. Da sind alle Definitionen und Funktionen drin. Jetzt muss ich wieder wie bei erstens alles neu eingeben. Gibt es da eine Lösung?

4. Gibt es in VBA eine Möglichkeit unsigned int oder long zu erzeugen? Gerade bei Containervariablen ist das letzte Bit nicht nutzbar. VB kennt UInterger.

Ja ich weiß. Es sind Luxusprobleme. VBA geht schon gut. Das dynamische Alokieren von Speicher geht in VBA besser als in C. Auch die Nachrichtenverabeitung ist leichter.

Viele Grüße
Andreas

[Diese Nachricht wurde von KSAH am 19. Jun. 2025 editiert.]

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 20. Jun. 2025 07:53    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 KSAH 10 Unities + Antwort hilfreich

Moin Namensvetter,

du kannst SWX auch mit C++ "bespielen":

Als Standalone-Programm
https://help.solidworks.com/2024/English/api/epdmapi/StandAloneAppCpp.htm

oder als Add-In
https://help.solidworks.com/2024/English/api/epdmapi/cppaddin.htm

Dann bist du wieder in deiner gewohnten Welt unterwegs. Und nein, ich kenne
mich mit C++ nicht aus 

------------------
==========
Gruß
Andreas
==========

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3374
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 20. Jun. 2025 10: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 Nur für KSAH 10 Unities + Antwort hilfreich

Hallo Andreas,

bei uns sind viele mehrfach verwendete Funktionen als eigene Module gespeichert bzw. importiert.
Ist zwar auch eine Kopie, aber immerhin bleibt das als Block zusammen ...
Bei Excel gibt es speichern als xla, dann kann man das als Verweis eintragen und die Funktionen nutzen.
Vergleichbar ist mir bei SWX leider nicht bekannt.
Was gehen könnte, über Visual Studio ein Com-Objekt (mit tlb Datei?) zu erzeugen, das müsste man dann wohl auch in Makros für Verweise nutzen können.
Hab ich aber noch nie probiert ...

Gruß, Christian

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 20. Jun. 2025 10:52    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 KSAH 10 Unities + Antwort hilfreich

Hallo zusammen,

das einbinden einer eigenen DLL in VBA ist recht gut hier erklärt:

https://hermann-baum.de/excel/hbSort/de/dll_in_vba.php

Ich habe es probeweise mit C# schon mal versucht und es hat funktioniert.

------------------
==========
Gruß
Andreas
==========

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

Sirus
Ehrenmitglied
CAD Applikationsentwickler


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

Beiträge: 1577
Registriert: 03.06.2004

SolidWorks2024

erstellt am: 20. Jun. 2025 12: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 KSAH 10 Unities + Antwort hilfreich

hallo andreas

wir benutzen für externe  "funktionen" die RunMacro2 Methode.
das ist aus meiner sicht ein grosser vorteil von solidworks zu anderen cad systemen.


------------------
gruss urs  

[Diese Nachricht wurde von Sirus am 20. Jun. 2025 editiert.]

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 20. Jun. 2025 13:12    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

Servus Leute,

ich komme mir wie ein Eisnteiger vor. Wie wenn ich vor rund 12 Jahren mit Inventor gearbeitet habe und jetzt SWX machen muss. Ich kann mich voll in Umsteiger reinfühlen. Vor 12 Jahren hatte ich das letzte Mal mit C++ zu tun gehabt. Ich arbeite seit dem mit VBA. Zuerst mehr Schleicht als Recht. Ich habe auch keinen C++ Compiler zur Hand. Derzeit mache ich alles in VBA. Jetzt kommen immer mehr Wünsche auf. Früher ging das doch auch. Oder ähnlich. Wenn ich noch an den Umstieg denke zu VBA.

Ich sehe mich als einigermaßen versierter Anwender von VBA. Ich finde das Konzept auch nicht schlecht. Es gibt halt so einiges was etwas nervt.

Was ist denn unter "SOLIDWORKS Objekte" ThisLbrary? Kann man da was machen? Ich habe zum Test mal eine Sub reingeschrieben. Kann die aber nicht aufrufen. Auch nicht wenn ich diese mit declare nochmal deklariere.

Zitat:
bei uns sind viele mehrfach verwendete Funktionen als eigene Module gespeichert bzw. importiert.
Ist zwar auch eine Kopie, aber immerhin bleibt das als Block zusammen ...

Das ist eine Lösung, was ich ähnluch mache. Aber auch hier wenn es Änderungen gibt? Es zu pflegen ist halt nicht der Hit.

Zitat:
Was gehen könnte, über Visual Studio ein Com-Objekt (mit tlb Datei?) zu erzeugen,

Ich habe kein VisualStudio mehr.

Und das Zeiger Thema ich experimentiere gerade mit VarPtr und RtlMoveMemory aus der kernel32.dll. Im Internet findet man es als CopyMemory. Mal sehen was sich ergibt. Ich habe ja Zeit.

Wenn ich überlege, vor 35 Jahren werkelte ich noch mit Maschinensprache mit dem U880 oder Z80 rum. Da ist VBA ja Gold wert.

Gruß
Andreas

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 20. Jun. 2025 14:06    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 KSAH 10 Unities + Antwort hilfreich

Du kannst dir die Community-Version kostenlos herunterladen:

https://visualstudio.microsoft.com/de/downloads/

Die beinhaltet auch C++. Für den "Eigengebrauch" ist diese Version
absolut ok.

------------------
==========
Gruß
Andreas
==========

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 20. Jun. 2025 14:25    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 hatte damals mit der Express Edition meine Probkleme gehabt. Da gab es nicht mal einen Formulareditor. Ich hatte das nicht mehr auf dem Schirm.

Mal was komisches. Ich dringe wohl in Bereiche vor, wofür VBA wohl nie gemacht wurde. Ich wollte eine Struktur als Zeiger übergeben. Hat auch so lala funktioniert. Strings gehen in den Unicode. Mit festen Variablen geht es schon. Aber nicht mit Strings.

RtlMoveMemory zerstört den Originalstring in der Struktur. Gehe ich die Zeilen schritweise vor, bleibt das Original erhalten, dafür stürzt alles ab wenn der Debugger aufräumt. Schon lustig. VBA war für so was halt nie gedacht.

Andreas

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 20. Jun. 2025 14:53    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 KSAH 10 Unities + Antwort hilfreich

Ich würde deine ganzen Bit-Manipulationsfunktionen in eine C++ - Klassenbibliothek (DLL)
packen und diese dann, wie oben beschrieben, im VBA-Code einbinden und aufrufen.

------------------
==========
Gruß
Andreas
==========

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 20. Jun. 2025 15: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

Ich bin gerade total durcheinander. Ich weiß nicht was ich machen soll. C++ ist schon so lange her. Ich kann nicht mal mehr meinen Code lesen. Letztens fand ich Unterlagen zu einer Beispielklasse. Die erzeugte einen eigenen Thread und rechnete darin. Die Klasse hatte ich für jemanden erstellt als Demo. Ich weiß nicht mehr was ich damals gemacht habe. Aber wieder verschlossene Klassen, wieder alle Funktionen ohne erst umständlich laden zu müssen. Wäre schon schön.

Ich wollte nur in VBA ein bischen Luxus. Und enn ich nur meine Funktionen hätte, ohne ständig zu kopieren, wäre schon was. Früher hate ich keine dynamische Bibliotheken erstellt. Ich hatte statische Bibliotheken, die in die EXE eingebunden wurden.

Ich weiß nicht was ich mache. Bleibt wohl wie es ist. VBA läuft ja.
Gruß
Andreas

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 20. Jun. 2025 16:18    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 KSAH 10 Unities + Antwort hilfreich

Du kannst die DLL auch mit C# oder VB.net erzeugen. Ich kenne nur keinen
Weg, wie du mit VBA eine DLL erzeugen kannst, die du dann als Verweis
mit einbinden kannst. Ich bin davon ausgegangen, dass C++ dein Favorit ist 

------------------
==========
Gruß
Andreas
==========

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

Volkmar Grube
Mitglied
Konstrukteur


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

Beiträge: 135
Registriert: 31.01.2009

WIN11 64Bit, SWX 2024, Delphi 10

erstellt am: 21. Jun. 2025 09:38    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 KSAH 10 Unities + Antwort hilfreich

Guten Morgen,
ich programmiere für SWX-Automatisierungen abwechselnd in VBA (wenn wir darunter die on-board-Makroprogrammierung verstehen) und in Delphi, je nachdem, was das Ziel ist.
Es existieren in SWX ein paar TLB-Dateien im Installationsverzeichnis, die man auch in C++ einbinden können müsste. Die Einbindung in die VBA-Oberfläche von SWX erfolgt eigentlich automatisch, wenn die Installation erfolgreich war.

Natürlich kann man in dem on-Board SWX-VBA-Derivat auch lokale Variable definieren. Man erstellt dann in der sub-Routine per DIM (z.B. dim swAPP as Sldworks.sldworks) lokale Variable, denen man dann die Adressen aus der API per set swAPP=...  zuordnet. Leider hat man die Bespiele in der API-Hilfe oft mit globalen Variablen aufgebaut.
Wenn man auf Nummer Sicher gehen will, sollte man im Modul mit "Option Explicit" arbeiten. Dann gibt der Compiler Fehlermeldungen aus, wenn die Variable nicht explizit definiert ist.

Beispiel

Option Explicit

Sub TeileUmbenennen(Praefix As String, Zaehlerlaenge As Integer)
Dim swApp As SldWorks.SldWorks
Dim swmodel As SldWorks.ModelDoc2, swPart As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim swModelDoxExt As SldWorks.ModelDocExtension
Dim boolstatus As Boolean, Anzahl As Integer
Dim longStatus As Long, longwarnings As Long
Dim OK As Boolean
Dim swComp As SldWorks.Component2
Dim vComp As Variant
Dim partname As String, NName As String, aName As String, Pfad As String, Endung As String, suffix As String
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelData As SldWorks.SelectData

  Set swApp = Application.SldWorks
  Set swmodel = swApp.ActiveDoc
  If swmodel.GetType = swDocASSEMBLY Then
    Set swAssembly = swmodel
    Anzahl = swAssembly.GetComponentCount(True)
    If Anzahl > 0 Then
      vComp = swAssembly.GetComponents(True)
      For i = 0 To Anzahl - 1
        Set swComp = vComp(i)
        ' Komponente auswählen
        Set swSelMgr = swmodel.SelectionManager
        Set swSelData = swSelMgr.CreateSelectData
usw.

------------------
Grüße aus Dresden
Volkmar Grube

Es gibt keine Probleme, es gibt nur Aufgaben.

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

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



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

Beiträge: 3878
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 21. Jun. 2025 09:50    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KSAH:
Ich hatte damals mit der Express Edition meine Probkleme gehabt. Da gab es nicht mal einen Formulareditor. Ich hatte das nicht mehr auf dem Schirm.

Mal was komisches. Ich dringe wohl in Bereiche vor, wofür VBA wohl nie gemacht wurde. Ich wollte eine Struktur als Zeiger übergeben. Hat auch so lala funktioniert. Strings gehen in den Unicode. Mit festen Variablen geht es schon. Aber nicht mit Strings.

RtlMoveMemory zerstört den Originalstring in der Struktur. Gehe ich die Zeilen schritweise vor, bleibt das Original erhalten, dafür stürzt alles ab wenn der Debugger aufräumt. Schon lustig. VBA war für so was halt nie gedacht.

Andreas


Könntest Du kurz erklären, was Du da vorhast?
Aber bitte in einfacher Sprache.
Ich habe von sowas nicht viel Ahnung.

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

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



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

Beiträge: 3878
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 21. Jun. 2025 10:08    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KSAH:
...Da ist VBA ja Gold wert.

Naja. 
Wenn man irgendeine andere IDE der letzten 15 Jahre kennt, dann ist der Editor schon krass übel.
Da merkt man dann, wie sehr man inzwischen woanders 'verwöhnt' wird. 

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 23. Jun. 2025 09:34    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 KSAH 10 Unities + Antwort hilfreich

So wie sich das alles anhört programmierst du regelmäßig Tools für Kunden oder den Eigenbedarf.

In diesem Falle würde ich auf eine moderne Programmiersprache setzen, also entweder auf C++ oder C#.

Die Vorteile liegen auf der Hand...

- Moderne IDEs stehen zur Verfügung
- Einbindung in GitHub oder Ähnliches um Änderungen nachvollziehbar zu speichern
- Zugriff auf .NET und somit nahe zu grenzenlose Möglichkeiten auch über SWX hinaus
- Performance
- Erstellung von .dlls mit Standardfunktionen
- Vorgefertigte APIs um die teilweise komplexe API von SWX selbst zu umgehen (https://github.com/CAD-Booster/solidworks-api)

[Diese Nachricht wurde von R3vo am 23. Jun. 2025 editiert.]

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3374
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 23. Jun. 2025 10: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 Nur für KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Sirus:
wir benutzen für externe  "funktionen" die RunMacro2 Methode.


Hallo,

RunMacro2 ist auch schön - (hab ich vergessen, weil ich es nur relativ wenig einsetze.
Hat aber einen ganz großen Vorteil, da kann man SWX sagen, dass es am Ende das Makro auch entladen soll.
Damit wird es nicht blockiert, wenn es vom gemeinsamen Netzlaufwerk gestartet wird.
Ansonsten behält SWX alle Makros im Schreibzugriff (wenn es ihn bekommen hat) und gibt sie erst zum Feierabend wieder frei ...
Das macht Änderungen weniger einfach.

Gruß, Christian

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 23. Jun. 2025 11:29    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

Servus,

durchs Studium bin ich in die C Szene gerutscht, mache aber nichts mehr in der Sprache. Ich habe mich in VBA eingearbeitet. Gedanke: Da waren doch damales Header-Dateien. Da konnte man doch so viel mit machen. Zum Beispiel eigene Funktionen speichern und in anderen Programmen nutzen. So was suche ich in VBA. Ich möchte ohne eine dynamische Biblithek zu nutzen, eigene Funktionen irgendwo speichern. Werden wohl Textdateien, die ich dann reinkopiere. Jetzt suche ich die Funktionen aus meinen Makros zusammen. Das nervt.

Ich möchte zum Beispiel ohne globale Variablen mit meinen Formularen kommunizieren. Es gibt die Formular.Tag Eigenschaft. Das ist ein String. Gedanke: Da gab es doch früher Zeiger.Könnte man in VBA probieren. Ich weiß nicht mehr wie man in C Zeiger nutzt. Ich weiß dass ByRef und ByVal ähnlich wie Zeiger sind. Ich probierte mit ValPTR und RtlMoveMemory (in VBA als CopyMemory geladen) Zeiger zu simulieren. Das funktionierte bedingt. Zurück stürzt halt VBA beim Aufräumen ab.

Das sind meine Gedanken. Da war was früher. Ich bin kein Fan von globalen Variablen. Weil es erwähnt wurde, aus einem neuen Makro lösche ich alles, bis aufs Option Exlizipt alles raus. Ich schreibe auch das SWX Objekt in die Main rein. Und niemals als Object. Ich schreibe schon Sldwrks.Sldwrks. Da hat man eine Ausfüllhilfe. Globale Variablen können bei VBA Probleme machen. Besonders weil die Variablen während der Laufzeit von SWX erhalten bleiben. Genauso wie static deklarierte Variablen.

Ich mag keine Strings. Damals gab es Probleme, weil man die Größe der Zeichenkette definieren musste. Passt der String noch? Das ist heute noch ein komisches Gefühl. Genauso vergesse ich ständig die String Operationen wie Left Right und Mid. Ich muss dann immer probieren. Ich wollte mir meine Arbeit erleichtern.

Ja schreibe Makros für mich und auch Kunden. Auch nach Wunsch. Das letzte Profimakro geht durch ein Verzeichnis und versucht importierte Daten zu reparieren. Spart mir viel Arbeit.

Ach ja Dateioperationen waren früher mit C extrem kompliziert. In VBA ist es so easy. Oder ein Formular zu erstellen ist jetzt leicht. Dafür gibt es halt anders Probleme, weil VBA den Nachrichtenempfang übernimmt.

Wenn ich wenigstens Funktionen statisch speichern könnte.

Viele Grüße
Andreas

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 23. Jun. 2025 11:41    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

Hier ist ein Beispielcode. Es sind 3 Variablen unterschiedlich deklariert. Ich gebe die als Msgbox aus, zähle 1 hoch und gebe wieder als Msgbox aus:

Code:
Option Explicit
Dim iAussen As Integer

Sub main()
    Static iStatisch As Integer
    Dim iInnen As Integer

    MsgBox "Beginn Statisch innen: " & iStatisch & vbCr & "Dim innen: " & iInnen & vbCr & "Außen: " & iAussen
    iStatisch = iStatisch + 1
    iAussen = iAussen + 1
    iInnen = iInnen + 1
    MsgBox "Ende Statisch innen: " & iStatisch & vbCr & "Dim innen: " & iInnen & vbCr & "Außen: " & iAussen
    'End
End Sub


Mehrfach starten und dann die Funktion End aktivieren und wieder starten. Das ist ein Problem mit den globalen Variablen. Auch kann man von überall darauf zugreifen.

Klar kann man an jedem Makroende ein End schreiben.

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 23. Jun. 2025 12: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 Nur für KSAH 10 Unities + Antwort hilfreich

Hast du dir schonmal Klassen und Member sowie Properties angeschaut? Dann brauchst du keine globalen Variablen und es können mehrere Objekte gleichzeitig mit unterschiedlichen Eigenschaften existieren.

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 23. Jun. 2025 13:06    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

Ja Klassen vermisse ich. Angeblich sollen Klassen in VBA möglich sein. Members und Propertiees kenne ich nicht. Wobei es nicht heißt, dass ich das noch nie genommen habe. Ich bin kein gelernter Programmierer. Deshalb weiß ich nicht wie was heißt, kann aber wie ein Computer denken.

Klassen wollte ich ausprobieren, wenn ich mal wieder einen Timer brauche. Bisher habe ich alles in ein Modul geschrieben und das Handle global und privat geschrieben. Wenn man das Timer Handle verchusselt oder verändert, dann ist "Polen offen" im wahrsten Sinne des Wortes. Aber Klasse und Formaular geht das?

Ich vermisse auch "#define". Const ist nicht so flexibel. Const kann nicht mal ein Array konstant deklarieren.

Ich habe auch alle Objekte wieder aufgeräumt.
Set swApp = Nothing

Ich dachte swApp ist wirklich ein Objekt. Die Variable ist ja nur ein Zeiger, ein Verweis auf ein Objekt. So groß wie die ist, ist es nur eine Speicheradresse.

Mal eine blöde Idee. Ich habe schon ein Makro aus einem anderen aufgerufen. Wenn ich ein Makro "Funktionen" schreiebe und alle Funktzionen da reinklatsche, müsste ich die doch dann einzeln ausführen können? Muss mal nachsehen was ich damals alles brauchte.

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 23. Jun. 2025 14:21    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KSAH:
Ja Klassen vermisse ich. Angeblich sollen Klassen in VBA möglich sein. Members und Propertiees kenne ich nicht. Wobei es nicht heißt, dass ich das noch nie genommen habe. Ich bin kein gelernter Programmierer. Deshalb weiß ich nicht wie was heißt, kann aber wie ein Computer denken.

Klassen wollte ich ausprobieren, wenn ich mal wieder einen Timer brauche. Bisher habe ich alles in ein Modul geschrieben und das Handle global und privat geschrieben. Wenn man das Timer Handle verchusselt oder verändert, dann ist "Polen offen" im wahrsten Sinne des Wortes. Aber Klasse und Formaular geht das?

Ich vermisse auch "#define". Const ist nicht so flexibel. Const kann nicht mal ein Array konstant deklarieren.

Ich habe auch alle Objekte wieder aufgeräumt.
Set swApp = Nothing

Ich dachte swApp ist wirklich ein Objekt. Die Variable ist ja nur ein Zeiger, ein Verweis auf ein Objekt. So groß wie die ist, ist es nur eine Speicheradresse.

Mal eine blöde Idee. Ich habe schon ein Makro aus einem anderen aufgerufen. Wenn ich ein Makro "Funktionen" schreiebe und alle Funktzionen da reinklatsche, müsste ich die doch dann einzeln ausführen können? Muss mal nachsehen was ich damals alles brauchte.


Also grundsätzlich lese ich draus das du dich tiefer in VBA einarbeiten solltest. Die Klassenmodule sind sehr umfangreich.

Was genau fehlt dir denn an Funktionalität bei Const im Vergleich zu #define? In vielen Fällen gibt es gute Workarounds.

Ich habe mit VBA ganze Anwendungen geschrieben mit Datenbankanbindung etc. Machbar ist sehr viel und da VBA schon ewig alt ist gibt es auch jede Menge Beispiele.

[Diese Nachricht wurde von R3vo am 23. Jun. 2025 editiert.]

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 23. Jun. 2025 14:50    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 bin gerdae dabei mit dem Einarbeiten.

Mit Define habe ich ganze kleine Funktionen geschrieben. Auch irgendwie komplette Ausdrücke.

Ich weiß VBA ist mächtig. Leider braucht es ein weiteres Programm im Hintergrund. Wie hier zB SWX oder Excel.

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

ad_man
Ehrenmitglied
freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))


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

Beiträge: 1505
Registriert: 20.12.2003

SolidWorks 2024 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000

erstellt am: 23. Jun. 2025 15:44    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 KSAH 10 Unities + Antwort hilfreich

Mahlzeit,

Zitat:
Original erstellt von KSAH:
... Leider braucht es ein weiteres Programm im Hintergrund. Wie hier zB SWX oder Excel.

Das A in VBA steht für Application, so dass es ohne Application (Excel, SWX, o.ä.) nicht
geht. Wenn du etwas Eigenständiges haben möchtest, verwende Visual Studio mit
C++, C# oder VB. Da hast du dann alle Möglichkeiten zur Verfügung.

------------------
==========
Gruß
Andreas
==========

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 24. Jun. 2025 09:31    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KSAH:
Ich bin gerdae dabei mit dem Einarbeiten.

Mit Define habe ich ganze kleine Funktionen geschrieben. Auch irgendwie komplette Ausdrücke.

Ich weiß VBA ist mächtig. Leider braucht es ein weiteres Programm im Hintergrund. Wie hier zB SWX oder Excel.


Mit #define lassen sich Makros erstellen die der Präprozessor dann überall durch den entsprechenden code der dahinterliegt ersetzt.
Das ist natürlich praktisch und confortable um Änderungen nur an einer zentralen Stelle vornehmen zu müssen. Auch ist hier die Performance ein wichtiger Punkt.

Ähnliches lässt sich aber in den meisten Fällen durch const oder subs oder functions umsetzen.

[Diese Nachricht wurde von R3vo am 24. Jun. 2025 editiert.]

[Diese Nachricht wurde von R3vo am 24. Jun. 2025 editiert.]

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 24. Jun. 2025 11:37    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

Tach,

kann man Konstanten ausrechen lassen? Ich weiß:

Code:
const Test = 1 + 1
const Pos = 2 ^ 3

geht. Aber was ist wenn man irgendwie eine Funktion erstellen, die der Compiler beim compellieren berechnet? Mit #define ging es.

Ich habe mir gestern erst einmal eine binäre Ausgabe gepinselt. Immer nur Hex nervt. Bin immer noch am rumprobieren.

Andreas

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 24. Jun. 2025 12:43    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von KSAH:
Tach,

kann man Konstanten ausrechen lassen? Ich weiß:

Code:
const Test = 1 + 1
const Pos = 2 ^ 3

geht. Aber was ist wenn man irgendwie eine Funktion erstellen, die der Compiler beim compellieren berechnet? Mit #define ging es.

Ich habe mir gestern erst einmal eine binäre Ausgabe gepinselt. Immer nur Hex nervt. Bin immer noch am rumprobieren.

Andreas


Da eine Funktion oder Subroutine Parameter übernehmen kann macht es wenig Sinn diese vorab zu kompilieren, da sich ja das Ergebnis je nach eingegebenen Parametern ändern kann. Wenn die Sub oder Funktion immer das selbe zurück gibt wäre es wieder eine Konstante.

Grundsätzlich solltest du dich fragen wofür du das alles haben willst. Den einzigen Grund den ich sehe wäre eine bessere Performance, aber da bist du grundsätzlich in VBA falsch.

Ich gebe dir mal ein Beispiel aus einem meiner Projekte wo ich ein Modul mit konstanten und "pseudo" konstanten habe damit ich einen Ort für alle Anpassungen habe.

Code:

Option Explicit

'Global consts
Public Const XLSM = ".xlsm"
Public Const PDF = ".pdf"
Public Const serverPath As String = "EIN_PFAD"

Public Const cConnectionString As String = "DRIVER_INFOS"
Public Const adLockReadOnly = 1
Public Const adOpenForwardOnly = 0

'Messages
Public Const cMsgDeletingPositions As String = "Alle vorhandenen Positionen werden gelöscht. Trotzdem fortfahren?"
Public Const cMsgWrongFileName As String = "Der Dateiname stimmt nicht mit der Artikelnummer in der Kalkulation überein. Trotzdem fortfahren?"
'...

'Colors
Public Const cBackColor As Long = 9539210
Public Const cLabelColor As Long = 4210752
Public Const cListBoxBackColor As Long = 16777215

Public Const cDefaultFont As String = "Segoe UI"

'Pseudo-Const-Array
'We store the cell name used in the sheet as a function. This simulates a constant
Public Function ConstProperties()
    ConstProperties = Array("Projekt", "Artikelnummer", "Bezeichnung", "Anzahl", _
    "Hersteller", "Breite", "Kommentar", "Laenge", "minHoehe", "Stapelbar", "KostenProLKW", "TrailerTyp", _
    "PreisProKG", "Gewicht", "GWZ", "KuSko", "KuRab", "TZ", "KuSpeZ", "USt", "ID", "Bearbeiter", "LetzterVKP")
End Function



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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 24. Jun. 2025 13:40    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

Code:
Public Function ConstProperties()
    ConstProperties = Array("Projekt", "Artikelnummer", "Bezeichnung", "Anzahl", _
    "Hersteller", "Breite", "Kommentar", "Laenge", "minHoehe", "Stapelbar", "KostenProLKW", "TrailerTyp", _
    "PreisProKG", "Gewicht", "GWZ", "KuSko", "KuRab", "TZ", "KuSpeZ", "USt", "ID", "Bearbeiter", "LetzterVKP")
End Function

Und das mit dem Array funktioniert? Wisst ihr was mich ein konstantes Array für Nerven gekostet hat? Klar funktioniert es. Aber erst einmal drauf kommen. Oh man.

Code:
'Colors
Public Const cBackColor As Long = 9539210
Public Const cLabelColor As Long = 4210752
Public Const cListBoxBackColor As Long = 16777215

Die Farben gebe ich immer in Hex an. Wo ich diese besser kontrollieren kann. &H112233, wobei jede Ziffer ein Wert ist.

Ich suche eine Möglichkeit, dass der Compiler rechnet und einträgt. So spare ich mir Rechenzeit. ich hatte auch überlegt die Berechnung in die Funktion zu legen. Aber warum? Bis jetzt rechne ich es händisch.

Kann man Variablen auch konstant machen?

Andreas

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 24. Jun. 2025 14:40    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 KSAH 10 Unities + Antwort hilfreich

Nein, Variablen kann man nicht zu Konstanten machen. Dann wären es ja gleich Konstanten.

Wie viel Rechenzeit sparst du denn damit? Bitte mal prüfen.

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

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 24. Jun. 2025 15:40    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

Rechenzeit zu verbrauchen erzeugt ein komisches Gefühl. Ich lernte Programmieren auf einen KC85/4 mit U880 oder Z80 Prozessor. Zuerst Basic Interpreter und später Maschinensprache. Kein Assembler. Richtig Byte für Byte. Da war Zeit immer ein Thema. Deshalb reagiere ich heute noch empfindlich.

Ich habe mir in VBA eine Sudoku Hilfe gebastelt. Auf WinCE hatte ich ein Programm mit einer guten Hilfe. So was nie wieder gefunden. Also selbst gemacht. Mit der Bruce Force Methode noch selbst lösen lassen. Da gelernt, dass man sich selbst aufrufen kann.

Wenn ich VBA auf das Sudoku los lasse:
https://en.wikipedia.org/wiki/Sudoku_solving_algorithms

hatte ich früher rund eine halbe Stunde gebraucht, etwas optimiert 20 bis 25 Minuten. Sogar einen Check eingebaut, der frühzeitig erkennt, ob ein Fehler vorliegt. Aber der Check fras mehr Rechenzeit.

Dann wollte ich wissen, wie viel Lösungen im Sudoku es gibt. ich habe sogar eine Möglichkeit geschaffen, Zahlen größer longlong aufzunehem. Da wurde jedes bisshen optimiert. Ich merkte da, dass bei 64 Bit longlong oder LongPtr schneller ist als Integer, trotz der kleinen Zahlen. Es steht zwar überall, nur ich glaubte es nicht. Als ich grob überschlug, wie lange es dauern würde, gab ich auf. Aber auch da gemerkt, es ist schon wichtig wie die Schleifen gestaltet werden.


Nein normal fällt es nicht auf. Bis auf mein blödes Gefühl. Was vor der Laufzeit fertig ist, wird nicht ständig neu gerechnet.

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

R3vo
Mitglied
staatl. gepr. Techniker, Konstrukteur


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

Beiträge: 161
Registriert: 03.11.2021

CAD: SOLIDWORKS 2024 SP5.0
PDM: SpeedyPDM 7.5.7
------------------------
CPU: Intel Core i7-10700 @ 2.90GHz
GPU: NVIDIA Quadro RTX4000
RAM: 64 GB
Datenträger: SSD
Windows 11 23H2 22631.4460
Windows Feature Experience Pack 1000.22700.1047.0

erstellt am: 24. Jun. 2025 16: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 Nur für KSAH 10 Unities + Antwort hilfreich

Grundsätzlich ist der Gedanke Code so schnell wie möglich zu machen nicht verkehrt, aber die Verhältnismäßigkeit muss gegeben sein. Du schreibst ja auch nicht 100 mal die gleiche Zeile anstatt eine for-Schleife zu verwenden (Stichwort unrolling loops).

Grundsätzlich gilt: Erst die Anwendung fertig schreiben, dann Optimieren. "Premature optimization is the root of all evil" (Source (u.A.) https://stackify.com/premature-optimization-evil/)

[Diese Nachricht wurde von R3vo am 24. Jun. 2025 editiert.]

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3374
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 25. Jun. 2025 15:27    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 KSAH 10 Unities + Antwort hilfreich

Zitat:
... Da war Zeit immer ein Thema. Deshalb reagiere ich heute noch empfindlich...
Wenn ich VBA auf das Sudoku los lasse:

Rechenzeit und Speicherplatz waren mal teures Gut ...  vergisst man heute gerne mal und dann werden die Programme immer größer und brauchen schnellere Prozessoren.
Auf Sudoku loslassen ...  Da ist vielleicht nicht nur der Algoritmus ausschlaggebend, sondern auch die Programmiersprache.
Hab mal eins mit Tactonworks in Solidworks definiert. Da kann man jede Zahl vorgeben und bekommt sofort die erste passende Lösung dazu - auch als Modell . angezeigt. gefühlt halt sofort.
Im Hintergrund werkelt meines Wissens Prolog und man muss "nur" 27 Regeln definieren, dass jeweils 9 Zahlen unterschiedlich sein müssen. Dazu natürlich noch eine mehr oder weniger geschickte Eingabemöglichkeit für die 81 Felder und die Kopplung an das Modell definieren.

Gruß, Christian.

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



Anzeige:Infos zum Werbeplatz >>

speedyPDM CAD APP für Andere, Datenaustausch, Allgemeine Werkzeuge

speedyPDM ist das führende technische Dokumenten- und Produktdatenmanagementsystem für Solidworks, Solid Edge, Inventor, AutoCAD, ZWCAD, BricsCAD, Office und Email inklusive Revisionsmanagement.

KSAH
Mitglied
Freiberufler


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

Beiträge: 232
Registriert: 18.06.2015

SolidWorks 2010 bis 2024

erstellt am: 25. Jun. 2025 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


Screenshot2025-06-25154601.png

 
Ja Speicher und Rechenzeit. VBA compelliert wenigstens. Wenn ich an einen Interpreter denke.
Zitat:
Hab mal eins mit Tactonworks in Solidworks definiert

Kenn ich nicht. Noch nie gehört.

Die Standardsudoku löst das VBA auch in ein paar Millisekunden. Das eine Sudoku was ich meine, wurde für den Computer "optimiert". Da braucht VBA schon länger. Die erste Zeile zum Beispiel ist komplett leer. Und das Ergebnis ist von 9 an absteigend. Da rechnet sich der PC kaputt. Ich müsste mal einen Zähler einbauen wie oft testweise eine Zahl in ein Feld gesetzt wird.

Damals hatte ich schon Panik gehabt nur die Ausgabe zu realisieren. Für den U880 wäre das der reinste Horror.
9 Zeilen
9 Spalten
9 Zahlen

Irgendwas war noch 9x und noch was. Ich kam für einen AUfbau auf über 60000 Schleifendurchlaufe. Aber VBA baut es in rund 15ms auf. Im Bild ist das Sudoku. Ich muss für jede Zelle prüfen welche Zahl rein geht. Die kleinen Zahlen ändern sich automatisch, oder manuell wenn gewünscht. Problematisch war die Tastatur. VBA nimmt im Formular keine Tasten auf, nur Buttons empfangen die Tasten. Einfachklick trägt die Zahl ein, Doppelklick löscht die kleine Zahl raus. Man sieht auch wieviele Lösungen das Sudoku hat oder ob es überhaupt lösbar ist.

Ich suche gerade meine Funktionen zusammen und speichere die um. Dabei wieder einen Bug entdeckt. Wie es halt so ist

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