Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

mit Makro/VBA genaue Rechtecke zeichnen





Frage

Hallo, vielleicht kann mir jemand bei meinem Problem helfen, denn bei Google & Co komme ich mittlerweile auch nicht mehr weiter, eventuell habe ich auch nur einen Denkfehler drin und es ist so überhaupt nicht möglich. Mein Problem ist, dass ich kein genaues Rechteck mit VBA hinbekomme. Es soll 90mm Breit und 60mm Hoch sein. [code] With ActiveSheet.Shapes("Rechteck1") .Width = Application.CentimetersToPoints(9) .Height = Application.CentimetersToPoints(6) End With [/code] Damit wird mein Rechteck 95x59mm. Wenn ich jetzt die gefundenen Makros (Zeilenhöhe/Spaltenbreite in cm) auf eine Zelle anwende, wird diese korrekt auf 90x60mm formatiert. [code] Sub Spaltenbreite_in_cm() Dim sBreite As Single Dim sAktuell As Single Dim strText As String Dim strAntwort As String sAktuell = (Selection.ColumnWidth + 0.71) / 5.1425 strText = "Aktuelle Spaltenbreite: " & _ Format(sAktuell, "###0.00 cm") & Chr(13) _ & "Geben Sie die gewünschte Spaltenbreite für die " & _ "aktuelle Spalte oder Markierung in cm ein:" strAntwort = InputBox(strText, "Neue Spaltenbreite festlegen", _ Format(sAktuell, "###0.00")) If strAntwort <> "" Then sBreite = CSng(strAntwort) Selection.ColumnWidth = -0.71 + 5.1425 * sBreite End If End Sub Sub Zeilenhoehe_In_cm() Dim sHoehe As Single Dim sAktuell As Single Dim strText As String Dim strAntwort As String sAktuell = Selection.RowHeight / 29.5 strText = "Aktuelle Zeilenhöhe: " & Format(sAktuell, "###0.00 cm") _ & Chr(13) & "Geben Sie die gewünschte Zeilenhöhe für die " & _ "aktuelle Zeile oder Markierung in cm ein:" strAntwort = InputBox(strText, "Neue Zeilenhöhe festlegen", _ Format(sAktuell, "###0.00")) If strAntwort <> "" Then sHoehe = CSng(strAntwort) Selection.RowHeight = sHoehe * 29.5 End If End Sub [/code] Wenn ich dann den Code umschreibe und für meine Zwecke missbrauche, wird es sogar nur noch 17x60mm groß. [code] With ActiveSheet.Shapes("Rechteck1") .Width = -0.71 + 5.1425 * 9 .Height = 6 * 29.5 End With [/code] Ist es überhaupt möglich so etwas zu realisieren oder habe ich mich total verfahren und die falsche Excel-Abzweigung genommen? Für jede Hilfe oder Denkanstoß bin ich dankbar. P.S.: Verwende Office 2002 SP3 und Win XP Need Help Chmumann

Antwort 1 von ChatAlligator

Auch wenn das Rechteck auf den Punkt genau definiert werden kann, benutzt die entsprechende Anwendung ein Raster für dessen Ausgabe. Die Vorgabe wird somit auf die Werte des Rasters gerundet, was die Vorstellung einer punktgenauen Ausgabe hinfällig macht. Übrigens ist das Raster unter Excel genauer als das unter Word.

Antwort 2 von Chmumann

Mit gewissen Toleranzen (+- 1-2mm) könnte ich leben, nur das ich halt 9cm reinstecke und 9,5cm dann rauskommen, kann ich halt nicht gebrauchen. Zumal das später keine festen Werte sind sondern Variablen und es nicht nur bei einem Rechteck bleiben wird. :(

Antwort 3 von ChatAlligator

Wie gesagt:
Excel und Word benutzen unterschiedliche Raster (also keine stufenlose Größeneinstellung)

Aber wie wär es, wenn du mit Frontpage (auch ein Bestandteil von MS-Office) das entsprechende Ausgabeblatt als Webseite definierst ?
Eine Webseite wird als reine Textdatei gespeichert, in der die Formatbefehle (Tags) in spitzen Klammern <> stehen um den betreffenden Abschnitt einzuleiten und zu beenden.
Hier können die Zellen wenigstens relativ genau und trotzdem individuell definiert werden.
Wenn du dir im Quelltext die entsprechenden Stellen für Zeilen oder Zellen anschaust, so kannst du diese füe ein makro übernehmen. So kannst du per Makro z.B. die Webseite generieren lasssen - eine Vorlage hast du ja dann durch den Quelltext des Entwurfs (musst nur die Inhalte anpassen).
So hab ich eine Zeit lang Webseiten aus einer Access-Datenbank mittels VBA generieren lassen. Gschrieben wird die Datei mit dem Befehl "OPEN". Um die reine Textdatei als Webseite zu interpretieren dient nur die Dateiendung ".htm".

Auch wenn dieser Vorschlag dein Problem nicht behebt, so halte ich es für eine Alternative, das Problem zu umgehen.

Antwort 4 von Chmumann

Leider nütz es in meinen Fall nichts das Problem zu umgehen, zumal das Excel-Endprodukt keine Möglichkeiten hat Frontpage beim Anwender zu nutzen, da dort zu 99% diese Anwendung überhaupt nicht installiert ist.
Doch durch ein wenig probieren und berechnen, bin ich zu einer bis jetzt recht zufriedenstellenden Ergebnis gekommen.

Public Function SBreite_ZHöhe_2Punkt(ByRef ZeileSpalte As String, ByRef Wert_in_mm As Single) As Single
    Dim Berechnung As Single
    Select Case ZeileSpalte
        Case "Zeile"
            Berechnung = Application.CentimetersToPoints(Wert_in_mm / 10) + _
                        0.0375 * Application.CentimetersToPoints(Wert_in_mm / 10) + 0.0545
        Case "Spalte"
            Berechnung = Application.CentimetersToPoints(Wert_in_mm / 10) - _
                        0.045 * Application.CentimetersToPoints(Wert_in_mm / 10) + 0.1012
    End Select
    SBreite_ZHöhe_2Punkt = Berechnung
End Function

Durch diese kleine Modifikation durch eine kleine Funktion sind die Abstände nur noch stellenweise bei max. +1mm -0mm. Damit könnte man, so finde ich, schon recht gut leben und man bleibt innerhalb von Excel. Werde aber dieses noch einen ausgiebigen Praxistest unterziehen und später auch die endgültige Lösung präsentieren.
Trotzdem vielen Dank an ChatAlligator für Deine Lösungsvorschläge/Denkanstöße.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: