Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Block speichern per Makro

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
  
Zusammenspiel zwischen DraftSight und SOLIDWORKS
Autor Thema:  Block speichern per Makro (506 mal gelesen)
mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

erstellt am: 20. Dez. 2022 12: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

Hallo Gemeinde,

Mal wieder eine Frage zum Skizzenblock.
Zur zügigen Erstellung einer Block-Bibliothek möchte ich ausgewählte Block-Instanzen per Makro in eine Datei speichern.
Hintergrund ist, dass ich nach Auswahl der Block-Instanz den Ordnerpfad mit Dateiname per Klick gleich mitgeben möchte.
Die Identifikation der Blockinstanz und auslesen des Dateinamens aus dem Attribut funktioniert bereits.
Nur fürs "Block speichern" per VBA habe ich bisher keinen sachdienlichen Hinweis gefunden.

Danke im Voraus für eure Hilfe.

------------------
Lieber Gruß vom mechanikuss

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: 3189
Registriert: 04.04.2001

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

erstellt am: 21. Dez. 2022 00: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 Nur für mechanikuss 10 Unities + Antwort hilfreich

Hi,

wie ich es verstehe, ist in einer Block-Datei die Blockdefinition.
Die Instanzen sind dann die Platzierungen des Blocks / der Blöcke auf der Zeichnung (kann auch mehrfach platziert werden).
Wenn du jetzt mehrere Block Instanzen wählst - in was für einer Datei sollen die gespeichert werden?
Ich glaub, du kannst die zusammenfassen, zu einem übergeordneten Block und den speichern als sldblk oder so (makesketchblockfromselected). Aber ich bin mir nicht sicher, ob es das ist, was du vorhast.
Oder sollen die gewählten Instanzen in jeweils eine eigene Datei gespeichert werden?
Dann musst du von der Instanz zur Definition gehen und die dann in eine Datei speichern.
sketchblockdefinition.save

Gruß, Christian

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

mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

erstellt am: 21. Dez. 2022 09:01    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 Christian,

Danke für deine Rückmeldung. Möglicherweise habe ich mich missverständlich ausgedrückt.
Ich möchte nicht mehrere Instanzen auf einmal speichern, sondern nur die eine aktuell selektierte Instanz.
Mir fehlt im Grunde nur ein Code, wie man per VBA "Block speichern" aufrufen kann.

Gruß Fred

------------------
Lieber Gruß vom mechanikuss

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

nahe
Ehrenmitglied



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

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 21. Dez. 2022 10:39    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 mechanikuss 10 Unities + Antwort hilfreich

Hallo Fred,

Du kannst Block-Instanzen nicht speichern sondern nur Blockdefinitionen

------------------
Grüße
Heinz

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

mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

erstellt am: 21. Dez. 2022 10: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

Hallo Heinz,

das ist nicht ganz richtig. Du speicherst Blöcke immer auf Basis einer selektierten Instanz auf der Zeichnung. Wie soll das sonst gehen? 

Außerdem war das nicht meine Frage. Ich möchte lediglich das was schon per Menü-Befehl manuell funktioniert nun per Makro automatisieren.

Gruß Fred

------------------
Lieber Gruß vom mechanikuss

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

nahe
Ehrenmitglied



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

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 21. Dez. 2022 12: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 mechanikuss 10 Unities + Antwort hilfreich

Hallo Fred,

Du hast gefragt, wie man per VBA, Blöcke speichern kann.
Speichern von Blöcken gibt es in VBA, zumindest lt. Online-Hilfe, nur über Blockdefinitionen.

Manchmal braucht es eben etwas an Programmierung, das in VBA nachzubilden, was ein Menübefehl macht.


------------------
Grüße
Heinz

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

mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

erstellt am: 21. Dez. 2022 14:42    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 Heinz,

na dann... und weißt Du denn, wie man es macht? 
Zumindest gibt auch der Makro-Recorder nicht viel an Info her.

Grüße Fredl

------------------
Lieber Gruß vom mechanikuss

[Diese Nachricht wurde von mechanikuss am 21. Dez. 2022 editiert.]

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

nahe
Ehrenmitglied



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

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 22. Dez. 2022 06: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 mechanikuss 10 Unities + Antwort hilfreich

Hallo Fred,

ich könnte es mir so vorstellen

- auslesen der Attributwerte aus der Blockdefinition
- Werte zwischenspeichern
- auslesen der Attribute aus der Blockinstanz
- setzen der Attributwerte in der Blockdefinition
- die Blockdefinition in eine Datei speichern
- die zwischengespeicherten Werte wieder in der Blockdefinition setzen

------------------
Grüße
Heinz

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

mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

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


2022-12-22_07-49-40__Window.jpg

 
Hallo Heinz,

Danke für die Mühen - echt lieb von Dir.
Und es wurde nun auch geklärt, dass wir die Block-Definition in die Datei speichern, nicht die Instanz.

Meine eigentliche Frage ist viel banaler, als es aussieht.
Mir fehlt nur die eine Zeile VBA-Code zum "Block speichern"
Alle anderen Schritte laufen bereits.

Der Zweck meines Tools ist lediglich, einen bestehenden Block mit derselben Geometrie (Definition) aber mit geänderter Attribut-Ausprägung als neue Datei in einen festgelegten Ordner abzuspeichern. 

Der Ablauf ist wie folgt:

1. Einen bereits vorbereiteten und eingefügten Block auf der Zeichnung selektieren und Makro starten
2. Nun öffnet ein Formular und die Attributs-Werte können geändert werden (Teilenummer, Benennung, usw.)
3. Mit Button(1) werden die neuen Werte in die aktuell selektierte Block-Instanz geschrieben
4. Mit Button(2) können die neuen Werte auch in eine andere per Selektion ausgewählte Instanz übertragen werden
5. Mit Button(4) wird das Formular geschlossen und das Makro beendet
6. Mit Button(3) soll nun diese Block-Definition aber mit den veränderten Attribut-Werten in eine Datei gespeichert werden
  - Dateiname = Teilenummer_Label
  - Ablageort = Target Path

Aktuell wird mit Button(3) behelfsmäßig der Speicherpfad+Dateiname in die Zwischenablage gelegt und das Formular geschlossen.
Danach muss ich nun den Befehl: "Block speichern" manuell über Menü oder Shortkey ausführen, den kopierten Pfad einfügen und speichern.
Und genau das hätte ich gern auch noch per VB-Code automatisiert - wenn das so einfach geht?!

Ich hoffe, das ist nun so verständlicher. Das Formular findet Ihr im Anhang.

Gruß Fred

------------------
Lieber Gruß vom mechanikuss

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

nahe
Ehrenmitglied



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

Beiträge: 1747
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 22. Dez. 2022 11: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 mechanikuss 10 Unities + Antwort hilfreich

Hallo Fred,

also wenn es nur die Zeile ist um die Blockdefinition zu speichern
Wenn Du das Objekt der Blockdefinition hast z.B.: BlockDef
dann ist das einfach
BlockDef.Save(Pfad+DateiName)

Nur wird Dir das, wahrscheinlich, nicht weiterhelfen,
weil zuerst der Textwert in der Blockdefinition geändert werden muss.

anbei ein kleines Makro, was das erledigt


'********************************************************
Const Attribut1 = "Eingabe"

Sub main()
  Dim swApp    As SldWorks.SldWorks
  Dim swMod    As ModelDoc2
  Dim selmgr    As SelectionMgr
  Dim BlIns    As SketchBlockInstance
  Dim BlDef    As SketchBlockDefinition
  Dim attr01    As String
  Dim ob        As SldWorks.Entity
  Dim swNote    As Note
  Dim SkMgr    As SketchManager
 
  Set swApp = Application.SldWorks
  Set swMod = swApp.ActiveDoc
 
 
  Set selmgr = swMod.SelectionManager
 
  'Selektierte Blockinstanz
  Set BlIns = selmgr.GetSelectedObject6(1, 0)
  'Auslesen des Attributwerts
  attr01 = BlIns.GetAttributeValue(Attribut1)
  'Die Blockdefinition holen
  Set BlDef = BlIns.Definition
 
  Set SkMgr = swMod.SketchManager
  'Die Blockdefinition bearbeiten
  SkMgr.EditSketchBlock
  'Alle Texte in der Definition durchlaufen
  For i = 0 To BlDef.GetNoteCount - 1
    Set swNote = BlDef.GetNotes(i)
    'Wenn das Attribut gefunden wurde
    If swNote.TagName = Attribut1 Then
      'Den Attributwert setzen
      swNote.SetText attr01
      Exit For
    End If
  Next i
  'Bearbeitung Blockdefinition beenden
  SkMgr.EndEditSketchBlock (True)
  'Blockdefinition sichern
  ok = BlDef.Save("C:\temp\" & attr01 & ".sldblk")
End Sub
'********************************************************

------------------
Grüße
Heinz

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

mechanikuss
Mitglied
Konstruktion Anlagen+Werkzeug+Maschinen


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

Beiträge: 97
Registriert: 04.06.2002

MS-Windows 10 Pro
MS-Office Pro Plus 2019
DS-Solidworks 2019 Pro

erstellt am: 22. Dez. 2022 12:51    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 Heinz,

Funzt !!! Du bist spitze !!!  Geht es also doch so einfach?!

Ich war schon nah dran, aber mir haben noch diese Zeilen gefehlt:

**************************************************
'Deklaration
Dim BlDef    As SketchBlockDefinition

'Die Blockdefinition holen
Set BlDef = BlIns.Definition

'Blockdefinition sichern
ok = BlDef.Save("C:\temp\" & attr01 & ".sldblk")

**************************************************

Alles andere war schon da 

Vielen herzlichen Dank für deine Geduld, Mühe und Lösung.

Ich wünsche Dir und der ganzen Gemeinde hier schöne Feiertage und einen guten Rutsch.

Fred

------------------
Lieber Gruß vom mechanikuss

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



Maschinenbauingenieur (m/w/d)
Technologien auf das nächste Level zu heben, sich Herausforderungen zu stellen und an den Innovationen von morgen zu arbeiten - dafür benötigen wir bei FERCHAU Expert:innen wie dich: als ambitionierte Kolleg:innen, die wie wir Technologien auf die nächste Stufe bringen möchten. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenMaschinenbau
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: 3189
Registriert: 04.04.2001

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

erstellt am: 22. Dez. 2022 18: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 Nur für mechanikuss 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Christian_W:
...
Dann musst du von der Instanz zur Definition gehen und die dann in eine Datei speichern.
sketchblockdefinition.save

Hi,

da lag ich doch nicht so falsch in meiner Antwort ...
ob da nun mehrere selektiert sind, oder nur eine macht keinen großen Unterschied.

Gruß, Christian

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