VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} Stkltable_mit_Exceldaten 
   Caption         =   "Stücklistentabelle mit Exceldaten erstellen"
   ClientHeight    =   2880
   ClientLeft      =   45
   ClientTop       =   375
   ClientWidth     =   7440
   OleObjectBlob   =   "Stkltable_mit_Exceldaten.frx":0000
   StartUpPosition =   1  'CenterOwner
End
Attribute VB_Name = "Stkltable_mit_Exceldaten"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
' Makro:        Stkltable_mit_Exceldaten
' Version:      1.0
' Catia Level:  V5R19
' UIL:          English (User Interface Language)
' Autor:        Christian Obholzer
' E-Mail:       ch.obholzer@aon.at
' Erstellt:     26.09.2010
' Zweck:        neue Ansicht mit einer Tabelle erstellen; Tabellenwerte werden auch Excel importiert
'               Stücklistenvorlage von Firma Hörbiger!!!
'-----------------------------------------------------------------------------------
' Änderungen:   Datum, Name
'               Hier wird die Änderung angegeben
'               Datum, Name
'               Hier wird die Änderung angegeben
'-----------------------------------------------------------------------------------

Option Explicit
    
    '***Deklarationen
    Public objWindows As Windows
    Public objDoc As Document
    Public strTyp As String
    Public vntOeffnen As Variant
    Public strPfad As String
    Public objExcel As Object
    Public WB As Workbook
    Public drwSheets As DrawingSheets
    Public drwSheet As DrawingSheet
    Public drwViews As DrawingViews
    Public drwViewneu As DrawingView
    Public drwView As DrawingView
    Public drwTable As DrawingTable
    Public intI As Integer
    Public intX As Integer
    Public intY As Integer
    Public intZeilenanzahl As Integer
    Public intSpaltenanzahl As Integer
    Public intZeilenhoehe As Integer
    Public intSpaltenbreite As Integer
    Public vntZellenwert As Variant
    Public objSel As Object
    Public strEingabe As String
    Public strZeilenanzahl As String
    Public strZeilenanzahl_MsgBox As String
    Public intTabellenanzahl As Integer

Private Sub cmd_Beenden_Click()

    '***Fenster schließen
    Unload Me
    
End Sub
Private Sub cmd_Dateiauswahl_Click()

    '***Excelfile über SelectionBox auswählen
    vntOeffnen = CATIA.FileSelectionBox("Excelfile auswählen", "*.xls; *.xlsx", CatFileSelectionModeOpen)
    
    '***Dateipfad in TextBox anzeigen
    strPfad = vntOeffnen
    Me.txt_Pfad.Text = strPfad
    
    '***Button aktivieren
    Me.cmd_Tabelle_erstellen.Enabled = True
    
End Sub

Private Sub cmd_Excel_oeffnen_Click()

    On Error Resume Next

    '***Datei ohne speichern schließen
    WB.Close False

    '***Excel beenden
    objExcel.Application.Quit

End Sub

Private Sub cmd_Excel_schließen_Click()
    
    '***Meldung an User, wenn keine Datei ausgewählt wurde
    If strPfad = "" Then
        MsgBox "Es wurde keine Datei ausgewählt", vbCritical + vbOKOnly, "Fehlende Datei"
        Exit Sub
    End If
    
    '***Excel starten
    Set objExcel = CreateObject("Excel.Application")
    
    '***Excel sichtbar schalten
    objExcel.Application.Visible = True
    
    '***Datei öffnen
    Set WB = objExcel.Workbooks.Open(strPfad)

End Sub

Private Sub cmd_Tabelle_erstellen_Click()

    On Error GoTo Fehler

    '***Fenster ausblenden
    Me.Hide
    
    CATIA.RefreshDisplay = False

    '***Abfrage nach geöffnetem Dokument
    Set objWindows = CATIA.Windows
    If objWindows.Count = 0 Then
        MsgBox "Es ist kein Dokument geöffnet." & vbNewLine & _
        "Das Makro kann nicht ausgeführt werden und wird beendet.", vbCritical + vbOKOnly, "Kein Dokument offen"
        Exit Sub
    End If

    '***Auslesen der Dokumentart
    Set objDoc = CATIA.ActiveDocument
    strTyp = TypeName(objDoc)
    If strTyp <> "DrawingDocument" Then
        MsgBox "Dieses Dokument ist kein Drawing." & vbNewLine & _
        "Das Makro kann nicht ausgeführt werden und wird beendet.", vbCritical + vbOKOnly, "Falscher Dokumententyp"
        Exit Sub
    End If
    
    '***Abfrage ob der Wert der Zeilenanzahl weiter verarbeitet werden kann
    '***Eingabe in eine Zahl umwandeln
    strZeilenanzahl = IsNumeric(Me.cmb_Zeilenanzahl.Value)
    If (strZeilenanzahl = True) And (Me.cmb_Zeilenanzahl.Value <> "0") And Not (strZeilenanzahl = "") Then
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl = Abs(Me.cmb_Zeilenanzahl.Value)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl)
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    ElseIf Me.cmb_Zeilenanzahl.Value = "" Then
        MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbOKOnly & vbCritical, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    ElseIf (strZeilenanzahl = True) And (Me.cmb_Zeilenanzahl.Value = "0") Then
        MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    ElseIf (strZeilenanzahl = False) And (Me.cmb_Zeilenanzahl.Value <> "0") Then
        MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Fehler"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    End If
    
    '***Excel starten
    Set objExcel = CreateObject("Excel.Application")
    
    '***Excel nicht sichtbar schalten
    objExcel.Application.Visible = False
    
    '***Datei öffnen
    Set WB = objExcel.Workbooks.Open(strPfad)
    
    Set drwSheets = objDoc.Sheets
    Set drwSheet = drwSheets.ActiveSheet
    Set drwViews = drwSheet.Views
    
    intTabellenanzahl = 1
    
    Set objSel = objDoc.Selection
    '***Vorselektion löschen um das Ergebnis nicht zu verfälschen
    objSel.Clear
    
    '***Performanceerhöhung der Suche
    CATIA.HSOSynchronized = False
    '***Element suchen
    objSel.Search "Drafting.View.Name=Tabelle*"
    If objSel.Count > 0 Then
        intTabellenanzahl = objSel.Count + 1
    End If
    CATIA.HSOSynchronized = True
    
    objSel.Clear
    
    '***Ansicht mit dem Namen "Tabelle" erzeugen
    Set drwViewneu = drwSheet.Views.Add("Tabelle_Stueckliste_" & intTabellenanzahl)
    
    '***Ansicht ansprechen
    Set drwView = drwViews.Item("Tabelle_Stueckliste_" & intTabellenanzahl)
    
    '***Ansicht aktivieren
    drwView.Activate

    '***X Position der Tabelle
    intX = 100
    '***Y Position der Tabelle
    intY = 100
    '***Zeilenanzahl
    intZeilenanzahl = Me.cmb_Zeilenanzahl.Value
    '***Spaltenanzahl
    intSpaltenanzahl = 12
    '***Zeilenhöhe
    intZeilenhoehe = 10
    '***Spaltenbreite
    intSpaltenbreite = 60

    '***Tabelle erstellen
    Set drwTable = drwView.Tables.Add(intX, intY, intZeilenanzahl, intSpaltenanzahl, intZeilenhoehe, intSpaltenbreite)
    '***Tabelle umbenennen
    drwTable.name = "Tabelle.1"
    
    '***Einfügepunkt der Tabelle
    drwTable.AnchorPoint = CatTableBottomLeft
    
    '***Zellen mit Werten füllen
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 1, objExcel.Cells(intI, 1).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 2, objExcel.Cells(intI, 2).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 3, objExcel.Cells(intI, 3).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 4, objExcel.Cells(intI, 4).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 5, objExcel.Cells(intI, 5).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 6, objExcel.Cells(intI, 6).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 7, objExcel.Cells(intI, 7).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 8, objExcel.Cells(intI, 8).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 9, objExcel.Cells(intI, 9).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 10, objExcel.Cells(intI, 10).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 11, objExcel.Cells(intI, 11).Value
    Next
    
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellString intI, 12, objExcel.Cells(intI, 12).Value
    Next
    
    '***Textausrichtung 1. Zeile: mitte, mitte
    For intI = 1 To intSpaltenanzahl
        drwTable.SetCellAlignment 1, intI, CatTableMiddleCenter
    Next
    
    drwTable.ComputeMode = CatTableComputeOFF
    
    '***Textausrichtung  Spalte 10 : mitte, mitte
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellAlignment intI, 10, CatTableMiddleCenter
    Next
    
    '***Textausrichtung  Spalte 11 : mitte, mitte
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellAlignment intI, 11, CatTableMiddleCenter
    Next
    
    '***Textausrichtung  Spalte 12 : mitte, mitte
    For intI = 1 To intZeilenanzahl
        drwTable.SetCellAlignment intI, 12, CatTableMiddleCenter
    Next
    
    drwTable.ComputeMode = CatTableComputeON
    
    '***Tabelle suchen -> Name wurde weiter oben definiert
    Set objSel = objDoc.Selection
    '***Vorselektion löschen um das Ergebnis nicht zu verfälschen
    objSel.Clear
    '***Performanceerhöhung der Suche
    CATIA.HSOSynchronized = False
    objSel.Search "Drafting.Table.Name= Tabelle.1, all"
    CATIA.HSOSynchronized = True
    '***Farbe über RGB definieren
    objSel.VisProperties.SetRealColor 0, 0, 0, 1
    '***Linienart definieren
    objSel.VisProperties.SetRealLineType 1, 0
    '***Liniendicke definieren
    objSel.VisProperties.SetRealWidth 1, 0
    
    objSel.Clear
    
    CATIA.RefreshDisplay = True
    
    '***Excel beenden
    objExcel.Application.Quit
    
    '***Fenster schließen
    Unload Me
    
    '***Meldung an User
    MsgBox "Makro wurde erfolgreich beendet.", vbInformation + vbOKOnly, "Makro erfolgreich beendet"
    
Exit Sub

'***Fehlerbehandlung: Ausgabe der Fehlernummer und Fehlerbeschreibung
Fehler:
    MsgBox "Fehlernummer: " & Err.Number & vbNewLine & _
    "Fehlerbeschreibung: " & Err.Description, vbCritical + vbOKOnly, "Fehler"
    
End Sub

Private Sub cmd_Zeilenzahl_pruefen_Click()

    '***Abfrage ob der Wert der Zeilenanzahl weiter verarbeitet werden kann
    '***Eingabe in eine Zahl umwandeln
    strZeilenanzahl = IsNumeric(Me.cmb_Zeilenanzahl.Value)
    If (strZeilenanzahl = True) And (Me.cmb_Zeilenanzahl.Value <> "0") And Not (strZeilenanzahl = "") Then
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl = Abs(Me.cmb_Zeilenanzahl.Value)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl)
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
        '***Meldung an User, dass die Eingabe verwendet werden kann
        MsgBox "Die Eingabe kann verwendet werden.", vbInformation + vbOKOnly, "Eingabe korrekt"
    ElseIf Me.cmb_Zeilenanzahl.Value = "" Then
        MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbOKOnly & vbCritical, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    ElseIf (strZeilenanzahl = True) And (Me.cmb_Zeilenanzahl.Value = "0") Then
        MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    ElseIf (strZeilenanzahl = False) And (Me.cmb_Zeilenanzahl.Value <> "0") Then
        MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Fehler"
        Do
            '***Zeilenanzahl in InputBox eingeben
            strEingabe = "Zeilenanzahl"
            strEingabe = InputBox("Geben Sie die Zeilenanzahl ein.", "Anzahl der Zeilen", strEingabe)
            '***Eingabe in eine Zahl umwandeln
            strZeilenanzahl_MsgBox = IsNumeric(strEingabe)
            If strEingabe = "" Then
                MsgBox "Eine leere Eingabe kann nicht verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = True) And (strEingabe = "0") Then
                MsgBox "0 kann nicht als Eingabe verwendet werden.", vbCritical & vbOKOnly, "Falsche Eingabe"
            ElseIf (strZeilenanzahl_MsgBox = False) And (strEingabe <> "0") Then
                MsgBox "Die Eingabe kann nicht verwendet werden, da es sich um keine Zahl handelt.", vbCritical & vbOKOnly, "Falsche Eingabe"
            End If
        Loop Until (strZeilenanzahl_MsgBox = True) And (strEingabe <> "0") And Not (strEingabe = "")
        '***Eingabe in eine positive Zahl umwandeln
        strZeilenanzahl_MsgBox = Abs(strEingabe)
        '***Eingabe in Integer umwandeln
        intZeilenanzahl = CInt(strZeilenanzahl_MsgBox)
        '***Wert der InputBox an ComboBox übergeben
        Me.cmb_Zeilenanzahl.Value = intZeilenanzahl
    End If

End Sub

Private Sub UserForm_Initialize()

    '***ComboBox "Zeilenanzahl" Initialwert festlegen
    Me.cmb_Zeilenanzahl.Value = "10"

    '***ComobBox "Zeilenanzahl" mit Werten füllen
    Me.cmb_Zeilenanzahl.AddItem ("5")
    Me.cmb_Zeilenanzahl.AddItem ("10")
    Me.cmb_Zeilenanzahl.AddItem ("15")
    Me.cmb_Zeilenanzahl.AddItem ("20")
    Me.cmb_Zeilenanzahl.AddItem ("25")
    Me.cmb_Zeilenanzahl.AddItem ("30")
    Me.cmb_Zeilenanzahl.AddItem ("35")
    Me.cmb_Zeilenanzahl.AddItem ("40")
    Me.cmb_Zeilenanzahl.AddItem ("50")
    Me.cmb_Zeilenanzahl.AddItem ("60")
    
End Sub
