Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Tabellenblatt in Excelliste überschreiben

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:  Tabellenblatt in Excelliste überschreiben (5152 mal gelesen)
Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 04. Jan. 2012 18:32    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 Zusammen
Ich habe ein tolles Makro (siehe Anhang) zum Übertragen einer Teileliste von IV nach Excel (Dank an Noctis79). Beim ersten Übertrag wird ein Tabellenblatt mit Namen "0" erzeugt. Wenn ich nun bei einer Korrektur (ohne Rev.) das Tabellenblatt überschreiben will, erscheint "Der eingegebene Tabellenname ist bereits vorhanden", ein Überschreiben findet nicht statt. Wie muss das Makro ergänzt oder geändert werden, damit ich das Tabellenblatt überschreiben kann, am besten per NachfrageBox?

Sub Stückliste()
Dim oapp As Inventor.Application
Set oapp = ThisApplication
Dim odoc As Inventor.DrawingDocument
If oapp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MsgBox "Funktion ist nur in Zeichnungen zulässig"
Exit Sub
End If
Set odoc = oapp.ActiveDocument
Dim oOptions As NameValueMap
Dim oName, oStart, oTemplate, oFullFileName, oFileName, oXLSFileName As String
Dim oLength As String
Dim oFit As Boolean
Dim oProp As PropertySet
Dim oProp2 As PropertySet
Dim i As Property
Dim e As Property
Dim oDescription As String
Dim oTitle As String
Dim oPartNumber As String
Dim oRevision As String
Dim oCreationDate As String
Set oProp = odoc.PropertySets.Item("Design Tracking Properties")
Set oProp2 = odoc.PropertySets.Item("Inventor Summary Information")
For Each i In oProp
If i.DisplayName = "Bauteilnummer" Then
oPartNumber = i.Expression
ElseIf i.DisplayName = "Erstellungsdatum" Then
oCreationDate = i.Expression
End If
Next
For Each e In oProp2
If e.DisplayName = "Titel" Then
oTitle = e.Expression
End If
Next
oFileName = oPartNumber & "." & oTitle & ".xls"
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

oXLSFileName = "M:\Stücklisten\Dila\" & oFileName
Dim oPropRev As PropertySet
Dim iRev As Property
Set oPropRev = odoc.PropertySets.Item("Inventor Summary Information")
For Each iRev In oPropRev
If iRev.DisplayName = "Revisionsnummer" Then
If iRev.Expression = "" Then
oName = "0"
Else
oName = iRev.Expression
End If
End If
Next
'oStart = Start- Zelle
oStart = "A5"
'oTemplate = Pfad zum xls- Template
oTemplate = "M:\Stücklisten\01-StücklisteVorlage.xls"
'oFit bewirkt, dass die Zellen eingepasst werden
'true - Zellen werden angepasst
'false - Zellen werden nicht angepasst
oFit = False
Call oOptions.Add("TableName", oName)
Call oOptions.Add("StartingCell", oStart)
Call oOptions.Add("Template", oTemplate)
Call oOptions.Add("AutoFitColumnWidth", oFit)
If odoc.ActiveSheet.PartsLists.Count = 0 Then
MsgBox "Keine Stückliste vorhanden!", vbCritical + vbOKOnly, "Stückliste fehlt"
Exit Sub
ElseIf odoc.ActiveSheet.PartsLists.Count > 1 Then
MsgBox "Es sind mehrere Stücklisten vorhanden!" & vbCrLf & "Es wird die erste Stückliste verwendet!" _
, vbOKOnly + vbInformation, "Mehrere Stücklisten"
End If
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
'************************* Ab hier der EXCEL- PART ****************
'Im Inventor VBA- Projekt auf Extras - Verweise und
'die Microsoft Excel Library hinzufügen
'******************************************************************
Dim oExl As New Excel.Application
On Error Resume Next
Set oExl = GetObject(, "Excel.Application")
If Err.Number Then
Err.Clear
On Error Resume Next
Set oExl = CreateObject("Excel.Application")
If Err.Number Then
Err.Clear
MsgBox "Kann Excel nicht öffnen."
End If
End If

oExl.Workbooks.Open (oXLSFileName)
With oExl.ActiveWorkbook
.Sheets(oName).Cells(2, 1) = oPartNumber
.Sheets(oName).Cells(2, 5) = oTitle
.Sheets(oName).Cells(2, 4) = oRevision
.Sheets(oName).Cells(4, 1) = oCreationDate
.Close 1
End With
End Sub

------------------
Didi

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 04. Jan. 2012 20:01    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 Didikalle 10 Unities + Antwort hilfreich

Hi

Das Problem liegt hier:

Code:
Call oOptions.Add("TableName", oName)
...
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)

Du versuchst in eine bestehende Exceldatei auf ein neu erstelltes Tabellenblatt 0 zu exportieren. Das Blatt gibt'S schon, also geht's schief. Müßtest du vorab in der Exceldatei nachsehen, ob das Blatt schon da ist und es löschen.

------------------
MfG
RK

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 05. Jan. 2012 10:33    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 rkauskh
Danke für die schnelle Antwort.
Das Problem ist mir schon bekannt und momentan mache ich das auch so.
Ich suche allerdings eine Lösung, das ganze in diesem Makro zu "automatisieren" sprich: ist das Tabellenblatt vorhanden soll mir eine MsgBox die Möglichkeit zu löschen bzw überschreiben oder abzubrechen anbieten. Für einen passenden Tip wäre ich dankbar.

------------------
Didi

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 05. Jan. 2012 14: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 Nur für Didikalle 10 Unities + Antwort hilfreich

Hi

Dann würde ich die Reihenfolge ändern:

- Prüfen ob gleichnamige Datei existiert
- wenn ja, Excel starten und Datei öffnen
  - alle Tabellenblätter prüfen, ob eines mit der gleichen Nummer wie in oName existiert
  - wenn ja, löschen (sollte etwa so gehen: oExl.ActiceWorkbook.Sheets(oName).delete)
    - Datei schließen und dabei speichern
- Export starten
- Datei wiederum öffnen und die iProps übertragen

Code kann ich dir gerade nicht liefern - Zeitmangel, sorry

------------------
MfG
RK

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 05. Jan. 2012 19:36    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 rkauskh

Ich bin in VBA leider nicht so fit und mein Englisch lässt zu wünschen übrig, so tu ich mich doch schwer, Deinen Vorschlag umzusetzen. Solltest Du Zeit und Musse haben, diesen Part zu programmieren, wäre ich Dir sehr dankbar.

------------------
Didi

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 06. Jan. 2012 16:15    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 Didikalle 10 Unities + Antwort hilfreich

Hi

Alles ungetestet, könnte also voll daneben gehen:

Code:
Sub Stückliste()
Dim oapp As Inventor.Application
Set oapp = ThisApplication
Dim odoc As Inventor.DrawingDocument
If oapp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MsgBox "Funktion ist nur in Zeichnungen zulässig"
Exit Sub
End If
Set odoc = oapp.ActiveDocument
Dim oOptions As NameValueMap
Dim oName, oStart, oTemplate, oFullFileName, oFileName, oXLSFileName As String
Dim oLength As String
Dim oFit As Boolean
Dim oProp As PropertySet
Dim oProp2 As PropertySet
Dim i As Property
Dim e As Property
Dim oDescription As String
Dim oTitle As String
Dim oPartNumber As String
Dim oRevision As String
Dim oCreationDate As String
Set oProp = odoc.PropertySets.Item("Design Tracking Properties")
Set oProp2 = odoc.PropertySets.Item("Inventor Summary Information")
For Each i In oProp
If i.DisplayName = "Bauteilnummer" Then
oPartNumber = i.Expression
ElseIf i.DisplayName = "Erstellungsdatum" Then
oCreationDate = i.Expression
End If
Next
For Each e In oProp2
If e.DisplayName = "Titel" Then
oTitle = e.Expression
End If
Next
oFileName = oPartNumber & "." & oTitle & ".xls"
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

oXLSFileName = "M:\Stücklisten\Dila\" & oFileName
Dim oPropRev As PropertySet
Dim iRev As Property
Set oPropRev = odoc.PropertySets.Item("Inventor Summary Information")
For Each iRev In oPropRev
If iRev.DisplayName = "Revisionsnummer" Then
If iRev.Expression = "" Then
oName = "0"
Else
oName = iRev.Expression
End If
End If
Next
'oStart = Start- Zelle
oStart = "A5"
'oTemplate = Pfad zum xls- Template
oTemplate = "M:\Stücklisten\01-StücklisteVorlage.xls"
'oFit bewirkt, dass die Zellen eingepasst werden
'true - Zellen werden angepasst
'false - Zellen werden nicht angepasst
oFit = False
Call oOptions.Add("TableName", oName)
Call oOptions.Add("StartingCell", oStart)
Call oOptions.Add("Template", oTemplate)
Call oOptions.Add("AutoFitColumnWidth", oFit)
If odoc.ActiveSheet.PartsLists.Count = 0 Then
MsgBox "Keine Stückliste vorhanden!", vbCritical + vbOKOnly, "Stückliste fehlt"
Exit Sub
ElseIf odoc.ActiveSheet.PartsLists.Count > 1 Then
MsgBox "Es sind mehrere Stücklisten vorhanden!" & vbCrLf & "Es wird die erste Stückliste verwendet!" _
, vbOKOnly + vbInformation, "Mehrere Stücklisten"
End If


'Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)


'************************* Ab hier der EXCEL- PART ****************
'Im Inventor VBA- Projekt auf Extras - Verweise und
'die Microsoft Excel Library hinzufügen
'******************************************************************
Dim oExl As New Excel.Application
On Error Resume Next
Set oExl = GetObject(, "Excel.Application")
If Err.Number Then
Err.Clear
On Error Resume Next
Set oExl = CreateObject("Excel.Application")
If Err.Number Then
Err.Clear
MsgBox "Kann Excel nicht öffnen."
Exit Sub
End If
End If

On Error Resume Next
oExl.Workbooks.Open (oXLSFileName)
If Err.Number Then
Err.Clear
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
Else
Dim oExlSheet As Excel.WorkSheet
For Each oExlSheet In oExl.ActiveWorkbook
If oExlSheet.Name = oName Then
    oExlSheet.Delete
End If
Next
oExl.ActiveWorkbook.Close (True)
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
End If


With oExl.ActiveWorkbook
.Sheets(oName).Cells(2, 1) = oPartNumber
.Sheets(oName).Cells(2, 5) = oTitle
.Sheets(oName).Cells(2, 4) = oRevision
.Sheets(oName).Cells(4, 1) = oCreationDate
.Close 1
End With
End Sub



------------------
MfG
RK

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 06. Jan. 2012 19:25    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

Hi

Ich habe das Macro mal 1:1 übernommen und ausprobiert.
Das ganze bleibt in einer Endlosschleife hängen (kein Debug).
Ich denke, ein Aufruf ist zu viel oder an der falschen Stelle.
Da ich in VBA nicht so bewandert bin, ist das nur eine Vermutung.

------------------
Didi

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 06. Jan. 2012 21:38    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 Didikalle 10 Unities + Antwort hilfreich

Hi

Probier's mal so:

Code:
Sub Stückliste()
Dim oapp As Inventor.Application
Set oapp = ThisApplication
Dim odoc As Inventor.DrawingDocument
If oapp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MsgBox "Funktion ist nur in Zeichnungen zulässig"
Exit Sub
End If
Set odoc = oapp.ActiveDocument
Dim oOptions As NameValueMap
Dim oName, oStart, oTemplate, oFullFileName, oFileName, oXLSFileName As String
Dim oLength As String
Dim oFit As Boolean
Dim oProp As PropertySet
Dim oProp2 As PropertySet
Dim i As Property
Dim e As Property
Dim oDescription As String
Dim oTitle As String
Dim oPartNumber As String
Dim oRevision As String
Dim oCreationDate As String
Set oProp = odoc.PropertySets.Item("Design Tracking Properties")
Set oProp2 = odoc.PropertySets.Item("Inventor Summary Information")
For Each i In oProp
If i.DisplayName = "Bauteilnummer" Then
oPartNumber = i.Expression
ElseIf i.DisplayName = "Erstellungsdatum" Then
oCreationDate = i.Expression
End If
Next
For Each e In oProp2
If e.DisplayName = "Titel" Then
oTitle = e.Expression
End If
Next
oFileName = oPartNumber & "." & oTitle & ".xls"
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

oXLSFileName = "M:\Stücklisten\Dila\" & oFileName
Dim oPropRev As PropertySet
Dim iRev As Property
Set oPropRev = odoc.PropertySets.Item("Inventor Summary Information")
For Each iRev In oPropRev
If iRev.DisplayName = "Revisionsnummer" Then
If iRev.Expression = "" Then
oName = "0"
Else
oName = iRev.Expression
End If
End If
Next
'oStart = Start- Zelle
oStart = "A5"
'oTemplate = Pfad zum xls- Template
oTemplate = "M:\Stücklisten\01-StücklisteVorlage.xls"
'oFit bewirkt, dass die Zellen eingepasst werden
'true - Zellen werden angepasst
'false - Zellen werden nicht angepasst
oFit = False
Call oOptions.Add("TableName", oName)
Call oOptions.Add("StartingCell", oStart)
Call oOptions.Add("Template", oTemplate)
Call oOptions.Add("AutoFitColumnWidth", oFit)
If odoc.ActiveSheet.PartsLists.Count = 0 Then
MsgBox "Keine Stückliste vorhanden!", vbCritical + vbOKOnly, "Stückliste fehlt"
Exit Sub
ElseIf odoc.ActiveSheet.PartsLists.Count > 1 Then
MsgBox "Es sind mehrere Stücklisten vorhanden!" & vbCrLf & "Es wird die erste Stückliste verwendet!" _
, vbOKOnly + vbInformation, "Mehrere Stücklisten"
End If


'Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)


'************************* Ab hier der EXCEL- PART ****************
'Im Inventor VBA- Projekt auf Extras - Verweise und
'die Microsoft Excel Library hinzufügen
'******************************************************************
Dim oExl As New Excel.Application
On Error Resume Next
Set oExl = GetObject(, "Excel.Application")
If Err.Number Then
Err.Clear
On Error Resume Next
Set oExl = CreateObject("Excel.Application")
If Err.Number Then
Err.Clear
MsgBox "Kann Excel nicht öffnen."
Exit Sub
End If
End If

On Error Resume Next
oExl.Workbooks.Open (oXLSFileName)
If Err.Number Then
    Err.Clear
    Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
    oExl.Workbooks.Open (oXLSFileName)
Else
    Dim oExlSheet As Excel.WorkSheet
    For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
        If oExlSheet.Name = oName Then
            oExl.DisplayAlerts = False
            oExlSheet.Delete
            oExl.DisplayAlerts = True
        End If
    Next
oExl.ActiveWorkbook.Close (True)
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
End If

'Löscht alle Tabellenblätter, die mit "Tabelle" beginnen
For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
    If Left(oExlSheet.Name, 7) = "Tabelle" Then
        oExlSheet.Delete
    End If
Next


With oExl.ActiveWorkbook
.Sheets(oName).Cells(2, 1) = oPartNumber
.Sheets(oName).Cells(2, 5) = oTitle
.Sheets(oName).Cells(2, 4) = oRevision
.Sheets(oName).Cells(4, 1) = oCreationDate
.Close 1
End With
End Sub



------------------
MfG
RK

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 07. Jan. 2012 08:44    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

Hi,
ich habe das Macro ausprobiert. Hier mein Ergebnis:
1) Wenn noch keine Liste angelegt (übergeben) ist kommt die Fehlermeldung von MS-Excel "M:\Stückliste....kann nicht gefunden werden. Überprüfen Sie...". Nach Bestätigung auf ok wird die Liste angelegt.
2) Möchte ich diese Liste ohne Änderung noch einmal übergeben kommt die Meldung von IV2012 "Der eingegebene Tabellenname ist bereits vorhanden" Nach Bestätigung auf ok wird die Liste nicht übergeben.
3) Ändere ich aber die Rev.nummer, wird die Liste wieder übergeben und ein neues Tabellenblatt angelegt und nun funktionieren alle weiteren Übergaben ohne eine Änderung vorzunehmen.
Liegt das an Fehlermeldung 1)?
Kann eine Abfrage eingebaut werden "Liste vorhanden -"überschreiben"; "abbrechen" ?

liebe Grüße

------------------
Didi

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 07. Jan. 2012 12:10    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

Hi,

die Abfrage habe ich gelöst:
........
Else
    Dim oExlSheet As Excel.WorkSheet
    Dim m As Integer
    For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
        If oExlSheet.Name = oName Then
        m = MsgBox("soll vorhandene Liste überschrieben werde?", 1, "Listenabfrage")
            If m = 2 Then
            Exit Sub
            ElseIf m = 1 Then
            oExl.DisplayAlerts = False
            oExlSheet.Delete
            oExl.DisplayAlerts = True
        End If
        End If
Next
oExl.ActiveWorkbook.Close (True)..........
................

Bleibt nur noch, warum das Macro beim 1.mal überschreiben nicht funktioniert.

------------------
Didi

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 07. Jan. 2012 22:08    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 Didikalle 10 Unities + Antwort hilfreich

Hi

Die Antowrt ist simpel. Excel läßt nicht zu das einzige vorhandene Tabellenblatt zu löschen. Schummeln wir uns halt drumrum und fügen ein Dummyblatt ein, daß später wieder gelöscht wird.

Code:
Sub Stückliste()
Dim oapp As Inventor.Application
Set oapp = ThisApplication
Dim odoc As Inventor.DrawingDocument
If oapp.ActiveDocument.DocumentType <> kDrawingDocumentObject Then
MsgBox "Funktion ist nur in Zeichnungen zulässig"
Exit Sub
End If
Set odoc = oapp.ActiveDocument
Dim oOptions As NameValueMap
Dim oName, oStart, oTemplate, oFullFileName, oFileName, oXLSFileName As String
Dim oLength As String
Dim oFit As Boolean
Dim oProp As PropertySet
Dim oProp2 As PropertySet
Dim i As Property
Dim e As Property
Dim oDescription As String
Dim oTitle As String
Dim oPartNumber As String
Dim oRevision As String
Dim oCreationDate As String
Set oProp = odoc.PropertySets.Item("Design Tracking Properties")
Set oProp2 = odoc.PropertySets.Item("Inventor Summary Information")
For Each i In oProp
If i.DisplayName = "Bauteilnummer" Then
oPartNumber = i.Expression
ElseIf i.DisplayName = "Erstellungsdatum" Then
oCreationDate = i.Expression
End If
Next
For Each e In oProp2
If e.DisplayName = "Titel" Then
oTitle = e.Expression
End If
Next
oFileName = oPartNumber & "." & oTitle & ".xls"
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

oXLSFileName = "M:\Stücklisten\Dila\" & oFileName
Dim oPropRev As PropertySet
Dim iRev As Property
Set oPropRev = odoc.PropertySets.Item("Inventor Summary Information")
For Each iRev In oPropRev
If iRev.DisplayName = "Revisionsnummer" Then
If iRev.Expression = "" Then
oName = "0"
Else
oName = iRev.Expression
End If
End If
Next
'oStart = Start- Zelle
oStart = "A5"
'oTemplate = Pfad zum xls- Template
oTemplate = "M:\Stücklisten\01-StücklisteVorlage.xls"
'oFit bewirkt, dass die Zellen eingepasst werden
'true - Zellen werden angepasst
'false - Zellen werden nicht angepasst
oFit = False
Call oOptions.Add("TableName", oName)
Call oOptions.Add("StartingCell", oStart)
Call oOptions.Add("Template", oTemplate)
Call oOptions.Add("AutoFitColumnWidth", oFit)
If odoc.ActiveSheet.PartsLists.Count = 0 Then
MsgBox "Keine Stückliste vorhanden!", vbCritical + vbOKOnly, "Stückliste fehlt"
Exit Sub
ElseIf odoc.ActiveSheet.PartsLists.Count > 1 Then
MsgBox "Es sind mehrere Stücklisten vorhanden!" & vbCrLf & "Es wird die erste Stückliste verwendet!" _
, vbOKOnly + vbInformation, "Mehrere Stücklisten"
End If


'Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)


'************************* Ab hier der EXCEL- PART ****************
'Im Inventor VBA- Projekt auf Extras - Verweise und
'die Microsoft Excel Library hinzufügen
'******************************************************************
Dim oExl As New Excel.Application
On Error Resume Next
Set oExl = GetObject(, "Excel.Application")
If Err.Number Then
Err.Clear
On Error Resume Next
Set oExl = CreateObject("Excel.Application")
If Err.Number Then
Err.Clear
MsgBox "Kann Excel nicht öffnen."
Exit Sub
End If
End If

On Error Resume Next
oExl.Workbooks.Open (oXLSFileName)
If Err.Number Then
    Err.Clear
    Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
    oExl.Workbooks.Open (oXLSFileName)
Else
    Dim oExlSheet As Excel.WorkSheet
    For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
        If oExlSheet.Name = oName Then
            If oExl.ActiveWorkbook.Worksheets.Count = 1 Then
                oExl.ActiveWorkbook.Worksheets.Add
            End If

            oExl.DisplayAlerts = False
            oExlSheet.Delete
            oExl.DisplayAlerts = True
        End If
    Next
oExl.ActiveWorkbook.Close (True)
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
End If

'Löscht alle Tabellenblätter, die mit "Tabelle" beginnen
For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
    If Left(oExlSheet.Name, 7) = "Tabelle" Then
        oExlSheet.Delete
    End If
Next


With oExl.ActiveWorkbook
.Sheets(oName).Cells(2, 1) = oPartNumber
.Sheets(oName).Cells(2, 5) = oTitle
.Sheets(oName).Cells(2, 4) = oRevision
.Sheets(oName).Cells(4, 1) = oCreationDate
.Close 1
End With
End Sub



------------------
MfG
RK

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 08. Jan. 2012 10:42    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 RKausKH,

das funktioniert jetzt gut, bleibt aber noch das Problem mit der erstmaligen Übergabe einer Stückliste von IV nach Excel. Wie oben schon genannt......
  1) Wenn noch keine Liste angelegt (übergeben) ist kommt die Fehlermeldung von MS-Excel "M:\Stückliste..blabla..kann nicht gefunden werden. Überprüfen Sie..blabla..". Nach Bestätigung auf ok wird die Liste angelegt.
------------
Da ich an 2 Monitore arbeite und auf beiden Bildschirmen Programme geöffnet sind, passiert es, dass dieser Hinweis verdeckt im Hintergrund ist und ich erst über den Taskmanager daran komme. Es wird ja eine Bestätigung erwartet.
Aber ich denke, das kann man auch irgendwie lösen.
Schon jetzt danke für Dein Engagement.

Liebe Grüsse

------------------
Didi

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

Didikalle
Mitglied
Konstrukteur


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

Beiträge: 91
Registriert: 07.10.2011

Ich nutze Inventor 2016 mit dem BS Win 10

erstellt am: 08. Jan. 2012 14:13    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

Hi,

ich habe mich einmal daran probiert und eine Lösung gefunden:
......

Code:
    If Dir(oXLSFileName) <> "" Then
  oExl.Workbooks.Open (oXLSFileName)
    Else
    GoTo ErrorHandler    End If
 
If Err.Number Then
Err.Clear
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
Else
Dim oExlSheet As Excel.WorkSheet
Dim m As Integer
For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
If oExlSheet.Name = oName Then

    m = MsgBox("soll vorhandene Liste überschrieben werden?", 1, "Listenabfrage")
            If m = 2 Then
            Exit Sub
            ElseIf m = 1 Then

If oExl.ActiveWorkbook.Worksheets.Count = 1 Then
oExl.ActiveWorkbook.Worksheets.Add
End If
End If
oExl.DisplayAlerts = False
oExlSheet.Delete
oExl.DisplayAlerts = True
End If

Next

ErrorHandler:oExl.ActiveWorkbook.Close (True)
Call odoc.ActiveSheet.PartsLists.Item(1).Export(oXLSFileName, kMicrosoftExcel, oOptions)
oExl.Workbooks.Open (oXLSFileName)
End If
'Löscht alle Tabellenblätter, die mit "Tabelle" beginnen
For Each oExlSheet In oExl.ActiveWorkbook.Worksheets
If Left(oExlSheet.Name, 7) = "Tabelle" Then
oExlSheet.Delete
End If
Next

With oExl.ActiveWorkbook
.Sheets(oName).Cells(2, 1) = oPartNumber
.Sheets(oName).Cells(2, 5) = oTitle
.Sheets(oName).Cells(2, 4) = oName
.Sheets(oName).Cells(4, 1) = oCreationDate
.Close 1
End With
End Sub



Bei mir funktioniert es jetzt
Herzlichen Dank für die wertvolle Unterstützung.

Liebe Grüße

------------------
Didi

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