Sub ArtikelnummernInMakrosTauschen() Dim h_project As EplHandle Dim Makros As EplHandle Dim Makro As EplHandle Dim Bauteile As EplHandle Dim Bauteil As EplHandle Dim Teile As EplHandle Dim Teil As EplHandle Dim ret As EplHandle Dim propid() As Integer Dim propVA() As String Dim h_Props As EplHandle Dim H_prop As EplHandle Dim h_art As EplHandle Dim Parts As EplHandle Dim part As EplHandle With ObjEpl ' Datenbank öffnen h_database = EPLwork.Datenbank_öffnen(EplanSteuerung.hwnd, _ ftfrmOpenGetIni(" ", "paths", "Leerprojekt", "Fahrplan01.ini"), _ ftfrmOpenGetIni(" ", "paths", "Stammdatenbank", "Fahrplan01.ini"), _ ftfrmOpenGetIni(" ", "paths", "makrodatenbank", "Fahrplan01.ini"), _ "0", _ "0") If h_database <= 0 Then Exit Sub ' Zugriff auf ACCESS-Tabelle mit den Artikelnummern alt und neu sqlstr = "select artikelabgleichliste.* from artikelabgleichliste" Set datatemp = odb.OpenRecordset(sqlstr, dbOpenSnapshot) ' Zugriff auf Makros EPLwork.EPLAN_Status1 0, 0, "Makrodaten lesen" Makros = .eplan.openIterator(.session, h_database, ITERTYPE_MACROS) Makro = .eplan.First(.session, Makros) EPLwork.EPLAN_Status1 .eplan.Count(.session, Makros), 0 While Makro <> EPL_error EPLwork.EPLAN_Status1 0, 1 ' Zugriff auf Devicetags Bauteile = .eplan.openIterator(.session, Makro, ITERTYPE_DEVICETAGS) Bauteil = .eplan.First(.session, Bauteile) EPLwork.EPLAN_Status2 .eplan.Count(.session, Bauteile), 0 While Bauteil <> EPL_error EPLwork.EPLAN_Status2 0, 1 ' Zugriff auf Artikel Teile = .eplan.openIterator(.session, Bauteil, ITERTYPE_PARTS) Teil = .eplan.First(.session, Teile) While Teil <> EPL_error datatemp.MoveLast datatemp.FindFirst "artikelnralt='" & .eplan.getProperty(.session, Teil, 8001) & "'" ' Kontrolle ob Artikelnummer des Devicetags in der Vergleichsliste enthalten If Not datatemp.NoMatch Then 'Transaktion stoppen .trans.commit Debug.Print .eplan.getProperty(.session, Bauteil, 5) ' Eigenschaften werden gerettet ' Zugriff auf die Eigenschaftenliste des Artikels h_Props = .eplan.openIterator(.session, Teil, ITERTYPE_PROPDEFS) H_prop = .eplan.First(.session, h_Props) ' Größe der Arrays definieren ReDim propid(.eplan.Count(.session, h_Props)) ReDim propVA(.eplan.Count(.session, h_Props)) x = 1 ' Eigenschaften in Array schreiben Do While H_prop >= 0 propid(x) = .eplan.getProperty(.session, H_prop, PROPERTY_GENE_NAME, 0) propVA(x) = .eplan.getProperty(.session, Teil, Val(propid(x))) x = x + 1 H_prop = .eplan.Next(.session, h_Props) Loop ' Artikel wird gelöscht ret = EPLwork.Artikel_löschen(EplanSteuerung.hwnd, Teil) If ret = 0 Then ' Artikel neu erzeugen h_art = EPLwork.Artikel_erzeugen(EplanSteuerung.hwnd, Bauteil, Format(datatemp!artikelnrneu), 1) Parts = .eplan.openIterator(.session, h_database, ITERTYPE_PARTS) ' bestimmte Eigenschaften wieder eintragen For x = 1 To UBound(propid, 1) If propid(x) = 8029 Or _ propid(x) = 8061 Or _ propid(x) = 8002 Or _ propid(x) = 8062 Or _ propid(x) = 8013 Then ret = .eplan.SetProperty(.session, h_art, propid(x), propVA(x)) End If Next End If ' Transaktion wieder starten .trans.start 0 End If Teil = .eplan.Next(.session, Teile) Wend Bauteil = .eplan.Next(.session, Bauteile) Wend Makro = .eplan.Next(.session, Makros) Wend ' Datenbank wieder schließen EPLwork.Datenbank_schliessen EplanSteuerung.hwnd, h_database EPLwork.EPLAN_Status1 1, 0, "Funktion beendet" EPLwork.EPLAN_Status2 1, 0 End With End Sub