VBA Script erstellen - automatische Tabelle erstellen
#1
Hallo erstmal,

ich möchte mit Visual Basic für CorelDraw X4 ein Script erstellen,
das mir automatisch die Höhe und Breite aller meiner von Hand gesetzen Ellipsen ausgibt.
Am besten in einer Tabelle, in Excel wäre natürlich ex©ellent :sei_gepriesen:

Ich bin soweit, das wenn ich die EINE Ellipse ANKLICKE er mir meinen b,h,x,y-Wert in Corel ausgibt.

====Code=====

Sub VariablenAuslesen()
Dim OrigSelection As ShapeRange
Dim h As Double 'Hoehenvariable
Dim b As Double 'Breitenvariable
Dim x As Double 'X-Positionsvariable
Dim y As Double 'Y-Positionsvariable

Set OrigSelection = ActiveSelectionRange 'Auswahl ist markierte Auswahl
ActiveDocument.ReferencePoint = cdrCenter 'Referenzpunkt ist Mittelpunkt
OrigSelection.GetSize b, h 'Maße auslesen - Befehl:GetSize (Width As Double, Height As Double) - Variable b entspricht Widht, Variable h entspricht Height
OrigSelection.GetPosition x, y 'Position auslesen - Befehl:GetPosition( PositionX As Double, PositionY As Double)- Variable x entspricht PositionX, Variable y entspricht PositionY

Dim s1 As Shape 'Variable s1 - Variablentyp Shape
Set s1 = ActiveLayer.CreateCustomShape("Table", 8, 1, 28, 10, 5, 3)

'Zeile 1
s1.Custom.Cell(1, 1).TextShape.Text.Story = "Ellipsennummer"
s1.Custom.Cell(2, 1).TextShape.Text.Story = "x - Position"
s1.Custom.Cell(3, 1).TextShape.Text.Story = "y - Position"
s1.Custom.Cell(4, 1).TextShape.Text.Story = "Höhe"
s1.Custom.Cell(5, 1).TextShape.Text.Story = "Breite"

s1.Custom.Cell(1, 1).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(2, 1).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(3, 1).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(4, 1).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(5, 1).TextShape.Text.Story.Words.All.Size = 41

'Zeile 2
s1.Custom.Cell(1, 2).TextShape.Text.Story = "Ellipse 1"
s1.Custom.Cell(2, 2).TextShape.Text.Story = x
s1.Custom.Cell(3, 2).TextShape.Text.Story = y
s1.Custom.Cell(4, 2).TextShape.Text.Story = h
s1.Custom.Cell(5, 2).TextShape.Text.Story = b

s1.Custom.Cell(1, 2).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(2, 2).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(3, 2).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(4, 2).TextShape.Text.Story.Words.All.Size = 41
s1.Custom.Cell(5, 2).TextShape.Text.Story.Words.All.Size = 41

End Sub

====Codeende=======

Mein Ansatz wäre jetzt das ich die ActiveSelectionRange automatisch verändern will, sodass er ALLE Ellipsen auf dem Aktiven Baltt durchläuft...aber genau da komme ich nicht weiter

Oder gibt es evtl eine einfachere Lösung?

PS:
Kenne mich mit VBA und CorelDraw leider nicht so gut aus, alles hier ist aus dem Internet zusammengesucht (Befehle), analysiert und für meine Zwecke angepasst( ausprobiert)
Zitieren
#2
Hallo phs,
phs schrieb:...alles hier ist aus dem Internet zusammengesucht (Befehle), analysiert und für meine Zwecke angepasst( ausprobiert)

das mache ich auch oft so, man muss das Rad ja nicht immer neu erfinden.
phs schrieb:Mein Ansatz wäre jetzt das ich die ActiveSelectionRange automatisch verändern will, sodass er ALLE Ellipsen auf dem Aktiven Baltt durchläuft...

In diesem Fall würde ich es ohne Auswahl (SelectionRange) versuchen und lieber den ShapeRange der aktiven Seite verwenden.

Hier ein Test mit X4 und Excel 2000:

[Bild: ellipsentabelleijk4g.gif]

Der Code:

Code:
Type Ellipsendaten
    Höhe As Double
    Breite As Double
    X As Double
    Y As Double
End Type
Dim Ellipsenzähler
Dim Ellipsenfeld() As Ellipsendaten

Sub eStart()
    ActiveDocument.Unit = cdrMillimeter 'die Maßeinheit des Dokuments einstellen
    Ellipsenzähler = 0
    Call EllipsenSuchen(ActivePage.Shapes.All)
    Call TabelleErstellen
    Debug.Print "Ende"
End Sub

Sub EllipsenSuchen(sr As ShapeRange)
    Dim s As Shape
    For Each s In sr
        Select Case s.Type
        Case cdrEllipseShape ' ist das Objekt eine Ellipse werden die Daten angelegt.
            Call DatenAnlegen(s)
        Case cdrGroupShape ' ist das Objekt eine Gruppe ruft sich die Sub selbst auf (Rekursion)
            Call EllipsenSuchen(s.Shapes.All)
        End Select
    Next
End Sub

Sub DatenAnlegen(s As Shape)
    ReDim Preserve Ellipsenfeld(Ellipsenzähler)
    
    s.GetSize _
        Ellipsenfeld(Ellipsenzähler).Breite, _
        Ellipsenfeld(Ellipsenzähler).Höhe
    s.GetPosition _
        Ellipsenfeld(Ellipsenzähler).X, _
        Ellipsenfeld(Ellipsenzähler).Y
        
    Ellipsenzähler = Ellipsenzähler + 1
End Sub

Private Sub TabelleErstellen()
    On Error GoTo Fehler 'Falls Excel nicht läuft, oder Keine Tabelle geöffnet ist, oder, oder...
    Dim XL As Object
    Set XL = GetObject(, "Excel.Application") 'Kontakt mit Excel aufnehmen
    Frage = MsgBox("Aktuelle Tabelle überschreiben?", vbYesNo + vbQuestion, "Excel")
    If Frage <> vbYes Then Exit Sub
    With XL.ActiveSheet ' Spaltenüberschriften setzen
        .Cells.Delete Shift:=xlUp ' Alle Zellen löschen
        .Cells(1, 1) = "Ellipsennummer"
        .Cells(1, 2) = "x - Position"
        .Cells(1, 3) = "y - Position"
        .Cells(1, 4) = "Höhe"
        .Cells(1, 5) = "Breite"
    End With
    With XL.ActiveSheet ' Daten Eintragen
        For i = 0 To Ellipsenzähler - 1
        .Cells(i + 2, 1) = i + 1
        .Cells(i + 2, 2) = Ellipsenfeld(i).X
        .Cells(i + 2, 3) = Ellipsenfeld(i).Y
        .Cells(i + 2, 4) = Ellipsenfeld(i).Höhe
        .Cells(i + 2, 5) = Ellipsenfeld(i).Breite
        Next i
        .Columns("A:E").EntireColumn.AutoFit  ' Spaltenbreite automatisch
        .Columns("B:E").NumberFormat = "0.00" ' Zahlenformat bestimmen
        .Rows("1:1").Font.FontStyle = "Bold"  ' Erste Zeile Fett
    End With

    Set XL = Nothing
    Exit Sub
Fehler: ' Fehlerbehandlung (Ausbaufähig)
    MsgBox "Irgendwas stimmt nicht!", vbCritical, "Fehler"
End Sub

Ich habe versucht die Subs und Variablen so zu benennen, dass man einigermaßen durchsteigen kann.

Vier Subs sind vielleicht ein wenig üppig, aber so lässt es sich wahrscheinlich am besten an Dein Vorhaben anpassen.

Vielleicht müssen ja noch Powerclips o. ä. berücksichtigt werden.

Willkommen im Forum!

Gruß

Koter

Nachtrag:
Excel muss laufen bevor das Makro gestartet wird!
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Automatische aktuelle Datumsangabe lissycat 23 5.325 05.11.2024, 20:49
Letzter Beitrag: siggimitbart
  Umriss einer Bildvorlage einfach erstellen anorak 10 920 04.11.2024, 01:11
Letzter Beitrag: skifan
  Tabelle ausfüllen? Eichhorn 10 2.658 26.07.2024, 14:01
Letzter Beitrag: peterjaeckel
  Außenkontur erstellen Reserl 5 682 06.05.2024, 20:03
Letzter Beitrag: skifan
  Kreis mit Perspektive erstellen Uckerschwan 5 977 16.08.2023, 14:38
Letzter Beitrag: Uckerschwan
  Texteffekt erstellen Reserl 3 746 06.06.2023, 13:58
Letzter Beitrag: norre
  vorlage nach pixelgröße erstellen panzerauto 1 737 11.05.2023, 12:16
Letzter Beitrag: Karthagos
  Kreise für IKIGAI Modell erstellen Marylinn12 5 1.248 13.04.2023, 11:03
Letzter Beitrag: Marylinn12
  Postkarten erstellen 4 pro A4 Seite panzerauto 4 1.451 11.06.2022, 14:46
Letzter Beitrag: norre
  Inhalte von Excel-Tabelle in Listfeld StefanA1987 22 3.923 13.03.2022, 01:38
Letzter Beitrag: koter