Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  excel-Problem

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  excel-Problem (2686 mal gelesen)
eugen1111
Mitglied
Konstrukteur


Sehen Sie sich das Profil von eugen1111 an!   Senden Sie eine Private Message an eugen1111  Schreiben Sie einen Gästebucheintrag für eugen1111

Beiträge: 36
Registriert: 18.01.2005

AIS9; XPSP2
P4-3800, 4 GB
Quadro FX3400

erstellt am: 02. Dez. 2008 11:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum,
Wie im Beitrag weiter unten beschrieben, habe ich ein Makro geschrieben, dass die Baugruppenstückliste in eine Excel-Vorlage schreibt und dann sortiert. Nur das Sortieren macht einige Probleme: Es funktioniert nur beim ersten Start des Programms. Wenn ich es während einer Inventorsitzung ein zweites Mal starte, dann funktioniert der Sortieralgorithmus nicht mehr. Ich vermute ich beende Excel nicht korrekt:


Public Sub StuecklistenExport()

Dim XL As Object
Dim xlWB As Object
Dim xlWS As Object

'Baugruppenobjekt zuweisen
If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject Then
        MsgBox "Das aktive Dokument ist keine Baugruppe."
        Exit Sub
    End If
Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument


'Excel öffnen, wenn nicht geöffnet
On Error Resume Next
Set XL = GetObject("Excel.Application")
If Err.Number Then
        ' Excel läuft noch nicht - starten
        Err.Clear
        On Error Resume Next
       
        Set XL = CreateObject("Excel.Application")
       
       
        If Err.Number Then
            Err.Clear
            MsgBox "Kann Excel nicht öffnen."
            Exit Sub
        End If
End If
   
     
'Stüchlistenvorlage öffnen aus Verzeichnis 7-Inventordaten/Stückliste
'Pfad der Projektdatei suchen
Dim ProjektPfadtxt As String
ProjektPfadtxt = ThisApplication.FileLocations.FileLocationsFile
Dim Index As Long
Index = InStrRev(ProjektPfadtxt, "\")
ProjektPfadtxt = Left$(ProjektPfadtxt, Index)


'Stücklistenvorlage aus aktiven Projekt öffnen
On Error Resume Next
Set xlWB = XL.Workbooks.Open(ProjektPfadtxt + "7-Inventor-Daten\Stueckliste\Stueckliste_Vorl.xls")
If Err.Number Then
MsgBox "Kann Stücklistenvorlage nicht öffnen."
Exit Sub
End If


'Schriftfeld ausfüllen
xlWB.Sheets("Schriftfeld").Activate
Set xlWS = xlWB.ActiveSheet

Dim Benennung As String
Benennung = Property_lesen(oDoc, "Description")
xlWS.Application.Cells(27, 9).Value = Benennung


Dim Bauteilnummer As String
Bauteilnummer = Property_lesen(oDoc, "Part Number")
xlWS.Application.Cells(26, 9).Value = Bauteilnummer


Dim Auftragsnummer As String
Auftragsnummer = Property_lesen(oDoc, "Project")
xlWS.Application.Cells(30, 9).Value = Auftragsnummer


Dim Bearbeiter As String
Bearbeiter = ThisApplication.UserName
xlWS.Application.Cells(20, 9).Value = Bearbeiter


Dim Datum As Variant
Datum = Date
xlWS.Application.Cells(21, 9).Value = Datum


'Stückliste ausfüllen
xlWB.Sheets("Stückliste").Activate
Set xlWS = xlWB.ActiveSheet


Dim oBOM As BOM
Set oBOM = ThisApplication.ActiveDocument.ComponentDefinition.BOM

oBOM.StructuredViewFirstLevelOnly = True
oBOM.StructuredViewEnabled = True

Dim oRow As BOMRow
Dim oBOMView As BOMView
Set oBOMView = oBOM.BOMViews.Item("Strukturiert")


Dim Zeile As Long
Zeile = 3


Dim i As Long
    For i = 1 To oBOMView.BOMRows.Count
        ' Get the current row.
       
        Set oRow = oBOMView.BOMRows.Item(i)
       
        Dim oCompDef As ComponentDefinition
        Set oCompDef = oRow.ComponentDefinitions.Item(1)
       
        Dim oPropSet As PropertySet
        Set oPropSet = oCompDef.Document.PropertySets.Item("Design Tracking Properties")

        'Zellen beschreiben
        'Position
        xlWS.Application.Cells(Zeile, 2).Value = oRow.ItemNumber
        'Anzahl
        xlWS.Application.Cells(Zeile, 3).Value = oRow.ItemQuantity
        'Benennung
        xlWS.Application.Cells(Zeile, 4).Value = oPropSet.Item("Description").Value
        'Bauteilnummer
        xlWS.Application.Cells(Zeile, 5).Value = oPropSet.Item("Part Number").Value
        'Kürzel
        xlWS.Application.Cells(Zeile, 6).Value = oPropSet.Item("Catalog Web Link ").Value
        'Werkstoff
        xlWS.Application.Cells(Zeile, 7).Value = oPropSet.Item("Material").Value
        'Halbzeug
        xlWS.Application.Cells(Zeile, 8).Value = oPropSet.Item("Revision Number ").Value
        'Zulieferer
        xlWS.Application.Cells(Zeile, 9).Value = oPropSet.Item("Vendor").Value
        Zeile = Zeile + 1
               
    Next
'Stückliste sortieren
Dim Anzahl_Zeilen As Long
Anzahl_Zeilen = oBOMView.BOMRows.Count


Dim Rangestr As String

Rangestr = "B3:I" & Format(Anzahl_Zeilen + 2)

xlWS.Range("B3:I73").Select
xlWS.Range("B3:I73").Sort Key1:=Range("B2")


'Wenn Lücken in Pos.-Nr.-Folge, dann Leerzeile einfügen
Dim Inhalt_Pos As Integer
Dim Inhalt_Pos_1 As Integer
Zeile = 3
Inhalt_Pos_1 = 0
Do
Inhalt_Pos = xlWS.Application.Cells(Zeile, 2).Value
If (Inhalt_Pos_1 + 1) < Inhalt_Pos Then
    xlWS.Application.Cells(Zeile, 2).Select
    xlWS.Application.Selection.EntireRow.Insert
End If

Inhalt_Pos_1 = Inhalt_Pos
Zeile = Zeile + 1
Loop While Inhalt_Pos <> 0

'Druckbereich festlegen
xlWB.Sheets("Stückliste formatiert").Activate
Set xlWS = xlWB.ActiveSheet
Dim Blattanzahl As Integer
Blattanzahl = xlWS.Cells(39, 13).Value
Dim Druckzeilen As String
Druckzeilen = Format(Blattanzahl * 40)
xlWS.PageSetup.PrintArea = "$A$1:$M$" + Druckzeilen


'Speichern
Dim Stueli_Name As String
Dateiname = Left$(ThisApplication.ActiveDocument.FullFileName, Len(ThisApplication.ActiveDocument.FullFileName) - 4) + ".xls"
xlWB.SaveAs Dateiname

'Baugruppenanzahl abfragen
MsgBox "Bitte Baugruppenanzahl ausfüllen!"
xlWB.Sheets("Schriftfeld").Activate
Set xlWS = xlWB.ActiveSheet

XL.Visible = True

'Excel schließen
'XL.Application.Quit

'Verbindung zu Excel lösen
Set xlWS = Nothing
Set xlWB = Nothing
Set XL = Nothing

End Sub


Kann mir jemand helfen?

MfG Frank

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

PaulSchuepbach
Moderator
Programmierer




Sehen Sie sich das Profil von PaulSchuepbach an!   Senden Sie eine Private Message an PaulSchuepbach  Schreiben Sie einen Gästebucheintrag für PaulSchuepbach

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 02. Dez. 2008 15:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für eugen1111 10 Unities + Antwort hilfreich

Hallo Frank,

ohne den Code getestet zu haben, vermute ich:

obschon Du Excel 'beendet' hast, belibt die Excel-Instanz hängen. Excel ist zwar nicht mehr sichtbar, aber im Task-Manager ist der Task immer noch am leben. Das kommt daher, dass Du beim ersten Start mittels 'CreateObject' eine Excel-Instanz erzeugst, bei jedem weiteren Aufruf des Makros wahrscheinlich aber auf die bestehende (unsichtbare) Instanz verweist. Vermutlich wird die Sortierung durchgeführt - aber eben in der falschen Instanz...

Mittels 'CreateObject' entstandene Instanzen bleiben trotz des Aufrufs von '.Quit' solange als Task am Leben, bis die Aufrufende Instanz (hier Inventor, da aus Inventor VBA gestartet) beendet wird. Warum das so ist, wiss wahrscheinlich nicht einmal Microsoft...

------------------
Grüsse, Paul

Inventor-Programmierung, Inventor-Tools und Inventor API-Schulung

Meine Tochter auf Youtube

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Projektingenieur (m/w/d) Entwicklung
Die besten Köpfe für die unterschiedlichsten Aufgaben zu finden sowie Menschen und Technologien zu verbinden, und zwar täglich aufs Neue - dafür schätzen unsere Kunden FERCHAU. Unterstütze uns: als ambitionierte:r Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenProjektmanagement
eugen1111
Mitglied
Konstrukteur


Sehen Sie sich das Profil von eugen1111 an!   Senden Sie eine Private Message an eugen1111  Schreiben Sie einen Gästebucheintrag für eugen1111

Beiträge: 36
Registriert: 18.01.2005

AIS9; XPSP2
P4-3800, 4 GB
Quadro FX3400

erstellt am: 03. Dez. 2008 07:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Paul,
also ich glaube ich beende Excel richtig, im TaskMan finde ich Excel nicht mehr. Aber ich habe eine andere Lösung gefunden: und zwar in der Sortieranweisung:

xlWS.Range("B3:I73").Sort Key1:="Spalte B"

Ich nochmal ein Makro in Excel aufgezeichnet und dann stand dort bei Key1 "Spalte B". Damit funktionierts.

Trotzdem vielen Dank
MfG Frank

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz