online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Chmumann vom 09.04.2020, 21:13 Options

mit Makro/VBA genaue Rechtecke zeichnen

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.

With ActiveSheet.Shapes("Rechteck1")
    .Width = Application.CentimetersToPoints(9)
    .Height = Application.CentimetersToPoints(6)
End With

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.

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


Wenn ich dann den Code umschreibe und für meine Zwecke missbrauche, wird es sogar nur noch 17x60mm groß.

With ActiveSheet.Shapes("Rechteck1")
    .Width = -0.71 + 5.1425 * 9
    .Height = 6 * 29.5
End With

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 schreiben

Antwort 1 von ChatAlligator vom 10.04.2020, 09:42 Options

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 vom 10.04.2020, 09:56 Options

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 vom 10.04.2020, 17:55 Options

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 vom 15.04.2020, 17:40 Options

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.

Ähnliche Themen

Excel Makro erscheint nicht in Makroliste
H.E.N.K  01.02.2007 - 218 Hits - 1 Antwort

Makro zur Bildgrößenveränderung
AWW  18.07.2007 - 5 Hits - 10 Antworten

Datei über VBA-Makro öffnen
andreas_3  09.09.2007 - 161 Hits - 2 Antworten

Brauche Tipps für einen individuellen VBA-Code
varginator  03.04.2008 - 118 Hits - 14 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026