Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Refresh der UserForm bzw. TextBox

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 SOLIDWORKS
  
Engineering in the Cloud: Link Sharing of Design Data
Autor Thema:  API - Refresh der UserForm bzw. TextBox (5164 mal gelesen)
Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 23. Mrz. 2013 15:35    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


Assembly-Safe-TIF-1.1.0.zip

 
Hallo,
ich bin gerade beim Anpassen meines Makros Assembly-Safe-Tif an SW2013.

Dieses Makro funktioniert unter SW2012 wunderbar.
Unter SW2013 mit VisualBasic 7.1 läuft es nach einigen Anpassungen auch, bis auf folgendem Problem.

Während das Makro seine Schleifen beim Erfassen und Auswerten durchgeht, werden in TextBoxen die Zwischenergebnisse angezeigt.
Mit einem Fortschrittsbalken in Form eines Labels wird der Fortschritt angezeigt.

Die entsprechenden Codezeilen heißen dann z.B.:

  TextBox1.Text = TextBox1.Text + SldPath + vbNewLine
  lblHinweis2.Text = MaxIdx + 1 & " Komponenten"
  lblHinweis2.Text = ZaehlerSldDoc & " Komponenten von " & UBound(referencedDoc) & " Komponenten in " & DifTime
  lblValue.Width = (i + 1) * 215 / UBound(referencedDoc)

Wie gesagt, unter SW2012 funktioniert das wie gewünscht, aber in SW2013 wird kein Zwischenergebnis, sondern erst nach durchlaufen des gesamten Makros nur noch das Endergebnis angezeigt.
Ich vermute, dass hier ein Refresh nötig ist.
Wenn ich vor diesen Aktualisierungen eine MsgBox aufrufe, werden die Zwischenergebnisse wie gewünscht angezeigt.
Ich habe aber keine Lust, hundert Mal eine Message Box zu Quittieren.

Nun habe ich es mit folgenden Programmzeilen versucht.

  frmSfInfo.Refresh
  lblHinweis2.Refresh
  Me.Refresh


Ich bekomme aber immer Fehlermeldungen.
Mit Googeln werde ich auch nicht richtig schlau.
Wer kann mir einen Tipp geben, wie die betreffenden Anzeigen aktuell gehalten werden können?

Wer sich im Makro umschauen möchte, findet die betreffenden Codezeilen in der Rubrik
  Sub InsertValue(ByRef NewVal As TreferencedDoc)
bzw.
  Sub Auswerten()  (am Ende)

Besten Dank schon mal,
Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

[Diese Nachricht wurde von Andi Beck am 23. Mrz. 2013 editiert.]

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

Luechinger
Mitglied
Ingenieur + CAD-Admin


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

Beiträge: 71
Registriert: 30.07.2008

Win 7 64bit
HP Elitebook 8740W
8 GB Ram
Solidworks 2012 SP4 (64bit)
ProE WF4 M140 (64bit)
Stools 2012

erstellt am: 23. Mrz. 2013 16: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 Nur für Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi

Du könntest nach dem Füllen der Textbox in der Schleife ein DoEvents einfügen.
Das sollte den gewünschten Effekt haben.
Ist aber sehr "dirty", denn jetzt kann der Benutzer während dein Makro läuft die Buttons nutzen, was zu unschönen Effekten führt.

Korrekt wäre glaub ich einen anderen Prozess für das Makro zu Nutzen, wie für das Userinterface, aber wie man sowas macht übersteigt mein Wissen leider deutlich.

Gruss

David

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 24. Mrz. 2013 18: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

Hallo David,
besten Dank für die Hilfe.
Ich habe es nach diesem Schema eingefügt.

http://www.vbarchiv.net/commands/cmd_doevents.html

Anfangs war ich etwas irritiert, weil ich glaubte, dass nur die zweite Hälfte des Makros beim Auswerten den gewünschten Erfolg hat.
In der ersten Hälfte beim Erfassen der Baugruppe per TraverseComponent konnte ich erst keinen Refresh feststellen.
Das liegt aber daran, dass SW2013 mit VisualBasic 7.1 extrem schnell geworden ist.
Zu SW2012 hat sich der Durchlauf ca. halbiert. (Bei 456 Komponenten von 16 Minuten auf gut 8 Minuten)
Erst als ich eine große Baugruppe zum Testen verwendet hatte, konnte ich auch im ersten Teil den Refresh sehen.
Allerdings musste ich hier noch einen Programmabsturz (Überlauf im Fortschrittsbalken) beheben, der mich eine gewisse Zeit beansprucht hatte.

Also, falls nicht noch Einwände zu DoEvents von anderen kommen, bleibt es Momentan bei dieser Ergänzung.
Das Makro wird dann in seinem eigenen Thread in der neuen Version veröffentlicht.

http://ww3.cad.de/foren/ubb/Forum2/HTML/023775.shtml

Auch das Schwestermakro bekommt noch die Änderungen verpasst.

http://ww3.cad.de/foren/ubb/Forum2/HTML/022358.shtml

Viele Grüße, Andi 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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: 3682
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: 24. Mrz. 2013 20:23    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 Andi Beck 10 Unities + Antwort hilfreich

Hallo Andi.

Ich kann bei den neueren Versionen nicht ganz mitreden, aber dieses Problem gab es früher ja auch immer mal wieder.
Bis letzte Woche habe ich in einem solchen Fall meistens nach einer Änderung der TextBox oder eines Labels ein Repaint auf die ganze UserForm durchgeführt.
Also: Userform.RePaint
Nachteil dieser Variante war immer, daß das zu einem deutlichen Flackern der ganzen Userform während der Ausführung geführt hat, und das ganze Makro scheinbar langsamer wurde.
Seit kurzem benutze ich jetzt folgende Variante:

1. Änderung der TextBox/ des Labels
2. TextBox.Visible=False / Label.Visible=False
3. TextBox. Visible=True / Label.Visible=True

Ist zwar etwas mehr Code, scheint aber bislang problemlos zu funktionieren.

Gruß, Torsten

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 25. Mrz. 2013 23: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

Hallo Torsten,
auch dir besten Dank für deine Ratschläge.

Die Variante mit TextBox.Visible bewirkt in meinen Schleifen leider nichts, warum auch immer.
Letzte Woche hatte ich Versucht, die UserForm in der Position zu verschieben (frmSfInfo.Left), ebenfalls keine Wirkung.

Allerdings funktioniert dein Repaint zum Teil und ist sogar etwas schneller als die DoEvents Variante.
Etwas flackern tun beide Varianten.
Mit Repaint und der Einstellung "Komponente tatsächlich speichern" habe ich den gewünschten Refresh über die ganze Laufzeit.
Verzichte ich auf diese Option (Quasi Testlauf), habe ich die Aktualisierung bis Komponente 18 von 456.
Ab da gibt es keine Aktualisierung mehr bis zum Schluss.
Auch werden keine Komponenten mehr visuell geladen, es bleibt die 18te Komponente sichtbar.
Aber der Featurebaum und der Komponentennamen ganz oben wechseln weiterhin.
Alles etwas komisch.
Vor allem muss ich mir von den Makros regelmäßig Sicherheitskopien erstellen, weil mir nun schon zum dritten Mal das Makro beim Speichern zerschossen wurde.
Es lässt sich nicht mehr aufrufen und ich komme auch nicht mehr per Editor rein.
Ob das an dem neuen VisualBasic 7.1 liegt, keine Ahnung.

Im Moment scheint mir die DoEvents Anweisung die stabilste zu sein.
Falls keine Einwände kommen, bleibt es vorläufig dabei.

Grüße, Andi   

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 26. Mrz. 2013 08: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 Andi Beck 10 Unities + Antwort hilfreich


25501_beispiel-scrollende-textbox.zip

 
Hallo Andi,

ich mach das bei einer Ausgabe in eine Textbox ein bisschen anders, wenn ich das richtig sehe erzeugst du jedesmal den kompletten Text der Textbox neu und aktualisierst das dann. Das dauert seine Zeit, flackert ziemlich stark und die Ausgabe zeigt den Beginn.

Ich hab dir mal ein Beispiel angehangen wie ich das meist mache, über den selektierten Text. Grundlegend sind das 3 Zeilen:

Code:

    TextBox1.SetFocus
    For i = 1 To anzahl
        TextBox1.SelStart = TextBox1.TextLength
        TextBox1.SelText = "neue Zeile wird am Ende angehangen" & vbCrLf
        DoEvents
    Next i


Das TextBox1.SetFocus dient dazu, dass die Textbox auch aktiv ist, dadurch wird bei Setzen des Selektionstextes ans hintere Ende auch dorthin gescrollt. Anschließend den Beginn des "Selektionstextes" mit SelStart hinter das letzte bisherige Zeichen setzen, die neue Zeile als Selektionstext einfügen und mit DoEvents aktualisieren lassen.

Ohne das DoEvents sieht man zwar das Scrollen und das Zeilen dazukommen, aber VBA hält (absichtlich) die Ausführung der Repaint Ereignisse zurück, damit es voran geht. Wenn du es statt mit DoEvents über das Repaint oder Refresh der Userform machst werden alle Objekte der Userform neu gezeichnet, das flackert deutlich stärker.

Schau dir mal das angehängte Beispiel an, das geht in meinen Augen noch am schicksten.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 29. Mrz. 2013 19:17    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


Assembly-Safe-TIF-TextBox.zip

 
Zitat:
Original erstellt von StefanBerlitz:

wenn ich das richtig sehe erzeugst du jedesmal den kompletten Text der Textbox neu und aktualisierst das dann. Das dauert seine Zeit, flackert ziemlich stark und die Ausgabe zeigt den Beginn.

Hallo Stefan,
besten Dank auch dir für deine Ausführungen.
Ja, das siehst du richtig, wie es bisher von mir gehandhabt wurde, ist halt nach Schulbuch, da wurden deine Feinheiten noch nicht behandelt. 
Allerdings unter SW2012 ist auch mein Text immer an der untersten Zeile und die Ausgabe zeigt das Ende.
Jetzt, wo du mich darauf Aufmerksam machst, stelle ich fest, dass unter SW2013 es so ist, wie du es beschrieben hast.

Muss man jetzt unter VisualBasic 7.1 jede Routine auf alles überprüfen?
Funktioniert hier manches vermeintlich Selbstverständliche nicht mehr wie gewohnt?   

Ich habe nun versucht, deine Schreibweise zu übertragen, klingt sie doch sehr plausibel.
Erst nur in ähnlicher Form, zum Schluss kpl. mit allem drum und dran.
Wo ich nicht weiter komme, ist beim eigenartigen Verhalten bzgl. Scrollen und immer am Textende bleiben.

Ich habe wie du eine Private Sub eingerichtet. (Im Anhang ist das kpl. Makro incl. deinen Vorschlägen)
Private Sub TextBox(ByVal anzahl As Long)
Wenn diese Private Sub direkt über den Start-Button angesprochen wird, funktioniert es wie bei dir, die Ansicht ist immer am Textende.
Wenn die selbe Private Sub erneut über meine normale Routine (Sub Auswerten) angesprochen wird, werden zusätzliche Textzeilen zwar ans Ende angefügt, der Scrollbalken geht aber nicht mit.
Man sieht also während des ganzen Ablaufes nicht, was hinzugefügt wird.
Erst wenn das Makro fertig ist, kann man ans Ende scrollen.

Es irritiert mich, dass es nur direkt über den Startbutton richtig funktioniert. (Bei dir vergleichbar mit dem cmdStart100 Button)
Wenn du eine Baugruppe mit ca. 30 Komponenten aufmachst, brauchst du mein Makro nur öffnen und auf Starten drücken, schon siehst du das unterschiedliche Verhalten an der Position des Scrollbalkens.

Kannst du mir noch einen Tipp geben?

Schöne Ostern an Alle,
und Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 23. Apr. 2013 23:09    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 nochmal,
ich habe zwischenzeitlich von Stefan per PM den entscheidenden Tipp erhalten und jetzt funktioniert alles (hoffentlich) so wie ich es mir vorstelle.
Der Vollständigkeit halber hier noch die empfohlene Lösung von Stefan.

"Ich hatte mir das mal runtergeladen und kurz reingeschaut, funktioniert bei mir in der SW2013 wenn ich die Form in der Submain mit frmSfInfo.Show vbmodal aufrufe, bei vbmodeless (so wie bei dir mit (false)) werden bei der Auswertung die Textbox nicht mehr nach oben gescrollt. Scheint daran zu liegen, dass zwischendurch in SolidWorks Modellfenster aktiviert werden"

Programmieren sollte man halt können. 
Die beiden Makros werde ich in den nächsten Tagen in ihren eigenen Beiträgen veröffentlichen und sind dann unter SW2013 lauffähig.

Danke schön Stefan und Grüße, Andi 

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2675
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
------------------
Zuletzt beruflich:
- SWX2020 SP5;
- SAP/PLM+ECTR;
- DriveWorks Pro;
- Programmierung:
VBA, aktuell Visual Studio 2022/VB.Net
------------------
ab 2024 (privat):
Onshape und anderes

erstellt am: 06. Sep. 2013 08: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 Andi Beck 10 Unities + Antwort hilfreich

Ich kämpfe gerade auch mit der Umstellung der Macros von VBA6 nach VBA7 

Mein aktuelles Problem: Die überarbeiteten Makros laufen teilweise unter VBA6 nicht mehr, die brauche ich dort aber- zumindest vorübergehend- auch noch.

Gibt es eine Möglichkeit, während der Laufzeit die VBA-Version festzustellen? Und sowas wie "bedingte Compilierung", so dass ich bei VBA6 nicht in einen Fehler laufe, wenn ich dort die Syntax von VBA7 habe (z.B. "Private Declare PtrSafe Function ....") ?

Also mal ehrlich, das ist so ein Sch... Bockmist!  Und überflüssig wie ein Kropf!

------------------
Klaus

www.al-ko.com | mein Gästebuch

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 06. Sep. 2013 09: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 Andi Beck 10 Unities + Antwort hilfreich

Hallo Klaus,

Zitat:
Original erstellt von KMassler:
Gibt es eine Möglichkeit, während der Laufzeit die VBA-Version festzustellen? Und sowas wie "bedingte Compilierung", so dass ich bei VBA6 nicht in einen Fehler laufe, wenn ich dort die Syntax von VBA7 habe (z.B. "Private Declare PtrSafe Function ....") ?

Ja, das geht. Beispiel aus einem meiner Makros ( 3D Punktewolke generieren - http://solidworks.cad.de/mm_24.htm )
Code:

' ab SW2013 wird VBA7 genutzt, dass erfordert wegen der 64 Bit Möglichkeiten
' sichere Deklarationen. Siehe API Hilfe "VBA and SolidWorks x64"
' und http://msdn.microsoft.com/en-us/library/ff700513(v=office.11).aspx
' und http://www.jkp-ads.com/articles/apideclarations.asp
'
#If VBA7 Then
    ' Windows API for the SaveAs Filebox
    Private Declare PtrSafe Function GetSaveFileName Lib "comdlg32.dll" Alias _
        "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

    ' structure needed by Windows API
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As LongPtr
        hInstance As LongPtr
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As LongPtr
        lpTemplateName As String
    End Type

#Else
    ' Windows API for the SaveAs Filebox
    Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
        "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
       
    ' structure needed by Windows API
    Private Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type

#End If


Ciao,
tefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

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)2024 CAD.de | Impressum | Datenschutz