| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Attribute mit Excel abgleichen (6139 mal gelesen)
|
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 02. Feb. 2006 13:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum! Ich habe folgendes Problem: in einer Exceldatenbank stehen Einträge, die in Acad in Blöcken mit Attributen eingetragen werden sollen. Den entsprechenden Block finde ich über einen Eintrag in einem Attribut. Als erstes mache ich eine Auswahl über alle Objekte, prüfe ob sie ein Block sind und ob sie Attribut haben. Soweit die Theorie. Irgendwie klappt mein Auswahlsatz nicht. Mein Code: Dim ExcelApp As Object Dim ExcelWb As Object Dim i As Integer Dim AWSatz As AcadSelectionSet Public Sub CoordEntry() Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("C:\Test\Datenbank.xls") Set AWSatz = ThisDrawing.SelectionSets For i = 0 To AWSatz.Count - 1 If AWSatz(i).ObjectName = "IAcadBlockreferenz" Then If ObjectName.HasAttributes = True Then MsgBox "Klappt" End If End If Next End Sub Sieht jemand meinen Fehler? Wie bekomme ich eigentlich an ein bestimmtes Blockattrib heran? Bitte nicht gleich losmeckern, ich befinde mich in einer sehr labilen Verfassung mit dieser neuen Sprache! Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 02. Feb. 2006 13:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hallo Sven, da bist du nicht alleine. (mit der labilen Fassung) Da tun wir uns zusammen.  Hier einige Anmerkungen
Code:
'''' ' Excel als Verweis einbinden !!! Dim ExcelApp As excel.application Dim ExcelWb As excel.workbook Dim i As Integer Dim AWSatz As AcadSelectionSet ''' dim ExcelWorksheet as excel.worksheet dim entity as acadentity dim Block_Attribute as variant dim Attribut as acadattributreferencePublic Sub CoordEntry() Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("C:\Test\Datenbank.xls") ''' set excel.worksheet = excelwb.activesheet '''Set AWSatz = ThisDrawing.SelectionSets on error resume next Set AWSatz = ThisDrawing.SelectionSets ("Myselset") if err.number <> 0 then Set AWSatz = ThisDrawing.SelectionSets.add ("Myselset") end if on error goto 0 ' Hier nur selectset füllen z.b Awsatz.selectonscreen for each entity in awsatz If Entity.ObjectName = "IAcadBlockreferenz" Then If Entity.HasAttributes = True Then debug.print hat Attributte 'MsgBox "Klappt" Block_Attribute = Entity.getattributes for i= Lbound(Block_attribute) to uBound(Block_attribute) set Attribut = Block_attribute(i) debug.print Attriut.Textstring next i
End If End If next entity End Sub
sind ungetestet. Aber F1 an der Stelle sollte erst mal helfen.Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 06. Feb. 2006 09:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, Hallo Forum! Ich habe nochmal ein paar Anfängerfragen auf Deine Hilfestellung. Warum muss ich Excel als Verweis einbinden? Welchen Vorteil bringt mir das? Einen Verweis erzeuge ich mit "With...End With" oder? Wie rufe ich dann diesen wieder auf? Meine Auswahl der Blöcke möchte ich eigentlich automatisch vornehmen lassen und nicht per Fenster oder ähnlichem wählen. Wofür steht in Deinem Fall "Myselect"? Vielen Dank für Eure Mühe! Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 06. Feb. 2006 11:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hallo Sven, mit einem Verweis wird auf eine externe Bibliothek verwiesen. Mit dem Verweis hat man Zugriff auf dessen Objektmodel. Damit kannst du die darin enthaltenen Objekte und Datentypen deklarieren. Ein weiterer Vorteil ist die Kontexteingabehilde im Editor. Verweis und Projekt/Verweise der VBE. Mit einem Selektionset (AWSATZ) kannst du Teile (Auswahl) deiner Zeichnung bearbeiten. Anstatt SelectOnScreen gibt es auch die Möglichkeit alle Elemente mit einer Eigenschaft (Block) in eine Auswahl zu bringen. Alternativ kannst du natürlich auch alle Elemente im Modelspace untersuchen. For Each Entity in Thisdrawing.Modelspace Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 06. Feb. 2006 11:43 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hi Sven, hier mal ansatzweise der Code mit late Binding und Filter
Code:
Dim ExcelApp As Object Dim ExcelWb As Object Dim i As Integer Dim AWSatz As AcadSelectionSet Dim ExcelWorksheet As Object Dim entity As AcadEntity Dim Block_Attribute As Variant 'Dim Attribut As AcadAttributePublic Sub CoordEntry() Dim a& Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("d:mappe1.xls") Set ExcelWorksheet = ExcelWb.activesheet '''Set AWSatz = ThisDrawing.SelectionSets On Error Resume Next Set AWSatz = ThisDrawing.SelectionSets("Myselset") If Err.Number <> 0 Then Set AWSatz = ThisDrawing.SelectionSets.Add("Myselset") End If On Error GoTo 0 ' alle Blockrefs wählen Dim FType%(0), FData(0) FType(0) = 0: FData(0) = "INSERT" AWSatz.Select acSelectionSetAll, , , FType, FData For Each entity In AWSatz If entity.HasAttributes = True Then a = a + 1 Debug.Print a, entity.Name Block_Attribute = entity.GetAttributes For i = LBound(Block_Attribute) To UBound(Block_Attribute) Debug.Print "", "", Block_Attribute(i).TextString Next i End If Next entity End Sub
Gruss NancyEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 08. Feb. 2006 13:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum! Vielen Dank für Eure Hilfe, damit komme ich schon mal sehr viel weiter. @startrek: Ich habe nochmal einige Fragen zu Deiner Hilfe. Dim FType%(0), FData(0) FType(0) = 0: FData(0) = "INSERT" Warum steht dort einmal FType% mit Prozent? Was pasiert hier mit acSelectionSetAll?Wofür stehen die Leerstellen mit dem Komma? Ich habe nichts im Objektkatalog gefunden, dass man hier noch Parameter übergeben kann! AWSatz.Select acSelectionSetAll, , , FType, FData Wofür steht Myselset? Set AWSatz = ThisDrawing.SelectionSets.Add("Myselset") Welche Funktion haben hier die beiden "" Zeichen? Debug.Print "", "", Block_Attribute(i).TextString Viele Fragen, wie bei kleinen Kindern die gerade die Welt entdecken. Der Weg, den ich beschreiben will ist ja nicht mehr weit!?! Nur noch der Abgleich mit Excel und schon bin ich fertig. Also schon mal vielen Dank für Eure Hilfe! Gruß Sven
[Diese Nachricht wurde von Big Sven am 08. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 08. Feb. 2006 21:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hi Sven, > Warum steht dort einmal FType% mit Prozent? Ich - manchmal faul;-) Also das % ist die Kurznotation für Integer, e.g. Dim i% == Dim i as integer
Code: & == long # == double $ == string ! == single @ == currency
> Was pasiert hier mit acSelectionSetAll? lt. F2: Const acSelectionSetAll = 5 | Element von AutoCAD.AcSelect Das ist 'nur' eine acadinterne Konstante, der kann man keine Paramater übergeben, sondern sie selbst ist ein Parameter. Übergeben wird hier an die 'select' Methode [hit mal F1] Die Kommas stehen für weitere optionale Param's und da ich da nix reintun will, lass ich da leer. Das hängt einfach mit der Reihenfolge der erwarteten Parameter von Select zusammen.
Code:
'hier kommts auf die Reihenfolge an 'AWSatz.Select acSelectionSetAll, , , FType, FData'hier nicht, dafür Bezeichner notwendig AWSatz.Select Mode:=acSelectionSetAll, Filtertype:=FType, filterdata:=FData
Macht beides dasselbe, gehupft wie gesprungen, reine Geschmackssache halt. Übrigens, wenn Du man mal die o.g. Zeile abtippst - also so richtig mit der Tastatur, nix copypaste, gell ?!;-) - kommt nach select so ein blassgelber Flaggentooltip ...> Wofür steht Myselset? > Set AWSatz = ThisDrawing.SelectionSets.Add("Myselset") Hmm ..., das ist einfach der Name des Selectionset. Das AcadSelectionsets[Pl.]-Object besteht ja aus ner Art Collection von mehreren Selectionset[Sing.]-Objecten, und wenn man nun via .Add(Name) der Collection eins hinzufügt, dient der Name sozusagen als Index, damit man weiss, wie man es später ansprechen kann. Ist also nix weiter als eine Art Container. Wenn man vor End Sub den Container via AWSatz.delete entsorgt, wird das Element aus der Collection gelöscht, und man kann denselben Namen wieder verwenden, ansonsten gibts nen Error. Wie man das händelt ohne irgendwann bei mySelSet99 anzukommen, macht jeder bissel anders. Manche löschen direkt in einem Errorhandler am Ende, manche lassens einfach zu Beginn krachen via resume next, wenn's crasht > gibts den Namen - respektive das SSet schon und wird überschrieben, wenn nicht wird es angelegt. > Welche Funktion haben hier die beiden "" Zeichen? > Debug.Print "", "", Block_Attribute(i).TextString Ohh, leider gar keine! Sorry, mein Fehler, das war nonsens, es spielt keine Rolle ob: Debug.Print "", "", Block_Attribute(i).TextString oder Debug.Print , , Block_Attribute(i).TextString ich wollte nur die Attributes etwas einrücken, zwecks der Lesbarkeit im DFenster. Und das , [Komma] bewirkt da sowas wie ein 'Tab'. So, reicht erstmal für heute - ich hoffe ich konnte etwas erleuchten und nicht noch darker machen, was sowieso schon dark ist;-) Gruss Nancy
[Diese Nachricht wurde von startrek am 08. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 09. Feb. 2006 16:40 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy! Vielen Dank für Deine tollen Erklärungen. So wird es für mich VBA-Neuling auch verständlich. Ich habe mal ein bischen weitergemacht (ich habe einfach zu wenig Zeit) und stehe jetz vor folgenden Problem: Nachdem ich alle Blöcke durchforste und den richtigen herausgesucht habe, wähle ich das Attribut und möchte es in Excel in einer bestimmten Spalte suchen. Ich bin aber anscheinend nicht in meiner Exceldatei, die ich am Anfang öffne! Wie wechsel ich zwischen ACAD und Excel? Wie ist eigentlich der eleganteste Weg die Daten zwischen ACAD<=>Excel zu übertragen? Über die Zwischenablage oder? Code: Dim ExcelApp As Object Dim ExcelWb As Object Dim i As Integer Dim AWSatz As AcadSelectionSet Dim ExcelWorksheet As Object Dim Entity As AcadEntity Dim Block_Attribute As Variant Dim SuchText As String Dim SuchKblNr As String Public Sub CoordEntry() Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("C:\Test\Datenbank.xls") Set ExcelWorksheet = ExcelWb.activesheet On Error Resume Next Set AWSatz = ThisDrawing.SelectionSets("Myselset") If Err.Number <> 0 Then Set AWSatz = ThisDrawing.SelectionSets.Add("Myselset") End If On Error GoTo 0 ' alle Blockrefs wählen Dim FType(0) As Integer, FData(0) FType(0) = 0: FData(0) = "INSERT" AWSatz.Select acSelectionSetAll, , , FType, FData For Each Entity In AWSatz If Entity.HasAttributes = True Then 'Blocknamenüberprüfung If Left(Entity.Name, 11) = "Kblnr_leer_" Then Block_Attribute = Entity.GetAttributes For i = LBound(Block_Attribute) To UBound(Block_Attribute) If Block_Attribute(i).TagString = "KANR" Then 'Attributname SuchKblNr = Block_Attribute(i).TextString 'Hier fehlt mir etwas Columns("B:B").Select Selection.Find(What:=SuchKblNr, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate End If Next i End If End If Next Entity End Sub Vielen Dank für die Hilfe! Gruß Sven [Diese Nachricht wurde von Big Sven am 09. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 09. Feb. 2006 22:41 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hi Sven, jep, Du bist irgendwie nicht in deiner Exceldatei, sondern ganz konkret in Acad. Soll heissen, du musst jedesmal!, wenn du auf ein Excelobjekt, -methode zugreifst, auch darauf referenzieren oder anders, überall wo xl-Object davor steht, ist auch xl-Object drin. ;-) > Columns("B:B").select hier zB., damit weiss ja Acad gar nix anzufangen, es gibt ja da kein 'Columns()' in Acad, richtig muss es also heissen: ExcelWorksheet.Columns("B:B") ... zu dem .select lass' ich mich aber jetzt nicht aus, nur soviel ---> is ne gaaaaaaanz schlechte Idee in dem Fall, man kann fast jedes Excelobjekt _ohne_ select ansprechen und lebt damit um einiges ruhiger;-) Ansonsten s.u., allerdings weiss ich jetzt nicht, was du weiter vorhast mit der Tabelle. Gruss Nancy
Code:
Dim ExcelApp As Object Dim ExcelWb As Object Dim i As Integer Dim AWSatz As AcadSelectionSet Dim ExcelWorksheet As Object Dim Entity As AcadEntity Dim Block_Attribute As Variant Dim SuchKblNr As String Dim flag As BooleanPublic Sub CoordEntry() Set ExcelApp = CreateObject("Excel.Application") 'ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("d:\mappe1.xls") Set ExcelWorksheet = ExcelWb.sheets("Tabelle1") 'activesheet On Error Resume Next Set AWSatz = ThisDrawing.SelectionSets("Myselset") If Err.Number <> 0 Then Set AWSatz = ThisDrawing.SelectionSets.Add("Myselset") End If On Error GoTo 0 ' alle Blockrefs wählen Dim FType(0) As Integer, FData(0) FType(0) = 0: FData(0) = "INSERT" AWSatz.Select acSelectionSetAll, , , FType, FData For Each Entity In AWSatz If Entity.HasAttributes Then 'Blocknamenüberprüfung If Left(Entity.Name, 11) = "Kblnr_leer_" Then Block_Attribute = Entity.GetAttributes For i = LBound(Block_Attribute) To UBound(Block_Attribute) If Block_Attribute(i).TagString = "KANR" Then 'Attributname SuchKblNr = Block_Attribute(i).TextString 'hier auf das Excel-Objekt beziehen!!! MsgBox SuchKblNr & " found in Range: " & _ ExcelWorksheet.Columns("B:B").Find(What:=SuchKblNr).address flag = True GoTo ende End If Next i End If End If Next Entity ende: If Not flag Then MsgBox "nix gefunden" ExcelApp.Quit Set ExcelApp = Nothing: Set ExcelWb = Nothing: Set ExcelWorksheet = Nothing End Sub
[Diese Nachricht wurde von startrek am 09. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 09. Feb. 2006 23:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Ich nochmal Sven, beinahe vergessen, deine Frage: > Wie ist eigentlich der eleganteste Weg die Daten zwischen ACAD<=>Excel zu übertragen? > Über die Zwischenablage oder? Gute Frage, hmm sollte man denke von Fall zu Fall entscheiden. Die Zwischenablage ist sehr sehr schnell, aber du arbeitest da ausschliesslich mit einem String im Endeffekt. Effektiv hinsichtlich der Performance sind auch Arrays, zumal die Ranges sowieso Arrays sind. Ich weiss nicht, evtl. wär es eine Überlegung wert, ob man lieber aus Acad to Excel schreibt, oder aus Excel to Acad, das kommt aber immer drauf an was man denn eigentlich machen will. Wenn Du wirklich nur etwas vergleichen/abgleichen willst, hmm dann würd ich das ganze unter Excel schreiben und acad gar nicht erst öffnen, da bist um einiges schneller. Aber stop, ich schreib sachen, hab ich noch gar nicht probiert obs geht, mach ich morgen mal;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 10. Feb. 2006 13:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy, leider bin ich heute noch nicht weiter gekommen, aber vielleicht nächste Woche. Also mein Progamm soll von ACAD-Blöcken einige Attribute auslesen und in meine Excel Datenbank schreiben. Es handelt sich dabei um Querverweise von einer Zeichnung zur anderen. Im Verweis selber soll später der Inhalt mehrerer Attribute zusammengeführt werden (Zeichnungsnr., Geräteanschluss, Ort). Das heißt also, dass ich leider auch wieder Infos aus der Excel-Datenbank herausbekommen möchte um sie mit der gerade geöffneten DWG abzugleichen. Das wäre also die Kurzbeschreibung meines Vorhabens. Weiß eigentlich jemand, wie man den Dateinamen der aktuell geöffneten Datei herausbekomme? Schönes WE! Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 14. Feb. 2006 15:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum! Jetzt bin ich mit dem ersten Teil meines Ausfluges in die Welt von VBA fast fertig und habe nochmal ein paar Fragen. Erstmal meine Progammbeschreibung: Mein Programm soll aus einer bestehenden Exceldatenbank (Anlagenbeispiel) anhand einer Kabelnummer (Spalte 2) mit den Blöcken der aktuell geöffneten DWG vergleichen. Wenn diese übereinstimmt soll überprüft werden, ob sich der Eintrag in dieser Datei oder der dazugehörigen DWG stammt. Der Dateiname steht in Spalte 1. Stimmt diese nicht überein, so befinde ich mich in der richtigen Zeile und hole mir die Daten aus der Liste (Spalten D-H), um sie in den entsprechenden Attributen meines Querverweisblockes (Attributnamen: KANR, GERAET_1, EINBAUORT_1, TODEVISE_1, JTYPE_1, COMMENT_1, wsw.) einzufügen. Das Ganze funktiniert schon recht gut. Da ich mich aber mit VBA nicht so sehr auskenne, kommt mir meine Lösung etwas umständlich vor. Vielleicht kann man hier oder da noch etwas optimieren oder Fehlerquellen ausschließen. Was passiert eigentlich mit meinen Variablen nachdem das Prg abgearbeitet wurde? In Lisp haben diese noch ihren Wert, solange ich sie nicht zurücksetze. So auch in VBA? Ich weiß, dass es viel Mühe macht meinen Lösungsansatz nachzuvollziehen, ich bin aber für jede Hilfestellung dankbar!!! Gruß Sven [Diese Nachricht wurde von Big Sven am 14. Feb. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 15. Feb. 2006 16:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy! Ich bin gerade bei der Progammoptimierung und habe nochmal eine Frage zum Bilden des Auswahlsatzes: Dim FType(0) As Integer, FData(0) FType(0) = 0: FData(0) = "INSERT" AWSatz.Select acSelectionSetAll, , , FType, FData Was kann man bei FType noch eintragen? Hintergrund: Ich suche eigentlich nur einen bestimmten Blocknamen, der auf einem bestimmten Layer liegt. Das würde meinen Auswahlsatz erheblich verkleinern und mich wesentlich weniger Zeit kosten. Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 15. Feb. 2006 16:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hmm, also mit dem Namen bin ich überfragt, aber so in etwa kannst Du den Layer eingrenzen: Code:
' alle Blockrefs auf "myLayer" wählen Dim FType%(1), FData(1)FType(0) = 0: FData(0) = "INSERT" FType(1) = 8: FData(1) = "myLayer" AWSatz.Select acSelectionSetAll, , , FType, FData
HTH , NancyEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 15. Feb. 2006 16:54 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
|
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005
|
erstellt am: 15. Feb. 2006 17:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Super das ist genau das, was ich gesucht habe!!! Ich habe auch gerade etwas darüber gefunden. Gibt es eigentlich irgendwo eine komplette, zusammenhängende Liste aller DXF-Gruppencodes? Jetzt muss ich nur noch den Rest optimieren, damit es noch viel schneller geht. Vielen Dank!!! Gruß Sven Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Big Sven Mitglied Techn. Angestellter
 
 Beiträge: 133 Registriert: 14.09.2005 HP ZBook Intel Core 12.Gen i7 2,3GHz 32GB RAM Windows 11 Pro AutoCAD 2024
|
erstellt am: 20. Feb. 2006 14:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum! Ich stecke einmal wieder fest. Ich möchte nun Eintragungen in meine Datenbank vornehmen. Dafür muss ich vorher alle Einträge der aktuellen DWG herauslöschen Es funktioniert leider nur nicht. Ich bekomme nach der Zeile: Set found = ...).Activate eine Meldung, dass die Typen unverträglich sind. Nehme ich es heraus stoppt das Prg bei: ExcelWS.Range(findeExcelZeile, 1).Select und meldet einen Anwendung- oder Objektdefinierter Fehler. Hat jemand einen Tipp für mich? Gruß Sven Code: Set ExcelWb = ExcelApp.workbooks.Open("C:\Test\Datenbank.xls") Set ExcelWS = ExcelWb.activesheet ... NeuDatenbank ExcelApp, ExcelWS, Left(ThisDrawing.Name, 8) ... Private Function NeuDatenbank(ExcelApp, ExcelWS, Zeichnung) Dim found ExcelWS.Columns("A:A").Select ExcelWS.cells(1, 1).Activate Set found = ExcelApp.Selection.Find(What:=Zeichnung, After:=ExcelApp.ActiveCell, _ MatchCase:=False, SearchFormat:=False).Activate While Not found Is Nothing If Zeichnung = ExcelWS.cells(found.Row, 1) Then findeExcelZeile = found.Row ExcelWS.Range(findeExcelZeile, 1).Select ExcelWS.Selection.EntireRow.Delete End If Set found = ExcelApp.Selection.FindNext(found) Wend End Function Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 20. Feb. 2006 15:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Big Sven
Hi Sven, untiges ist ungetestet, hab nur mal mit der groben Harke die selects entfernt;-) Zum ersten Error: Set found = ...).Activate Mit Set found = setzt du einen Objectpointer und du erhälst als Rückgabe ein RangeObjekt. Du schiesst hier aber gleich die Aktivate Methode hinterher in der Zeile, das geht so nicht, wenn dann geht maximal sowas:
Code:
Set found = ExcelApp.Selection.Find(What:=Zeichnung) found.activate
BTW , wenn deine Mappe/Excel nicht visible und nicht aktiv sind, geht der ganze select/activate-******* eh in die Hosen, am besten du hütest dich davor, wie der Teufel das Weihwasser;-)Gruss Nancy --
Code:
Private Function NeuDatenbank(ExcelApp, ExcelWS, Zeichnung) Dim found as range Set found = ExcelWS.Columns("A:A").Find(What:=Zeichnung) While Not found Is Nothing If Zeichnung = ExcelWS.cells(found.Row, 1) Then ExcelWS.rows(found.row).Delete Set found = ExcelApp.Selection.FindNext(found) Wend End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |