|   |   |    | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
  |  
| 
Autor
 | 
Thema:  SolidWorks API: SaveAs3 falsches Result (230 mal gelesen)
 | 
 
 
                        KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles... i.R.
 
  
  
        Beiträge: 2679 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich:  - SWX2020 SP5;  - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung:    VBA, aktuell Visual Studio  2022/VB.Net ------------------ privat: ab 2024 Onshape  seit 2025 SolidWorks for Makers (und Rentner) 
                         | 
                        
                         
                                                 
                        erstellt am: 24. Jun. 2025 11:40       <-- editieren / zitieren -->           Unities abgeben:           
                        
  Hallo Freunde,  schöne Grüße aus dem Ruhestand         Nach längerer Zeit bastle ich gerade mal wieder an einem kleinen Progrämmchen, das u.a. mein aktuelle Modell in verschiedenen Formaten speichern soll. Gundsätzlich kein Problem, das Programm läuft (fast) wie es soll. Allerdings ist mir jetzt doch was aufgefallen: Wenn die zu speichernde Datei bereits existiert und z.B. durch ein anderes Programm gesperrt ist, kann sie ja nicht überschrieben werden. Die verschiedenen Varianten von SaveAs aus der SWX-API merken das aber offfenbar nicht, die geben mir immer einen Erfolg zurück. Beispiel:                  Code: boolstatus = swModExt.SaveAs(filename & "." & Format,                                              swSaveAsVersion_e.swSaveAsCurrentVersion,                                              swSaveAsOptions_e.swSaveAsOptions_Silent,                                              Nothing, errors, warnings)
  boolstatus ist immer true, auch errors und warnings sind immer 0, obwohl die Datei gesperrt ist und definitiv nicht überschrieben wird. Das selbe gilt auch für modeldoc2.SaveAs3() und andere Varianten. Mach ich was falsch? Wie kann ich das Problem abfangen?    Ich hab das schon so oft verwendet in meiner aktiven Zeit, das ist mir aber noch nie aufgefallen.    ------------------ Klaus es war einmal bei http://www.alko-tech.com | mein Gästebuch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
                        Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
 
  
  
        Beiträge: 2655 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit,  i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel 
                         | 
                        
                         
                                                 
                        erstellt am: 24. Jun. 2025 17:46       <-- editieren / zitieren -->           Unities abgeben:            Nur für KMassler  
                        
  Hallo Klaus, ich habe da in meinen Makros eine Abfrage drinnen, ob die Datei bereits existiert und evtl. in Verwendung ist. Ich komme momentan aber nicht an meine Makros ran, da ich zu Hause keine Lizenz mehr habe. Ich kann morgen mal im Geschäft schauen, und dir hier was posten. Grüße, Andi     ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                       
 
                        Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
 
  
  
        Beiträge: 2655 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit,  i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel 
                         | 
                        
                         
                                                 
                        erstellt am: 25. Jun. 2025 07:56       <-- editieren / zitieren -->           Unities abgeben:            Nur für KMassler  
                        
  und hier die Lösung: Code:
  Sub berSfPDFspeichern()    If FileExists(saveFileName) = True Then                     ' prüfen, ob die Datei existiert             If IsFileOpen(saveFileName) = True Then                 ' ob die Datei bereits von einem Benutzer geöffnet ist                 Call MsgBox(saveFileName & vbCrLf & "Datei wird bereits verwendet", vbSystemModal, "Information")                 Exit Sub             Else                 'Call MsgBox(saveFileName & vbCrLf & "Datei wird nicht verwendet", vbSystemModal, "Information")             End If                      If berSchreibgeschuetzt(saveFileName) = True Then       ' prüfen, ob die Datei schreibgeschützt ist                 'Call MsgBox(saveFileName & vbCrLf & "ist schreibgeschützt", vbSystemModal, "Information")                 Exit Sub                                            ' die Datei ist schreibgeschützt, lieber nicht speichern             End If         End If End SubPrivate Function FileExists(filename As String) As Boolean   'aus Makro savequalitybitmap von Stefan Berlitz     ' prüfen, ob Datei FileName existiert     Dim intLen As Integer       If filename <> vbNullString Then       On Error Resume Next       intLen = Len(Dir$(filename))       On Error GoTo 0       FileExists = (Not Err And intLen > 0)     'True = existiert, False = existiert nicht     Else       FileExists = False                        'Datei strDest existiert nicht     End If    End Function Private Function IsFileOpen(filename As String) As Boolean    'https://support.microsoft.com/de-de/help/291295/macro-code-to-check-whether-a-file-is-already-open     Dim filenum     As Integer     Dim errnum      As Integer     On Error Resume Next   ' Turn error checking off.               Deaktivieren Sie die Fehlerüberprüfung.     filenum = FreeFile()   ' Get a free file number.                Holen Sie sich eine freie Dateinummer.     ' Attempt to open the file and lock it.                         Versuchen Sie, die Datei zu öffnen und zu sperren.     Open filename For Input Lock Read As #filenum     Close filenum          ' Close the file.                        Schließen Sie die Datei.     errnum = Err           ' Save the error number that occurred.   Speichern Sie die aufgetretene Fehlernummer.     On Error GoTo 0        ' Turn error checking back on.           Schalten Sie die Fehlerprüfung wieder ein.     ' Check to see which error occurred.                            Überprüfen Sie, welcher Fehler aufgetreten ist.     Select Case errnum         ' No error occurred.                                        Es ist kein Fehler aufgetreten.         ' File is NOT already open by another user.                 Datei ist NICHT bereits von einem anderen Benutzer geöffnet.         Case 0             IsFileOpen = False         ' Error number for "Permission Denied."                     Fehlernummer für "Berechtigung verweigert"         ' File is already opened by another user.                   Datei ist bereits von einem anderen Benutzer geöffnet.         Case 70             IsFileOpen = True         ' Another error occurred.                                   Ein anderer Fehler ist aufgetreten.         Case Else             Error errnum     End Select End Function Private Function berSchreibgeschuetzt(filename As String) As Boolean ' https://www.tutorials.de/threads/dateien-auf-schreibschutz-pruefen.76789/     Dim fso As FileSystemObject     Dim f   As File          Set fso = New FileSystemObject     Set f = fso.GetFile(filename)          If (f.Attributes And ReadOnly) = ReadOnly Then         berSchreibgeschuetzt = True         Call MsgBox(filename & vbCrLf & "ist schreibgeschützt", vbSystemModal, "Information")     ' Anzeige des kpl. Pfades incl. Dateinamen und Extender     Else         berSchreibgeschuetzt = False     End If          'Objekte freigeben     Set f = Nothing     Set fso = Nothing      End Function 
  Ich hoffe der Code ist komplett. Viel Erfolg Grüße Andi     ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP  |  
                        
 | Anzeige.:
  Anzeige: (Infos zum Werbeplatz >>)
    |