Autor
|
Thema: Makro unterbrechen (2441 mal gelesen)
|
Sk89 Mitglied Studentin
Beiträge: 29 Registriert: 19.05.2010 Windows XP x64 CATIA V5 R19 VBA 6.5 VB
|
erstellt am: 29. Jul. 2010 09:44 <-- editieren / zitieren --> Unities abgeben:
Hallöchen wie kann ich ein Makro unterbrechen um ein neues Zeichnungsblatt einzufügen? Sprich ich lasse das Makro durchlaufen, dann kommt eine Abfrage ("Möchten Sie die nächste Ansicht auf ein neues Blatt einfügen"). Wenn hier ja gedrückt wird, soll das Makro unterbrochen werden und erst dann weiterlaufen, wenn das neue Blatt eingefügt worden ist. Wenn dies so nicht möglich ist dann mit einer Msgbox oder Userform ("Klicken sie auf OK wenn Sie das neue Blatt eingefügt haben.") Lg steffi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Jul. 2010 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
|
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 29. Jul. 2010 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
Hallo zusammen, zunächst einmal muss ich etwas korrigieren, was nicht weiter schlimm ist, da wir uns ja verstehen, aber der vollständigkeit halber: If ist keine Schleife, sondern eine Abfrage. Dann halte ich es auch für besser dies im Makro anzulegen. Theoretisch gibt es auch nur 2 Möglichkeiten, wie das Makro erkennt, ob' etwas neu eingefügt wurde. Entweder es wird ihm gesagt, durch den Dialog z.B. vom Benutzer, oder durch ständiges schauen ob sich etwas geändert hat (polling). Ein Listener wäre das beste Mittel, das gibt's im VB aber leider nicht. Mit Polling (alle paar Sekunden nachschauen ob sich etwas geändert hat) habe ich in VB bisher nur schlechte Erfahrungen gesammelt zwecks Prozessorlast, wäre auf eine gangbare Lösung aber auch gespannt. Damit wäre ich wieder bei Bernds Antwort, dies lieber im Tool selbst zu automatisieren. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sk89 Mitglied Studentin
Beiträge: 29 Registriert: 19.05.2010 Windows XP x64 CATIA V5 R19 VBA 6.5 VB
|
erstellt am: 29. Jul. 2010 12:01 <-- editieren / zitieren --> Unities abgeben:
Das Problem liegt darin,dass ich über ein Makro nur ein leeres Sheet einfügen kann. Ich brauch aber ein Sheet, was den gleichen Rahmen hat, wie die Sheets zuvor. Und dies kommt vom Startmodell.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 29. Jul. 2010 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
|
Sk89 Mitglied Studentin
Beiträge: 29 Registriert: 19.05.2010 Windows XP x64 CATIA V5 R19 VBA 6.5 VB
|
erstellt am: 29. Jul. 2010 14:26 <-- editieren / zitieren --> Unities abgeben:
Ich will das Blatt aber nicht kopieren, sondern neu einfügen. Auf den Blättern davor sind schon Ansichten, deswegen kann ich sie nicht kopieren. Und wenn es wirklich solch ein Makro geben sollte, finde ich es leider nicht. Ich finde nur Makros, wo man ein leeres Blatt einfügt. Hab es auch schon durch Aufnehmen probiert, aber hier kann ich gar nicht auswählen, welcher Rahmen übernommen werden soll. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 29. Jul. 2010 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
Hallo tberger, ich würde mich den Vorrednern anschliessen und das Sheet per Makro kopieren. Kannst das ja mal so versuchen, evtl hilfts. Ist aber vba kein catscript sollte sich aber auch umschreiben lassen. Option Explicit Sub ViewCopy() Dim MyDrawing As DrawingDocument Dim MySheets As DrawingSheets Dim MyOldSheet As DrawingSheet Dim MyNewSheet As DrawingSheet Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySelection As Selection 'Document holen Set MyDrawing = CATIA.ActiveDocument 'Selection holen und sicherheitshalber löschen Set MySelection = MyDrawing.Selection MySelection.Clear 'alle Sheets holen Set MySheets = MyDrawing.Sheets 'Sheet zum kopieren holen (evtl. über eine UserSelection holen) Set MyOldSheet = MySheets.Item(1) 'oder 'Set MyOldSheet = MySheets.GetItem("Sheet.1") 'kopieren MySelection.Add MyOldSheet MySelection.Copy MySelection.Clear MySelection.Add MyDrawing.DrawingRoot MySelection.Paste 'neues Sheet holen und selection löschen Set MyNewSheet = MySelection.Item2(1).Value MySelection.Clear 'Views löschen (ausser RahmenView) !!!Gelockte Views erst unlocken!!! Set MyViews = MyNewSheet.Views For Each MyView In MyViews 'Hier die Views ausschließen die nich mit gelöscht werden sollen If MyView.Name <> "Background View" And MyView.Name <> "Main View" Then MyView.LockStatus = False MySelection.Add MyView End If Next MySelection.Delete MySelection.Clear 'Namen vergeben MyNewSheet.Name = "Ich_eine_neue_View" 'Sheet oder Drawing updaten MyNewSheet.Update MyDrawing.Update End Sub mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 29. Jul. 2010 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
|
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 29. Jul. 2010 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für Sk89
Ich noch mal... eine andere Variante wäre (für Catvba mit einer Form mit einem oder zwei Button). Du unterteilst es in zwei Sub´s und Dimensionierst Variablen die du weiterbenutzen willst Global. "Public" Also: 1. Sub 1 wird gestartet und macht irgendetwas, dann kommt die Abfrage: Blatt einfügen? wenn ja dann Sub beenden wenn nein dann weiter mit Sub 2 2. Sollte ja gedrückt wurden sein, dann kann der Benutzer sein Blatt einfügen (dazu könntest du mal erklären wie der Benutzer das macht). Wenn er das gemacht hat drückt er auf einem Button "Weiter" auf einer Form und dieser startet Sub2. Solltest du noch das neue Sheet gebrauchen kannst du ja vor dem "Weiter" klicken dieses anselektieren oder eine UserSelection einbauen. Ich habe das mal so bei Achsensystem generierung gemacht. Erst ein VorschauAchsensystem zum modifizieren erzeugt und dann alle anderen danach generiert. So ersparst du dir eine ständige Abfrage mit dem Makro was wie schon erwähnt auf die Prozessorleistung geht. Aber du könntest nochmal genauer erklären was vor dem Stopp, während des Stopps und danach gemacht wird evtl. ist der Stopp auch nicht nötig... Hoffe es war einigermaßen Verständlich mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sk89 Mitglied Studentin
Beiträge: 29 Registriert: 19.05.2010 Windows XP x64 CATIA V5 R19 VBA 6.5 VB
|
erstellt am: 30. Jul. 2010 07:59 <-- editieren / zitieren --> Unities abgeben:
Ich möchte eine Zeichnung automatisch erstellen. Zum Starten des Makros muss eine Zeichnung geöffnet sein. Dann muss man den Ordner angeben in der die Parts alle vorhanden sind. Diese werden dann in einer bestimmten Reihenfolge geöffnet. Wenn Sie geöffnet sind gibt es eine Auswahl, welche Ansicht man als Hauptansicht haben möchte. Nach jedem Erstellen der 3 Ansichten eines Parts wird gefragt, ob die 3 Ansichten vom folgenden Part auf das nächste Blatt erstellt werden sollen. Hier mein Code wo ich das neue Blatt einfügen möchte. For r = i - l To doc_counter bnm = Mid(Doc_Name_Reorder(r, 0), 11, 1) If bnm = 5 Then Makro2 opart.Close BoxM = MsgBox("Möchten Sie die nächste View auf ein neues Blatt", 3) If BoxM = 6 Then 'neues Blatt einfügen 'hier ist mein Problem, in der UserForm4 hab ich zurzeit ein Button auf dem Weiter steht. Dieser sollte der Benutzer anklicken wenn er die Zeichnung eingefügt hat. Aber da ich vbModeless hinter dem .show stehen habe, läuft das Makro im Hintergrund weiter. UserForm4.Show vbModeless Set oSheet = oDrawing.Sheets.ActiveSheet ElseIf BoxM = 2 Then GoTo Sprungm ElseIf BoxM = 7 Then End If End If Next Diese For Schleife kommt 5 mal hintereinander, da ich die Parts, mit den Zahlen 2-5 im Dateinamen, nicht in der Reihenfolge aufrufen darf. ich brauch erst die 4, dann die 2, dann die 3, dann die 5. Das ist bei bnm gemeint ;-) Lg steffi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sk89 Mitglied Studentin
Beiträge: 29 Registriert: 19.05.2010 Windows XP x64 CATIA V5 R19 VBA 6.5 VB
|
erstellt am: 30. Jul. 2010 08:42 <-- editieren / zitieren --> Unities abgeben:
So hab es mit eurer Hilfe endlich gepackt. Vielen Lieben Dank für die vielen Antworten. Den Code von Mario hab ich jetzt ein bissel umgeschrieben und jetzt passt es. Code: Sub Blatteinfuegen() Dim MySheets As DrawingSheets Dim MyNewSheet As DrawingSheet Dim MyViews As DrawingViews Dim MyView As DrawingView Dim MySelection As Selection'Document holen Set oDrawing = CATIA.ActiveDocument 'Selection holen und sicherheitshalber löschen Set MySelection = oDrawing.Selection MySelection.Clear 'alle Sheets holen Set MySheets = oDrawing.Sheets 'Sheet zum kopieren holen (evtl. über eine UserSelection holen) 'Set oSheet = MySheets.Item(1) 'oder 'Set MyOldSheet = MySheets.GetItem("Sheet.1") 'kopieren MySelection.Add oSheet MySelection.Copy MySelection.Clear MySelection.Add oDrawing.DrawingRoot MySelection.Paste 'neues Sheet holen und selection löschen Set MyNewSheet = MySelection.Item2(1).Value MySelection.Clear 'Views löschen (ausser RahmenView) !!!Gelockte Views erst unlocken!!! Set MyViews = MyNewSheet.Views For Each MyView In MyViews 'Hier die Views ausschließen die nich mit gelöscht werden sollen If MyView.Name <> "Background View" And MyView.Name <> "Main View" Then MyView.LockStatus = False MySelection.Add MyView End If Next MySelection.Delete MySelection.Clear 'Namen vergeben Set oSheet = MyNewSheet 'Sheet oder Drawing updaten oSheet.Update oDrawing.Update End Sub
oSheet und oDrawing hab ich vorher schon dimensioniert gehabt. Supi Lg steffi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |