Code:
Sub Test_ExpBgr2Stp()
' exportiert alle Komp. einer Bgr, im KS der Bgr!
'
' KraBBy 24.04.2018 Dim sPfad As String, sDatName As String
sPfad = "C:\temp\TestExp\" 'hier Export-Pfad angeben!
'Prüfung ob Pfad existiert nötig? -> Nein, wird ggf. erstellt
Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument
'alle Komp. unsichtbar schalten, Status merken
Dim oOcc As ComponentOccurrence
Dim i As Integer, iMax As Integer
iMax = oDoc.ComponentDefinition.Occurrences.Count
Dim bSichtbar() As Boolean
ReDim bSichtbar(1 To iMax)
For i = 1 To iMax
Set oOcc = oDoc.ComponentDefinition.Occurrences.Item(i)
If oOcc.Visible Then
oOcc.Visible = False
bSichtbar(i) = True
Else
bSichtbar(i) = False
End If
Next 'i
'Schleife für eigentlichen Export
For Each oOcc In oDoc.ComponentDefinition.Occurrences
oOcc.Visible = True
sDatName = oOcc.Name
sDatName = clear_DatName(sDatName) 'unzulässige Zeichen f. Dateinamen entfernen
sDatName = NextFreeFileName(sPfad, sDatName, "stp") 'einzigartigen Dateinamen erz.
Call ExportToSTEP(sPfad, sDatName, oDoc)
oOcc.Visible = False
Next 'oOcc
'Sichtbarkeit wiederherstellen
For i = 1 To iMax
Set oOcc = oDoc.ComponentDefinition.Occurrences.Item(i)
If bSichtbar(i) Then oOcc.Visible = True Else oOcc.Visible = False
Next 'i
End Sub
Private Function NextFreeFileName(sPfad As String, sDatName As String, sFileExtension As String) As String
' hängt einen Zähler an den Dateinamen, falls die Datei bereits existiert
' sPfad: Pfad mit "\" am Ende
' sDatName: Dateiname ohne Datei-Endung
' sFileExtension: Dateiendung ohne Punkt!
' Rückgabewert: sDatName mit angehängtem Zähler
' KraBBy 24.04.2018
Dim i As Integer
Dim i2 As String
Dim filename As String
filename = sPfad & sDatName & "." & sFileExtension
If Dir(filename) = "" Then 'vorgeschlagener Name existiert noch nicht
NextFreeFileName = sDatName 'Rückgabewert ist Eingabewert
Exit Function
End If
For i = 1 To 99 Step 1 'prüft, ob die Datei "filename" (fortlaufende nr.)existiert, erste freie Nr. wird verwendet
If i < 10 Then
i2 = "0" + CStr(i)
Else
i2 = "" + CStr(i)
End If
filename = sPfad & sDatName & "_" & i2 & "." & sFileExtension
If Dir(filename) = "" Then Exit For
' (wenn filename nicht existiert, wird leerer String zurückgegeben)
Next
NextFreeFileName = sDatName & "_" & i2 'Rückgabewert mit "gefundenem" Dateinamen
End Function
Function clear_DatName(Str As String) As String
' wandelt einen gegebenen Text in einen "konformen Text"
' dieser neue Wert wird zurückgegeben
Dim name_alt As String
Dim name_neu As String
name_alt = Str
name_neu = Replace(name_alt, " ", "_") 'alle Leerz. ersetzen
'name_neu = Replace(name_neu, "-", "_") 'Bindestriche ersetzen
name_neu = Replace(name_neu, ".", "_") 'Punkte ersetzen
name_neu = Replace(name_neu, ",", "_")
name_neu = Replace(name_neu, "ä", "ae") 'Umlaute...
name_neu = Replace(name_neu, "Ä", "Ae")
name_neu = Replace(name_neu, "ö", "oe")
name_neu = Replace(name_neu, "Ö", "Oe")
name_neu = Replace(name_neu, "ü", "ue")
name_neu = Replace(name_neu, "Ü", "Ue")
name_neu = Replace(name_neu, "ß", "ss")
name_neu = Replace(name_neu, "^", "_")
name_neu = Replace(name_neu, "°", "_")
name_neu = Replace(name_neu, """", "_") 'Anführungszeichen (")
'name_neu = Replace(name_neu, "§", "_")
'name_neu = Replace(name_neu, "$", "_")
'name_neu = Replace(name_neu, "%", "_")
'name_neu = Replace(name_neu, "&", "_")
name_neu = Replace(name_neu, "/", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "\", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "=", "_")
name_neu = Replace(name_neu, "?", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "*", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "~", "_")
name_neu = Replace(name_neu, "<", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, ">", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "|", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, ":", "_") ' nicht für Dateinamen zugelassen
name_neu = Replace(name_neu, "[", "(")
name_neu = Replace(name_neu, "]", ")")
dErsetzen name_neu 'Sub, doppelte __ ersetzen, rekursiv
'Rückgabewert
clear_DatName = name_neu
End Function
Private Sub dErsetzen(ByRef txt)
' doppelte Unterstriche "__" werden durch einfache "_" ersetzt
' rekursiv
If Not (0 = InStr(txt, "__")) Then
txt = Replace(txt, "__", "_") 'doppelte __ ersetzen
End If
If Not (0 = InStr(txt, "__")) Then dErsetzen txt 'Rekursion
End Sub
Public Sub ExportToSTEP(Optional sPfad As String, Optional sDatName As String, Optional oDok As Document)
' aus der Hilfe zum "TranslatorAddIn Interface" eingefügt
' und angepasst
' KraBBy 10.06.2014
'
' Parameter:
' sPfad mit \ am Ende
' sDatName ohne Dateiendung
' oDok Verweis auf Dokument, das exportiert werden soll
'
' ------------------------ SRe
If "" = sPfad Then
sPfad = "C:\Temp\"
sDatName = "temptest"
End If
If "Nothing" = TypeName(oDok) Then 'wenn referenz nicht übergeben wird (weil optional)
Set oDok = ThisApplication.ActiveDocument
End If
' Get the STEP translator Add-In.
Dim oSTEPTranslator As TranslatorAddIn
Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")
If oSTEPTranslator Is Nothing Then
MsgBox "Could not access STEP translator."
Exit Sub
End If
Dim oContext As TranslationContext
Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
Dim oOptions As NameValueMap
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
If oSTEPTranslator.HasSaveCopyAsOptions(oDok, oContext, oOptions) Then
' Set application protocol.
' 2 = AP 203 - Configuration Controlled Design
' 3 = AP 214 - Automotive Design
' 4 = AP 214 - Automotive Design International Standard
oOptions.Value("ApplicationProtocolType") = 4
oOptions.Value("export_fit_tolerance") = 0.001 ' "Standard"
' Other options...
oOptions.Value("Author") = "-Makro-"
'oOptions.Value("Authorization") = ""
'oOptions.Value("Description") = ""
'oOptions.Value("Organization") = ""
oContext.Type = kFileBrowseIOMechanism
Dim oData As DataMedium
Set oData = ThisApplication.TransientObjects.CreateDataMedium
oData.filename = sPfad & sDatName & ".stp"
On Error Resume Next
Call oSTEPTranslator.SaveCopyAs(oDok, oContext, oOptions, oData)
If Err.Number = 0 Then
'MsgBox "Export erfolgt" & vbCrLf & oData.filename, vbInformation, "STEP Fertig"
gsFertigMsg = gsFertigMsg & sDatName & ".stp" & vbCrLf
'[...]
'[...]
Else
MsgBox "Fehler bei STEP:" & vbCrLf & Err.Description, vbCritical, "Fehler:" & Err.Number
End If
End If
'Aufräumen
Set oSTEPTranslator = Nothing
Set oContext = Nothing
Set oOptions = Nothing
Set oData = Nothing
End Sub