VBA Solidworks Dateiname

Hallo, tut mir leid, auf dieses Thema zurückzukommen, ich war 2 Monate abwesend und das Thema, das ich eröffnet hatte, ist nicht gelöst.

Ich habe ein Problem mit einer Makroaufschlämmung.

Wenn ich es benutze, habe ich eine Datei mit dem Namen XXXXXD05  und wenn ich sie über mein Makro kopiere, wird sie zu xxxxxd05 .

Es ist, als hätte ich eine Datei mit dem Namen "OrAngE" und ich habe sie unter dem Namen "orange"  gespeichert, aber ich kann nicht finden, wie ich ihr sagen soll, dass sie das ursprüngliche Format behalten soll. 

Ich habe versucht, einen Vergleichstext zu setzen, aber es ändert sich nichts 

Hier ist ein bisschen von meinem Makro.

Option Explicit
Option Compare Text ' ne prend pas compte du fait des majuscule "XXXXX"="xxxxx"
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim DerligneOuvre As Integer
Dim DerligneFerme As Integer

Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim Warnings As Long
Dim Errors As Long
Dim i As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Dim oFSO As Scripting.FileSystemObject
Dim oDrv As Drive
Dim oFl As Folder



Public Function DossierExiste(MonDossier As String)
   If Len(Dir(MonDossier, vbDirectory)) > 0 Then
      DossierExiste = True
   Else
      DossierExiste = False
   End If
End Function


' ----------------------------------------------------création dossier---------------------------------------------------------------------------------

Private Sub CommandButton1_Click()

If TextBox1.value = "" Then
       MsgBox "mettre un numero de dossier"
       Exit Sub
End If

'creer un repertoire affaire
Dim MonDossier As String
Sheets("CopieDeProjet").Range("F2") = TextBox1.value
MonDossier = Sheets("CopieDeProjet").Range("F4")
If DossierExiste(MonDossier) = True Then
       MsgBox "Le dossier existe... prendre un numero non utiliser"
       Exit Sub
Else
        MsgBox "dossier creer..."
        MkDir Sheets("CopieDeProjet").Range("F4")
End If
'----------------------------------------------------enregistrement assemblage-----------------------------------------------------------------------------------------
Set swApp = CreateObject("SldWorks.application")
Set Part = swApp.ActiveDoc
boolstatus = Part.ForceRebuild3(True)
boolstatus = Part.Save2(False)



Set swModelDoc = swApp.ActiveDoc
Set swModelDocExt = swModelDoc.Extension

Part.ClearSelection2 True
Part.EditRebuild3

'---------------------------------------------------------debut copie-----------------------------------------------------------------------------------------------------

Set swApp = CreateObject("SldWorks.Application")

    ' Get Pack and Go object
Set swPackAndGo = swModelDocExt.GetPackAndGo

    ' Get number of documents in assembly
namesCount = swPackAndGo.GetDocumentNamesCount

    ' Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox components
swPackAndGo.IncludeDrawings = True
swPackAndGo.IncludeSimulationResults = False
swPackAndGo.IncludeToolboxComponents = False



    ' Get current save-to paths and filenames of the assembly's documents

status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)




 ' Set document paths and names for Pack and Go
For i = 0 To (namesCount - 1)
If InStr(pgFileNames(i), "34980") <> 0 Then
pgFileNames(i) = Replace(pgFileNames(i), "34980", "34950")
Else
pgFileNames(i) = ""
End If
Next i
status = swPackAndGo.SetDocumentSaveToNames(pgFileNames)

    ' Set folder where to save the files
    
myPath = " chemin du dossier "
status = swPackAndGo.SetSaveToName(True, myPath)
    
    ' Flatten the Pack and Go folder structure; save all files to the root directory
swPackAndGo.FlattenToSingleFolder = True

    ' Pack and Go
statuses = swModelDocExt.SavePackAndGo(swPackAndGo)

End sub



 Ich hatte diesen hier als Basis

 

http://help.solidworks.com/2015/English/api/sldworksapi/Pack_and_Go_an_Assembly_Example_VB.htm

Hallo

nach ein paar Tests habe ich den Eindruck, dass dies über die Funktionen von "GetPackAndGo" schwer zu lösen sein wird, die Funktion "GetDocumentNames" scheint Namen zurückzugeben, die systematisch klein geschrieben werden...

Herzliche Grüße

1 „Gefällt mir“

Wenn ich Get pack and go nicht durchlaufe, scheint es mir leider, dass es mir später Referenzprobleme bereitet.

Ihrer Meinung nach  ist der Name der Teile daher schlecht wiederhergestellt, das Problem könnte vielleicht später kommen, "Ersetzen" oder "SavePackAndGo"

Die Replace-Funktion spielt damit nicht mit??  

replace(Ausdruck, Suchen, Ersetzen, [Start], [Anzahl], [Vergleichen])

https://excel-malin.com/tutoriels/vba-fonctions/replace/

Leider denke ich nach kurzem Suchen auch, dass es von "Getdocumentnames" stammt

Zu Ihrer Information, eine Takeaway-Komposition hat immer die Groß-/Kleinschreibung der Dateinamen geändert, und dies seit der 2004er Version des Speichers, wo sie bereits die Erweiterung von SLDPRT in sldprt geändert hat. All dies aus dem Gedächtnis, aber ich weiß, dass wir damals mit einer Software aus der MYCAD-Suite belästigt wurden, die im Gegensatz zu Windows den Unterschied zwischen diesen 2 Erweiterungsbrüchen ausmachte.

2 „Gefällt mir“

Okay, danke für die Informationen, es ist immer nützlich auf meiner Seite, derzeit haben wir "Start kopiert aus Projekt", das die Groß-/Kleinschreibung der Teile beibehält, indem die ersten 5 Zeichen durch 5 andere ersetzt werden, es könnte mich interessieren , deshalb denke ich , dass ich mit der Funktion "Ersetzen" spielen kann , aber ich weiß es nicht Nicht wie.

Deshalb frage ich mich, ob GetDocumentSaveToNames Klein- und Großbuchstaben nicht berücksichtigt.

Oder wenn ich die Ersetzungsfunktion verwende, wird alles klein geschrieben. 

Hallo

Indem wir verfolgen, was bei jedem Schritt passiert, stellen wir fest, dass das Problem auftritt, sobald die Funktion "GetDocumentNames" aufgerufen wird, die der Funktion "Ersetzen" vorgeschaltet ist, die nichts mit dem Problem zu tun hat.

Herzliche Grüße

1 „Gefällt mir“

Und indem Sie einfach die Funktion "Ersetzen" aus dem Makro entfernen, ist das Problem immer noch vorhanden ...

1 „Gefällt mir“

Ich habe es tatsächlich versucht, das Problem ist hier 

Option Explicit
Option Compare Text ' ne prend pas compte du fait des majuscule "XXXXX"="xxxxx"
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim DerligneOuvre As Integer
Dim DerligneFerme As Integer

Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim Warnings As Long
Dim Errors As Long
Dim i As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Dim oFSO As Scripting.FileSystemObject
Dim oDrv As Drive
Dim oFl As Folder



Public Function DossierExiste(MonDossier As String)
   If Len(Dir(MonDossier, vbDirectory)) > 0 Then
      DossierExiste = True
   Else
      DossierExiste = False
   End If
End Function


' ----------------------------------------------------création dossier---------------------------------------------------------------------------------

Private Sub CommandButton1_Click()

If TextBox1.value = "" Then
       MsgBox "mettre un numero de dossier"
       Exit Sub
End If

'creer un repertoire affaire
Dim MonDossier As String
Sheets("CopieDeProjet").Range("F2") = TextBox1.value
MonDossier = Sheets("CopieDeProjet").Range("F4")
If DossierExiste(MonDossier) = True Then
       MsgBox "Le dossier existe... prendre un numero non utiliser"
       Exit Sub
Else
        MsgBox "dossier creer..."
        MkDir Sheets("CopieDeProjet").Range("F4")
End If
'----------------------------------------------------enregistrement assemblage-----------------------------------------------------------------------------------------
Set swApp = CreateObject("SldWorks.application")
Set Part = swApp.ActiveDoc
boolstatus = Part.ForceRebuild3(True)
boolstatus = Part.Save2(False)


'longstatus = Part.SaveAs3(Sheets("CopieDeProjet").Range("F3") & "\" & Sheets("CopieDeProjet").Range("E2") & ".SLDASM", 0, 2)
'Set Part = Nothing
'swApp.CloseDoc Sheets("CopieDeProjet").Range("E2") & ".SLDASM"
'Set Part = swApp.OpenDoc6(Sheets("CopieDeProjet").Range("F3") & "\" & Sheets("CopieDeProjet").Range("E2") & ".SLDASM", 2, 0, "", longstatus, longwarnings)
'Set Part = swApp.ActiveDoc
'Part.ClearSelection2 True
'Part.EditRebuild3


Set swModelDoc = swApp.ActiveDoc
Set swModelDocExt = swModelDoc.Extension

Part.ClearSelection2 True
Part.EditRebuild3

'---------------------------------------------------------debut copie-----------------------------------------------------------------------------------------------------

Set swApp = CreateObject("SldWorks.Application")

    ' Get Pack and Go object
Set swPackAndGo = swModelDocExt.GetPackAndGo

    ' Get number of documents in assembly
namesCount = swPackAndGo.GetDocumentNamesCount

    ' Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox components
swPackAndGo.IncludeDrawings = True
swPackAndGo.IncludeSimulationResults = False
swPackAndGo.IncludeToolboxComponents = False

' Get current paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentNames(pgFileNames)
Debug.Print ""
Debug.Print "  Current path and filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "    The path and filename is: " & pgFileNames(i)
    Next i
End If
' Get current save-to paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)
Debug.Print ""
Debug.Print "  Current default save-to filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "   The path and filename is: " & pgFileNames(i)
    Next i
End If

Insbesondere wird die 

' Get current paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentNames(pgFileNames)
Debug.Print ""
Debug.Print "  Current path and filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "    The path and filename is: " & pgFileNames(i)
    Next i
End If
' Get current save-to paths and filenames of the assembly's documents
status = swPackAndGo.GetDocumentSaveToNames(pgFileNames, pgFileStatus)
Debug.Print ""
Debug.Print "  Current default save-to filenames: "
If (Not (IsEmpty(pgFileNames))) Then
    For i = 0 To UBound(pgFileNames)
        Debug.Print "   The path and filename is: " & pgFileNames(i)
    Next i
End If

 

 

Ich schaue weiter, ob jemand eine Idee hat, ich bin interessiert.

Herzliche Grüße.

Möglicherweise habe ich eine Lösung gefunden, dass, wenn ich einen Code dieses Typs am Ende meines Makros hinzufüge, um alles in Großbuchstaben umzubenennen, glauben Sie, dass meine Referenzen in sw folgen werden??  

 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

ReDim pgGetFileNames(namesCount - 1)

ReDim pgDocumentStatus(namesCount - 1)

status = swPackAndGo.GetDocumentSaveToNames(pgGetFileNames, pgDocumentStatus)

 

 

 

 

' Pack and Go

statuses = swModelExt.SavePackAndGo(swPackAndGo)

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Add the following lines after Pack and go command   

For i = 0 To (namesCount - 1) '''''''''''''change lowecase to uppercase

 

 

        Name pgGetFileNames(i) As UCase(pgGetFileNames(i))    ' Rename file.

             If (Right(UCase(pgGetFileNames(i)), 7) = ".SLDPRT") Then

                DRAW = Replace(UCase(pgGetFileNames(i)), "SLDPRT", "SLDDRW")

                If Dir(DRAW) <> "" Then Name DRAW As UCase(DRAW)

            End If

    Next i

 

Dies löst nicht das Problem der Vermischung von Klein- und Großbuchstaben, wie in Ihrem Beispiel mit dem Wort "OrAngE", Sie haben alles in Großbuchstaben statt alles in Kleinbuchstaben.

Herzliche Grüße

Ja, leider kann ich keine Lösung finden, also habe ich ein Stück Code hinzugefügt, das durch Windows geht, um meine Teile in Großbuchstaben umzubenennen. Ich habe nur ein Problem, dass meine Teile in Großbuchstaben geschrieben sind. 

aber wenn ich Solidworks öffne, sind sie Kleinbuchstaben 

 

Es ist nicht der Bruch , den ich haben wollte, aber ich habe meiner Meinung nach keine andere Wahl ... :/

Ich verstehe nicht, warum Sie durch Windows gehen, um Ihre Teile in Großbuchstaben umzubenennen, Sie müssen nur einfügen:

    For i = 0 To (namesCount - 1)
        pgFileNames(i) = Replace(pgFileNames(i), pgFileNames(i), UCase(pgFileNames(i)))
    Next i

Vor Ihren Zeilen:

myPath = " chemin du dossier "
status = swPackAndGo.SetSaveToName(True, myPath)

Wenn Sie dann Ihre Baugruppe über PackAnGo öffnen, überprüfen Sie, ob die ursprüngliche Baugruppe geschlossen ist, da Solidworks sonst möglicherweise auf die alte Baugruppe und nicht auf die neue Baugruppe verweist, da die Groß-/Kleinschreibung nicht beachtet wird.

Herzliche Grüße