Autor
|
Thema: Parameter überprüfen ob vorhanden (3355 mal gelesen)
|
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 14. Aug. 2007 11:25 <-- editieren / zitieren --> Unities abgeben:
Hallo, zuerst möchte ich mal sagen, dass ich hier ganz neu bin und nun hoffe, dass mir hier einer helfen kann. Ich möchte ein Makro in Visual Basic erstellen (ich habe mich erst seit 2 Tagen mit der Programmiersprache auseinander gesetzt), welches ein Fenster im Part öffnet, in dem ich eigene Parameter eintragen kann. Diese Parameter sollen dann später in einem Draw in das Schriftfeld eingelesen werden. Ich habe es nun schon soweit hinbekommen, diese Parameter im Strukturbaum zu erstellen und den Inhalt über ein Fenster zu bearbeiten. Mein Problem ist nun, dass wenn ich dieses Makro ein weiteres Mal aufrufe, die Parameter nochmals erstellt werden und bei jedem weiteren Aufruf ein weiteres Mal. Meine Überlegung war nun, das Problem mit einer If-Then-Else-Verzweigung zu beheben, in der abgefragt wird, ob die Parameter schon vorhanden sind. Wenn nein, dann sollen die Parameter erstellt werden, wenn sie vorhanden sind, dann soll der Schritt mit der Parametererstellung übersprungen werden. Ich habe mal meinen Quelltext dazugelegt: Sub CATMain() ParameterEintragen userParameter.Show 0 ' Hier wird das Fenster aufgerufen, in dem die Parameter bearbeitet werden können. End Sub Sub ParameterEintragen() If [Parameter_vorhanden = ja] Then 'Hier weiß ich nicht, was ich eingeben muss, damit die Abfrage korrekt ausgeführt wird. Exit Sub Else Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set parameters1 = part1.Parameters Set strParam1 = parameters1.CreateString("Zeichenfolge.1", "") strParam1.Rename "Erstellt durch" strParam1.Value = "Student" part1.Update Set strParam2 = parameters1.CreateString("Zeichenfolge.2", "") strParam2.Rename "Ausgabedatum" strParam2.Value = "01.01.2007" Set strParam3 = parameters1.CreateString("Zeichenfolge.3", "") strParam3.Rename "Genehmigt von" strParam3.Value = "Ausbilder" Set strParam4 = parameters1.CreateString("Zeichenfolge.4", "") strParam4.Rename "Dokumentenart" strParam4.Value = "Zusammenbauzeichnung" Set strParam5 = parameters1.CreateString("Zeichenfolge.5", "") strParam5.Rename "Dokumentenstatus" strParam5.Value = "freigegeben" Set strParam6 = parameters1.CreateString("Zeichenfolge.6", "") strParam6.Rename "Sprache" strParam6.Value = "de" End If End Sub Ich hoffe mir kann hier jemand bei der Lösung meines Problems behilflich sein.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
krisztian.furedi Mitglied Konstrukteur / Maschinenbau
Beiträge: 73 Registriert: 21.10.2006 Catia V5R16 SP5 Hotfix 24
|
erstellt am: 14. Aug. 2007 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo Andre, probier mal was ähnliches: '***** Deklarationen wenn notwendig Dim part1 as Part Dim parameters1 As Parameters Set parameters1 = part1.parameters '***** Routine Parameter_vorhanden = false For i = 1 to parametes1.count Z = InStr(parameters1.Item(i).Name, "Zeichenfolge.1") If Z <> 0 Then Parameter_vorhanden = True End If Next '***** hier wird das Makros weitergehen Gruss, K. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 14. Aug. 2007 23:49 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo AndreeX00X, eine weitere Möglichkeit ist die Arbeit nach dem Fehlerprinzip, also einer Variable den Parameter mit dem gesuchten Namen zuweisen: Gibt es keinen Fehler, so existiert die Variable, gibt es einen Fehler, so muss diese noch erzeugt werden, z.B.: Code: On Error Resume Next Set strParam1 = parameters1.Item("Erstellt durch") If Err = 0 Then 'Parameter existiert On Error Goto 0 Exit Sub Else On Error Goto 0 Set strParam1 = parameters1.CreateString("Zeichenfolge.1", "") strParam1.Rename "Erstellt durch" strParam1.Value = "Student" End If
Bei Abfrage von mehreren Parametern müsste das dann in einer Schleife abgearbeitet werden. mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 15. Aug. 2007 17:29 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für die schnelle Hilfe. Ich habe es nun so hinbekommen, wie ich es haben will. Ich habe mal beides ausprobiert, jedoch bin ich mit der Lösung von Lusilnie besser gefahren. Mein Dank an dich. Bei der Lösung von krisztian.furedi ist immer ein Fehler aufgetreten, den meine geringen Programmierkünste noch nicht so richtig deuten konnten. Wahrscheinlich ist das nur wieder so eine Kleinigkeit, die mir nicht aufgefallen ist. Aber auch danke für deine Lösung. Gruß Andrée Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
YellowDevil Mitglied PI, Makroentwicklung, NC Automatisierung
Beiträge: 67 Registriert: 21.12.2006
|
erstellt am: 16. Aug. 2007 03:58 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Der Fehler Liegt in der Zeile: Z = InStr(parameters1.Item(i).Name, "Zeichenfolge.1") Der Befehl InStr ist dazu da in einer Zeichenfolge eine bestimmte Zeichenfolge zu suchen und die Position zurück zugeben, an der sie steht. Aufgebaut ist er so: InStr(Start,Zeichenfolge,Suchstring) Somit fehlt in der Zeile nur die Startposition. Z = InStr(1,parameters1.Item(i).Name, "Zeichenfolge.1") Somit sollte nun auch diese Methode zum Ziel führen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 17. Aug. 2007 11:30 <-- editieren / zitieren --> Unities abgeben:
Hallo YellowDevil, ich habe deinen Tipp mal ausprobiert, jedoch gibt mir VB den Fehler schon in der Zeile mit der For-Schleife an: Zitat: Laufzeitfehler '424' Objekt erforderlich
Ich habe auch noch mal nachgeschaut, ob ich nicht das Ende für die For-Schleife vergessen habe (z.B. End For), so etwas gibt es aber nicht. Also kann es daran schon mal nicht liegen. Ich könnte mir jetzt nur noch vorstellen, dass ich es an die falsche Stelle gesetzt habe, jedoch wüsste ich nicht, wo ich es sonst hinsetzen sollte. Code: Sub ParameterErzeugen()Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument '***** Deklarationen wenn notwendig Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters '***** Routine Parameter_vorhanden = False For i = 1 To parametes1.Count Z = InStr(1, parameters1.Item(i).Name, "Zeichenfolge.1") If Z <> 0 Then Parameter_vorhanden = True End If Next '***** hier wird das Makros weitergehen Set strParam1 = parameters1.CreateString("Zeichenfolge.1", "") strParam1.Rename "Erstellt_durch" strParam1.Value = "Student" Dim strParam2 As StrParam Set strParam2 = parameters1.CreateString("Zeichenfolge.2", "") strParam2.Rename "Ausgabedatum" ...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JPF Mitglied Programmierer
Beiträge: 128 Registriert: 17.08.2001 CATIA V5R19 SP9--HP420,Intel(R) Xeon(R) CPU E5-1620 3.60GHz,32 GB Ram, NVIDIA Quadro 2000--Windows 7 Enterprise 64bit
|
erstellt am: 17. Aug. 2007 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
|
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 17. Aug. 2007 12:12 <-- editieren / zitieren --> Unities abgeben:
Ja, der Fehler ist weg, jedoch erreiche ich mit dieser Variante nicht mein Ziel, da bei jedem Macro-Aufruf wieder die gleichen Parameter dazu angelegt werden und gerade das wollte ich ja vermeiden. Wenn das damit tatsächlich funktionieren soll, dann kann es ja nur noch daran liegen, dass ich das an die falsche Stelle gesetzt habe. Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 18. Aug. 2007 00:39 <-- editieren / zitieren --> Unities abgeben: Nur für AndreeX00X
Hallo AndreeX00X, der Code kann nicht das gewünschte Ergebnis haben, denn es bringt nichts, erst zu prüfen, ob ein bestimmter Paramter existiert und ihn dann, ungeachtet des Prüfergebnisses, neu anzulegen. Du solltest das Prüfergebnis schon verarbeiten, etwa so: Code: Sub ParameterErzeugen() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument '***** Deklarationen wenn notwendig Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters '***** Routine Parameter_vorhanden = False For i = 1 To parametes1.Count Z = InStr(1, parameters1.Item(i).Name, "Zeichenfolge.1") If Z <> 0 Then Parameter_vorhanden = True End If Next '***** hier wird das Makros weitergehen Dim strParam1 As StrParam If Parameter_vorhanden then Set strParam1 = parameters1.Item("Erstellt durch") Else Set strParam1 = parameters1.CreateString("Zeichenfolge.1", "") strParam1.Rename "Erstellt_durch" End If strParam1.Value = "Student" Dim strParam2 As StrParam If Parameter_vorhanden then Set strParam2 = parameters1.Item("Ausgabedatum") Else Set strParam2 = parameters1.CreateString("Zeichenfolge.2", "") strParam2.Rename "Ausgabedatum" End If ...
Hier musst Du eventuell die For-Next-Schleife vor jeden Parameter einfügen ...mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreeX00X Mitglied Ingenieur
Beiträge: 48 Registriert: 14.08.2007 CATIA V5 R16
|
erstellt am: 28. Aug. 2007 15:41 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, habe endlich mal die Zeit gefunden deinen Quellcode auszuprobieren und es funktioniert bis auf das fehlende "r" in parametes1.count -> parameters1.count alles prima. Vielleicht wäre das sogar die sichere Variante. Nochmals Danke. MfG AndreeX00X Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|