Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Auslagern von Quelltext in Funktionen

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
Autor Thema:  Auslagern von Quelltext in Funktionen (642 mal gelesen)
misterfpx
Mitglied
Ingenieur


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

Beiträge: 23
Registriert: 29.06.2010

Catia V5-6R2014 (R24)

erstellt am: 08. Sep. 2014 18: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

Hallo CAD.de Community,

ich möchte in meinem VBA Makro eine Zeilen Code in eine function packen, da ich diese Zeilen mehrere Male im Quelltext in der selben Variante verwende. Genauer gesagt geht es ums Speichern einer Zeichnung, also wird von der function nicht wirklich ein Wert zurückgegeben. Wie kann ich das machen. Hier der Code der zusammengefasst werden soll:

Public Function Zeichnung_Speichern()

Set drawingDocument0 = CATIA.ActiveDocument
drawingDocument0.SaveAs (filename_zeichnung)

If Err.Number = 0 Then

MsgBox "Die Zeichnung wurde erfolgreich unter gespeichert" & vbCrLf & vbCrLf & filename_zeichnung & vbCrLf & vbCrLf & "gespeichert!", vbInformation, "Speichern    erfolgreich!"

End If
 
End Function

Diesen Code möchte ich jetzt einfach mit dem Befehl Zeichnung_Speichern an den entsprechenden Stellen aufrufen können. Aber leider funktioniert das nicht. Wenn ich den Code komplett an die jeweiligen Stellen schreibe geht es ohne Probleme, dann hab ich aber mehreren Stellen immer wieder die selben Zeilen stehen, was ich nicht möchte. Wie kann ich das realisieren?


Beste Grüße

misterfpx

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Sep. 2014 18:15    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 misterfpx 10 Unities + Antwort hilfreich

Servus
Wenn du keinen Rückgabewert hast, kannst du den Code auch in eine Unterroutine (Sub) schreiben.
Wo ist den die Variable "filename_zeichnung" definiert?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

misterfpx
Mitglied
Ingenieur


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

Beiträge: 23
Registriert: 29.06.2010

Catia V5-6R2014 (R24)

erstellt am: 08. Sep. 2014 22:32    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

Hi Bernd, danke für die Antwort.

Wie definiere ich denn eine Unterroutine und wie rufe ich sie dann aus einem anderen Sub auf?
Die Variable filename zeichnung wird aus einem Pfad + mehreren Strings aus Textfelder in der Hauptroutine zusammengesetzt.

Grüße
Oliver

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 09. Sep. 2014 00: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 Nur für misterfpx 10 Unities + Antwort hilfreich

Hallo misterfpx,

in Deinem Fall würde ich das als Function anlegen; etwa so:

Public Function Zeichnung_Speichern(strFName As String) As Long
 
  Dim drawingDocument0 As DrawingDocument
 
  On Error GoTo SaveAs_ErrorHandler
 
  Set drawingDocument0 = CATIA.ActiveDocument
  drawingDocument0.SaveAs (strFName)
 
  'falls beim speichern ein Fehler auftritt, geht's von hier in die Fehler-Routine;
  'der return der fehlerroutine macht dann hier wieder weiter
 
  'ohne fehlermeldung geht's sonst hier weiter
  If Err.Number = 0 Then
      MsgBox "Die Zeichnung wurde erfolgreich unter gespeichert" & _
        vbCrLf & vbCrLf & filename_zeichnung & vbCrLf & vbCrLf & "gespeichert!", _
        vbOKOnly Or vbInformation, "Save As"
  End If
 
  Zeichnung_Speichern = Err.Number            'den fehler ans programm zurückgeben
Exit Function
'---------------------------------------------------
SaveAs_ErrorHandler:

  Dim errMsg As String
  Dim errRet As VbMsgBoxResult

  Select Case Err.Number
      'case 58              'hier wären fehler a la 'file already exists(Error 58)' abzuhandeln
'      Case 438
'      Case -2147467259
      Case Else
        errMsg = Err.Number & ": " & Err.Description & " in procedure SaveAs"
        errRet = MsgBox(errMsg, vbOKOnly, "SaveAs")
  End Select

'nach bearbeiten der fehlermeldung entweder return(noch mal probieren) oder return next(ignorieren und weiter
'oder ohne Return raus aus der function
  Return

End Function

Der Funktionsaufruf wäre dann:

  Dim lRet as long

  lRet = Zeichnung_Speichern(DerVollständigePfadStehtHier)
  if lRet = 0 then
      'weiter im programm
  else
      'auf fehler reagieren
      Exit Sub 'oder End
  endif

  Oder kürzer:
 
  if Zeichnung_Speichern(DerVollständigePfadStehtHier) <> 0 then exit sub


Wenn ich Deine Situation richtig einschätze, fängst Du mit VB/Catia-Makros grad an.
Als Stichworte der VB-Hilfe wären vermutlich 'Sub', 'Function', 'Error', 'Scope of Variables' interessant.

Hope it helps,
Joe

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