| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Abfrage bei DXF speichern (1647 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 26. Mrz. 2011 11:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich habe eines meiner älteren Programme etwas erweitert. Ferner möchte ich diesem hinzufügen, dass wenn die DXF - Datei bereits vorhanden ist, dann MsgBox "Yes" / "No" etc. Hier der Code:
Code:
For Each BlockEnt In DSSet Set BlockObj = BlockEnt If BlockObj.ObjectName = "AcDbBlockReference" Then If BlockObj.HasAttributes Then BlockWert = BlockObj.GetAttributes '--DXF - Datei erzeugen--!!! If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString) = BlockWert(0).TextString Then '--Abfrage ob man die bereits vorhandene Datei überschreiben möchte--!!! Dim Antwort As VbMsgBoxResult Antwort = MsgBox("Die Datei ist bereits vorhanden, wollen Sie die Datei überschreiben?", vbQuestion + vbYesNo, "Frage") Select Case Antwort Case vbYes strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing Call ListeDXFRegen Case vbNo Call ListeDXFRegen Exit Sub End Select Else strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing Call ListeDXFRegen End If End If End If Next BlockEnt
Das mit der Abfrage wenn die Datei bereits vorhanden ist funktioniert so leider noch nicht. Wo liegt da mein Fehler, oder wie müßte es richtig lauten? Vielen Dank im Voraus.
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 26. Mrz. 2011 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
|
Ex-Mitglied
|
erstellt am: 26. Mrz. 2011 13:13 <-- editieren / zitieren -->
Hi, >> If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString) = BlockWert(0).TextString Then Kannst Du mal nachsehen, was in den Variablen:
LB_DXFFileLocal.Caption BlockWert(0).TextString drinsteht? Ich würde mal, ohne den Inhalte der Variablen zu kennen, vermuten, dass da die Extension fehlt; oder endet der Inhalt von BlockWert(0).TextString mit ".dxf"? - alfred - ------------------ www.hollaus.at |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 26. Mrz. 2011 21:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten! Hallo Alfred! Danke für die Tips. Das mit dem & ".dxf" wars.
Code:
If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dxf") = BlockWert(0).TextString & ".dxf" Then
Nun funktioniert es prima. ... schönes Wochenende noch. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003 AutoCAD 2021/2022 CAD+T HP ZBook 15 G4, 64-bit, WIN 10 Pro
|
erstellt am: 27. Mrz. 2011 14:51 <-- editieren / zitieren --> Unities abgeben:
Hallo! Habe dazu noch eine Frage. Wie kann ich dem User nach dem Durchlauf der Schleife die Info geben, welche Datei überschrieben unter "Yes" und / oder unter "No" nicht überschrieben wurde? Code:
If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dxf") = BlockWert(0).TextString & ".dxf" Then '--Abfrage ob man die bereits vorhandene Datei überschreiben möchte--!!! Dim Antwort As VbMsgBoxResult Dim DxfVorhanden As String DxfVorhanden = BlockWert(0).TextString & ".dxf" Antwort = MsgBox("Die Datei - " & DxfVorhanden & " - ist bereits vorhanden, wollen Sie die Datei überschreiben?", vbQuestion + vbYesNo, "Frage") Select Case Antwort Case vbYes strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close ''###--schreiben in einer Textdatei ".txt" oder ".log" welche Datei überschrieben wurde--##???? End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing Case vbNo Resume Next ''###--schreiben in einer Textdatei ".txt" oder ".log" welche Datei nicht überschrieben wurde--##???? End Select Else
Hätte da jemand eine Lösungansatz für mich? Vielen Dankim Voraus.
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 27. Mrz. 2011 15:17 <-- editieren / zitieren --> Unities abgeben:
... habe da etwas gefunden, was auch soweit funktioniert. Code:
Select Case Antwort Case vbYes strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close '--in Textdatei schreiben--!!! Dim Nr As Integer Dim datei As String datei = LB_DXFFileLocal.Caption & "\" & "DxfLog.txt" Nr = FreeFile Open datei For Append As #Nr Print #1, BlockWert(0).TextString & ".dxf" Close #Nr '------------------------------ End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing Case vbNo Resume Next End Select
Die Datei DxfLog.txt sieht dann so wie im Anhang aus. Wie bekommt man es hin, das diese dann so aussieht, we ich sie in der DxfLog1.txt von Hand geschrieben habe? Ist das überhaupt möglich? Vielen Dank im voraus.
------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Mrz. 2011 15:20 <-- editieren / zitieren -->
Hi, ich fürchte, ich verstehe die Frage nicht, sonst würde ich zu: >> Wie kann ich dem User nach dem Durchlauf der Schleife die Info geben [...] In jedes Case eine MsgBox einsetzen. Code: MsgBox "Überschreibe: " & LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString
...oder Du arbeitest mit
Code:
ThisDrawing.Utility.Prompt "Überschreibe: " & LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString
Und ich kann mir nicht vorstellen, dass das gefragt war, das hättest Du schon gemacht, oder? - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 27. Mrz. 2011 15:36 <-- editieren / zitieren -->
Hi, Ok, unsere Posts haben sich überschnitten. >> Wie bekommt man es hin, das diese dann so aussieht, we ich sie >> in der DxfLog1.txt von Hand geschrieben habe? >> Ist das überhaupt möglich? Du sammelst in zwei Arrays die Meldungen, die Du ausgeben willst, zusammen. Einmal für die überschriebenen, einmal für die anderen Drawings. Und am Ende Deines Durchlaufs schreibst Du diese dann raus. .... das mal die Vorstellung, wie ich's machen würde. Mein Problem dabei ist, dass ich nicht weiss, was daran (bei Dir) nicht funktioniert? Die Idee wirst Du ja auch schon gehabt haben, vermute ich mal. - alfred - ------------------ www.hollaus.at |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 27. Mrz. 2011 20:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred! ... mit dem über Array nachgedacht hast Du recht. Ich weiss nur nicht, wie ich das richtig umsetzen muss? Daher wäre ich Dir sehr dankbar, wenn Du mir dabei helfen könntest. Code:
If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dxf") = BlockWert(0).TextString & ".dxf" Then '--Abfrage ob man die bereits vorhandene Datei überschreiben möchte--!!! Dim Antwort As VbMsgBoxResult Dim DxfVorhanden As String DxfVorhanden = BlockWert(0).TextString & ".dxf" Antwort = MsgBox("Die Datei - " & DxfVorhanden & " - ist bereits vorhanden, wollen Sie die Datei überschreiben?", vbQuestion + vbYesNo, "Frage") Select Case Antwort Case vbYes strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close '--DXFArray1---------------!!! Dim DXFArray1() As Variant Dim i As Info DXFArray1 = BlockWert(0).TextString & ".dxf" For i = 1 To UBound(DXFArray1) 'Hier die Frage, wie müßte das mit dem Array richte lauten??? 'Mit dem Array habe ich so meine Problem. 'Wie setzte ich es wo richtig ein? '.... '.... '--in Textdatei schreiben--??? Dim Nr As Integer Dim datei As String datei = LB_DXFFileLocal.Caption & "\" & "DxfLog.txt" Nr = FreeFile Open datei For Append As #Nr Print #1, BlockWert(0).TextString & ".dxf" Close #Nr '------------------------------ End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing Case vbNo Resume Next '--DXFArray1---------------!!! Dim DXFArray2() As Variant Dim e As Info DXFArray2 = BlockWert(0).TextString & ".dxf" For e = 1 To UBound(DXFArray2) 'Hier die Frage, wie müßte das mit dem Array richte lauten??? 'Mit dem Array habe ich so meine Problem. 'Wie setzte ich es wo richtig ein? '.... '.... '--in Textdatei schreiben--??? Dim Nr1 As Integer Dim datei1 As String datei1 = LB_DXFFileLocal.Caption & "\" & "DxfLog.txt" Nr1 = FreeFile Open datei1 For Append As #Nr Print #1, BlockWert(0).TextString & ".dxf" Close #Nr '------------------------------ End Select Else strTempPath = LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dwg" strFilename = RemoveExtension(ThisDrawing.Name) ThisDrawing.Wblock strTempPath, DSSet Set objExportFile = ThisDrawing.Application.Documents.Open(strTempPath) With objExportFile .SaveAs LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString, acR18_dxf .Close End With Kill strTempPath strTempPath = RemoveExtension(strTempPath) Set objExportFile = Nothing End If
Vielen Dank im Voraus. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Mrz. 2011 20:37 <-- editieren / zitieren -->
Hi, ich sehe in Deinem Code nicht, wie Du was aufrufst, ob dieses Codeschnippsel in einem Modul oder in der ThisDrawing oder in einer eigenen Instanz läuft. Wie soll ich da was machen können? Ein Vergleich dazu wäre, dass ich eine Nockenwelle brauche, aber nicht verrate, was rundherum ist (Automarke, Baujahr, Motortyp, ...). Nun denn, versuchen wir's In einem Modul definierst Du
Code: Dim FilesWritten1 as Collection 'hier kommen die rein, die 'normal' geschrieben wurden Dim FilesWritten2 as Collection 'hier kommen die rein, die 'überschrieben wurden' Dim FilesWriteCanceled as Collection 'hier kommt rein, was nicht überschrieben wurde
In der Procedure, wo Du den Durchlauf startest, schreibst Du dann am Anfang
Code: FilesWritten1 = New Collection FilesWritten2 = New Collection FilesWriteCanceled = New Collection
In Deiner Abarbeitung schreibst Du dann
Code: If Dir(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString & ".dxf") = BlockWert(0).TextString & ".dxf" Then Select Case Antwort Case vbYes '.... call FilesWritten2.Add(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString) '.... Case vbNo '.... call FilesWriteCanceled.Add(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString) '.... End Select Else '... call FilesWritten1.Add(LB_DXFFileLocal.Caption & "\" & BlockWert(0).TextString) '... End If
'und am Ende (in der Proc, wo Du die Schleifen durchgelaufen bist) kannst Du mit
Code: Dim tStr as Variant For each tStr in FilesWritten1 'da läufst Du jetzt alle 'normal' geschriebenen Dateien durch 'in tStr steht der Dateiname drin Next 'und das gleiche für die anderen beiden Collections.
die Dateinamen rausschreiben. HTH, - alfred - ------------------ www.hollaus.at |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 28. Mrz. 2011 20:13 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|