VBA relative Objekt Position
#11
Hallo Pucki,

(29.07.2021, 22:21)Pucki schrieb: ...AUA. Das ist mir in über 30 Jahren Software-Entwicklung noch nicht bei einer Tabelle vorgekommen...

Wirklich nicht? Manchmal ist es praktisch, alle Zellen in einer Schleife zu beackern. Das geht auch in Excel:
Code:
'Excel Code
Sub AlleZellen()
   Dim r As Range
   Dim i As Integer
   Set r = ActiveSheet.Range("A1:D10")
   For i = 1 To r.Cells.Count
       Debug.Print r(i)
   Next i
End Sub

(29.07.2021, 22:21)Pucki schrieb: ...Muss ich mich bei Corel daran gewöhnen oder gibt es auch ein Befehl wo ich die Vertikale Ausrichtung wie bei der horizontalen auch, via X , Y Koordinaten anweisen kann...

Nein, Du kannst ja das Cell-Objekt benutzen, wie ich es im Beispiel meines letzten Beitrags getan habe.
Damit kannst Du im Gegensatz zur Cells-Auflistung die Koordinaten verwenden.

(29.07.2021, 22:21)Pucki schrieb: ...Ist nämlich echt lästig jedes mal über eine Funktion die Zelle berechnen zu lassen...

Das musst Du nicht, Du kannst die Koordinaten einer Zelle einfach abfragen:
Code:
   'Spalte von Zelle 5
   Spalte = tab_1C.Cells(5).ColumnIndex
   'Zeile von Zelle 5
   Zeile = tab_1C.Cells(5).RowIndex

(29.07.2021, 22:21)Pucki schrieb: ...Wobei mir dann helfen würde, wenn mir Corel sagt wie viele Spalten aktuell hat...

Auch das geht:
Code:
   'Anzahl
   Zellen = tab_1C.Cells.Count
   Spalten = tab_1C.Columns.Count
   Zeilen = tab_1C.Rows.Count

Viel Spaß und viel Erfolg bei Deinem Projekt!

Gruß

Koter
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Pucki
Zitieren
#12
Unter VB geht das so bei EXCEL.



Code:
Imports Microsoft.Office.Interop.Excel.XlApplicationInternational
Sub werte_eingeben
 Zeile = 2
 Sp = 5
 Wert = "Danke"
 xlCenter = -4108

 excel.Rows(Zeile).cells(sp).NumberFormat = "@" ' setzt die Zelle als Text.
 excel.Rows(Zeile).cells(sp).value = row("Bezeichnung")
 excel.Rows(Zeile).cells(sp).HorizontalAlignment = xlCenter
 excel.Rows(Zeile).cells(sp).VerticalAlignment = xlCenter  
 excel.Rows(Zeile).cells(sp + 6).NumberFormat = "#,##0.00" '

 excel.Rows(Zeile).cells(sp + 7).NumberFormat = "#,##0.00" 'Setzt die Zelle als Zahl mit Format
 formel = "=INDIRECT(ADDRESS(" + Trim(Str(3)) + "," + Trim(Str(sp + 2)) + "))" <- Erstellt die Formel als String
 excel.Rows(Zeile).cells(sp + 7).FormulaR1C1 = formel  <- Weißt die Formel Excel zu

end sub

Ist nur ein Ausschnitt aus den selben Programm was eine Kalkulationstabelle erstellt, aufgrund der Datensätze der Datenbank.  Man gibt einen festen Kalkulationsfaktor in einer Zelle vor und der Computer/Excel berechnet die neuen Preis. 

Der Chef überprüft die, überschreibt die Formel mit einen anderen gewünschten Preis und gibt mir die Tabelle wieder. Meine Software liest die Daten (Artikel-Nr. und neuen Preis) wieder ein in die Datenbank.

Nach den Einlesen klicke ich auf einen anderen Button und meine Software erstellt eine saubere und schöne Preisliste
mit Corel die ich dann entweder zur Druckerei gebe o. was heutzutage eher wahrscheinlich ist, als PDF drucke und auf den Server der Firma lege.


Aber im Code bei EXCEL immer mit Koordinaten.  Deshalb war ich so erstaunt das Corel das anders macht.

Aber nicht wirklich ein Problem, wenn ich es weiß.  Dank deine Infos schreibe ich halt eine Funktion die X,Y in cells umrechnet. VIELEN DANK NOCHMAL.

Jedenfalls sind aktuell keine Probleme in Sicht.


Ach kleiner Tipp am Rande zu Excel.  Wenn ich da ein Marko aufzeichne, editiere ich das Makro immer. Und löschen die erste Zeile mit den Range Befehl.  Dann kann ich das Makro über JEDEN Bereich (eine Zelle ist auch ein Bereich) anwenden.

Excel bereitet mir was VBA-Steuerung angeht keine größeren Probleme mehr. Hat mich aber auch fast 5 Monate gekostet bis der Tabellen so aufbaut per VB wie ich das will. Wink

Ich schreibe das alles nur zu Erklärung und falls es vielleicht mal ein Interessiert.

Gruß

    Pucki
[-] 1 Benutzer bedankt sich bei Pucki für diesen Beitrag:
  • koter
Zitieren
#13
Hallo Pucki,

(30.07.2021, 10:36)Pucki schrieb: Dank deine Infos schreibe ich halt eine Funktion die X,Y in cells umrechnet.

Genau das musst Du nicht!

Wie ich in meinem letzten Beitrag (vielleicht zu umständlich) erklärt habe gibt es:
  1. Das Cell-Objekt mit dem Du die Zelle mit Koordinaten ansprechen kannst.
  2. Die Cells-Auflistung mit der Du die Zelle über ihre Nummer ansprechen kannst.
Es gibt also nichts umzurechnen, Deine Funktion wäre überflüssig!

Gruß

Koter
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Pucki
Zitieren
#14
So ein dummes S. ;Wink

Hab es gerade getestet.  Jetzt ist es perfekt auch ohne eigener Funktion.

Du hast echt keine Ahnung wie sehr du mir damit geholfen hast. Den es ist mehr als du dir vorstellen kannst.

VIELEN DANK NONMAL .

Gruß

   Pucki
Zitieren
#15
Ich hab noch eine Frage an die ich vorher nicht gedacht habe, weil sie so unsinnig ist.

Gibt es eine Befehl der Corel sagt das er bei der Tabelle eine neue Zeile UNTEN hin setzt.

tab_1.Custom.AddRow(1)  <- setzt die neue Zeile OBEN HIN

Ansonsten muss ich nämlich ziemliche Klimmzüge machen damit ich die Tabelle erstellen kann.

Vielen Dank + Sorry das ich dich noch einmal nerve.

Es hat mich gerade 2 Std. gekostet heraus zu finden, das der eine neue Zeile OBEN in der Tabelle hinsetzt.


Gruß

   Pucki
Zitieren
#16
Hallo Pucki,

(20.08.2021, 14:40)Pucki schrieb: Ich hab noch eine Frage an die ich vorher nicht gedacht habe, weil sie so unsinnig ist.

Was ist daran unsinnig?

(20.08.2021, 14:40)Pucki schrieb: Gibt es eine Befehl der Corel sagt das er bei der Tabelle eine neue Zeile UNTEN hin setzt.

Ja, das Attribut des Befehls AddRow gibt die Zeile an, vor der eingefügt werden soll.
In Deinem Beispiel also vor der ersten Zeile.

Der Befehl Rows.Count gibt die aktuelle Anzahl der Zeilen aus.
Wenn Du eine Zeile am Ende einfügen willst, könnte das so funktionieren:

tab_1C.AddRow tab_1C.Rows.Count + 1

(Die Klammer kannst Du weglassen)

Gruß

Koter

PS: Das Einzige, was bei Dir ein wenig nervt ist, dass Du immer meist Du würdest nerven!  Wink
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Pucki
Zitieren
#17
Thumbs Up 
Zitat:Ja, das Attribut des Befehls AddRow gibt die Zeile an, vor der eingefügt werden soll.

In Deinem Beispiel also vor der ersten Zeile.


UI.  Das sind die feinen aber nervigen confused Unterschiede.  Bei den Datagridview was ich dauernd benutzt bedeutet der selbe Befehl AddRow(1) das er genau EINE Zeile am ENDE einfügen soll. 

Naja, ich hatte gedacht das wenigstens in VBA es irgend eine Art von Standard gibt.  Falsch gedacht.

Hast mir sehr geholfen. VIELEN DANK

Gruß

   Pucki


Zitat:PS: Das Einzige, was bei Dir ein wenig nervt ist, dass Du immer meist Du würdest nerven!

Naja, ich bin es schon seit frühester Kindheit gewohnt, meine Probleme selbst aus zu knobeln und zu lösen. Vielleicht liegt das daran das man mir damals zu oft gesagt hat das ich nerve. Rolleyes
Zitieren
#18
Ich hätte da noch eine winzige Frage.

Weißt du auch wie man den Linienstil ändert. 

Vor allen diese blöde Doppellinie weg bekommt. 

Ich möchte gerne eine etwas dicker Linie (0.5) UM die Tabelle und innen nur EINE Linie 0.25.

Ich hoffe das ist möglich die Tabelle sieht nämlich aus wie eine Sammlung von Kästchen. Wink

Ansonsten wird die Preisliste schon perfekt aufgebaut.

Die eine Preisliste mit 197 Teile auf 8 Seiten in ca. 8 Minuten, ohne das ich was machen muss. So habe ich mir das vorgestellt. Du hast vermutlich keine Ahnung wie viel Tage Zeit mir das erspart. Ist ja nicht die einzige die ich machen muss. Wir reden hier von ca. 1500 Bauteilen in 8 zusammen 8 Preislisten.

Vielen Dank für deine nochmalige Hilfe im Voraus.

Gruß

   Pucki
Zitieren
#19
Nachtrag:  Und ich bräuchte den Befehl wie man den Mindestabstand zwischen Zelle und Text auf 0 setzt.

Ich meine den Wert der wenn ich Zellen markiere und dann auf Ränder klicke auf 0,2 steht.  Ich möchte alle Werte auf 0 stellen oder wenigstens oben + unten Wert.

Das würde den Zeilenabstand verringern und ich bekomme mehr Zeilen auf eine Seite. Ist sogar gut für den Umweltschutz Wink

Vielen Dank auch dafür.

Normalerweise bekomme ich solche Infos raus, in den ich die Makro-Aufzeichnung aktiviere, den Job selbst mache und dann schaue welche Befehle das Makro aufgezeichnet hat. Aber leider verweigert mir das Makro die Aufzeichnung mit den Spruch "kann ich aufgezeichnet werden".

Weshalb ich noch eine Nebenfrage habe ?

WOHER weißt du das alles. Ich tue mich sau schwer damit überhaupt etwas über Corel-VBA zu finden. Und die F1-Hilfe ist grausig bei Corel.


Gruß

  Pucki
Zitieren
#20
Hallo Pucki,

(20.08.2021, 16:28)Pucki schrieb: ...Naja, ich hatte gedacht das wenigstens in VBA es irgend eine Art von Standard gibt.  Falsch gedacht.

VBA ist durch und durch standardisiert. Was Du falsch gedacht hast ist, dass die Tabellen die Du gerade programmierst, Bestandteil von VBA sind. Das sind sie aber nicht, es sind Objekte von Coreldraw!

(24.08.2021, 10:07)Pucki schrieb: ...Vor allen diese blöde Doppellinie weg bekommt...Ich möchte gerne eine etwas dicker Linie (0.5) UM die Tabelle und innen nur EINE Linie 0.25.

Code:
Sub TabRahmen()
   Dim tab_1 As Shape
   Dim tab_1C As CustomShape
   Dim tc
   
   ActiveDocument.Unit = cdrMillimeter ' Maßeinheit setzen
   Set tab_1 = ActivePage.Shapes("Tabelle1")
   Set tab_1C = tab_1.Custom
   
   With tab_1C
       .SeparatedBorders = False 'blöde Doppellinie weg
       .Cells.All.Borders.All.Width = 0.25 ' Linienbreie für alle Zellen
       .Rows.First.Cells.All.Borders.Top.Width = 0.5 'Linienbreie oben
       .Rows.Last.Cells.All.Borders.Bottom.Width = 0.5 'Linienbreie unten
       .Columns.First.Cells.All.Borders.Left.Width = 0.5 'Linienbreie links
       .Columns.Last.Cells.All.Borders.Right.Width = 0.5 'Linienbreie rechts
   End With
   
   For Each tc In tab_1C.Cells
       With tc 'Textfeldabstand
           .TopMargin = 0
           .LeftMargin = 0.5
           .RightMargin = 0.5
           .BottomMargin = 0
       End With
   Next
   
End Sub

(24.08.2021, 11:16)Pucki schrieb: Nachtrag:  Und ich bräuchte den Befehl wie man den Mindestabstand zwischen Zelle und Text auf 0 setzt.

Das habe ich gleich mit in die Sub gepackt (in der For-Each-Schleife)

(24.08.2021, 11:16)Pucki schrieb: ...Das würde den Zeilenabstand verringern und ich bekomme mehr Zeilen auf eine Seite. Ist sogar gut für den Umweltschutz...

Das sieht aber scheußlich aus.

(24.08.2021, 11:16)Pucki schrieb: ...WOHER weißt du das alles. Ich tue mich sau schwer damit überhaupt etwas über Corel-VBA zu finden. Und die F1-Hilfe ist grausig bei Corel...

Ich programmiere schon länger mit VBA und kann mich nicht an alle Quellen erinnern. Über Tabellen aber stehen die meisten Informationen in der Referenz zum Objektmodell der Corel-Hilfe.
Ich hatte z.B. vergessen wie man den Textfeldabstand setzt. Ein kurzer Blick in die Hilfe hat es mir verraten:

[Bild: zwischenablage018wkoa.jpg]

Deine recht scharfe Kritik an der Hilfe kann ich also nicht teilen.

Gruß

Koter
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Pucki
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Corel Draw Objekt dupliziert mehrfach Berlinerillustrator 1 270 24.09.2024, 10:55
Letzter Beitrag: Berlinerillustrator
  Objekt drehen Markierung wieder in Mittelpunkt Karthagos 9 1.171 08.06.2024, 06:53
Letzter Beitrag: Boerni
  objekt Bild teilweise erhellen panzerauto 6 1.170 17.06.2023, 12:28
Letzter Beitrag: mvm
  Objekt im Drehmodus fein justieren ? panzerauto 6 994 28.05.2023, 15:59
Letzter Beitrag: koter
  Objekt RGB Modus in CMYK umstellen Spaceliner 7 1.013 19.05.2023, 08:51
Letzter Beitrag: norre
  Objekt umfließen lassen honkie 4 932 27.03.2023, 13:17
Letzter Beitrag: honkie
  via VBA Objekt mit Namen ansprechen Pucki 2 1.001 24.08.2022, 18:34
Letzter Beitrag: Pucki
Photo Bogenschrift am Objekt ausrichten ist weg ? panzerauto 6 1.487 08.08.2022, 18:24
Letzter Beitrag: panzerauto
  Objekt aus Knoten mit Farbe füllen Spaceliner 7 1.823 02.08.2022, 10:11
Letzter Beitrag: Spaceliner
  Schrift oder Objekt einseitig grösser ziehen derBibo1969 2 1.492 01.03.2022, 20:00
Letzter Beitrag: derBibo1969