InlineShapes - Größe / Sklarierung in Word 365

Moderator: ModerationP

InlineShapes - Größe / Sklarierung in Word 365

Beitragvon Wurschtel » 09. Mär 2019, 17:55

Hallo, ich brauche erneut euer Schwarmwissen ....

In Word werden eine ganze Reihe von Bilddateien importiert, die per se verzerrt dargestellt werden.
Ich kann mit dem u.a. Code jedes Bild ansprechen und mir die absoluten Abmessungen der Darstellung ausgeben lassen.
Mit der irgendwoher gefundenen Information von "2,835 Punkte pro mm" lassen sich die Abmessungen auch nachrechnen (siehe angehängten Screenshot).

Aber wie lese ich die Originalabmessungen oder die aktuellen Skalierungen aus?

Mit ".ScaleHeight" bzw. ".ScaleWidth" kann ich nur neue Skalierungen SETZEN, die sich dann zudem nur auf die aktuell ABSOLUTEN Abmesseungen auswirken.
Das nutzt also nichts.
Das Problem ist, dass alle Bilder identisch skaliert sein müssen und dazu brauche ich entweder die Originalabmessungen oder die angegebenen Skalierungsfaktoren.

Könnte mich bitte jemand mit der Nase 'drauf stoßen?

Danke & Gruß
Thomas

Code: Alles auswählen
AnzahlShapes = ActiveDocument.InlineShapes.Count
For I = 1 To AnzahlShapes
    With ActiveDocument.InlineShapes(I)
        '.LockAspectRatio = msoFalse
        HoeheAbsolut = .Height  'Im Beispiel wird "217,05" ausgelesen -> 217,05 Punkte  / 2,835 = 76,56 mm
        BreiteAbsolut = .Width  'Im Beispiel wird "444,50" ausgelesen -> 444,50 Punkte / 2,835 = 156,79 mm
        'SkalierungHoehe = ???
        'SkalierungBreite = ???
        'HoeheOriginal = ???
        'BreiteOriginal = ???
    End With
Next I


Bildschirminhalt erfassen-1.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wurschtel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 05. Mär 2019, 19:53

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 09. Mär 2019, 20:14

Das Problem ist, dass alle Bilder identisch skaliert sein müssen

du meinst, den selben Faktor? Oder die selbe Endgröße?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon Wurschtel » 09. Mär 2019, 20:27

Das gilt es herauszufinden ....

Step 1: Die Originalgrößen aller Bilder auslesen
Step 2: worstcase bzgl benötigten Platz erkennen
Step 3: den globalen Skalierungsfaktor festlegen
Step 4: den globalen Skalierungsfaktor auf die Originalgrößen der Bilder anwenden

Die eigentliche Frage ändert sich dadurch aber nicht.
Ich bekomme nur eine Größeninformation heraus und brauche für eine konsitente Veränderung halt eben eine weitere.
Wurschtel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 05. Mär 2019, 19:53

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 09. Mär 2019, 20:38

Naja, das ändert schon was, wenn man weiß, was du machen willst. Es ist wahrscheinlich ziemlich wenig hilfreich, wenn du ein Bild drin hast, das seinen Quadratmeter groß ist und mit 98% skaliert wird und du dann alle Bilder mit dem Faktor nimmst.
Prinzipiell hat Word das Ursprungsmaß schon irgendwo versteckt, es zeigt das ja auch an, aber die Frage ist halt, wozu?
Meistens ist die Anwendung ja so, dass man alle Bilder gleich groß haben möchte, oder so, dass sie jedenfalls grad so groß werden wie maximal möglich.
Das wiederum ist das Standardverhalten von Word, wenn man es über den Dialog einfügt. Maximum: Seitenrand. DAbei sollte es aber schon gleichmäßig skalieren.
Da Word die Maße nicht so einfach rausrückt, hilft dir ein Workarround.
Das Objektmodell kennt ja das aktuelle Skalierungsmaß (.ScaleHeight bzw. .ScaleWidth) in %. Damit und mit dem guten alten Dreisatz kannst du das Ursprungsmaß rausrechnen. Den Skalierungsfaktor aktuell hast du dann schon
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon Wurschtel » 09. Mär 2019, 20:57

Der Dreisatz war naheliegend natürlich der allererste Ansatz ....

Aber

ich bringe es nicht auf die Reihe, mit ".ScaleHeight/Width" die aktuellen, im Screenshot aufgeführten Faktoren auszulesen.
Ich kann nur neue Faktoren setzen.

Irgendwas in der Art wie variable = .ScaleHeight funktioniert nicht.
Gleichwohl jedoch .ScaleHeight = variable
Wurschtel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 05. Mär 2019, 19:53

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 09. Mär 2019, 21:19

Code: Alles auswählen
Sub bil()
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim iSh As InlineShape: Set iSh = dd1.InlineShapes(1)
Dim dblScH As Long, dblScW As Long
Dim dblOrigH As Single, dblOrigW As Single

For Each iSh In dd1.InlineShapes
dblScH = iSh.ScaleHeight
dblScW = iSh.ScaleWidth
dblOrigW = PointsToMillimeters(iSh.Width / dblScW * 100)
dblOrigH = PointsToMillimeters(iSh.Height / dblScH * 100)
Debug.Print dblScH, dblScW
Debug.Print dblOrigH, dblOrigW

Next iSh

theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon Wurschtel » 10. Mär 2019, 13:41

Bingo ... das war genau mein erster Ansatz.

Aber dblScH und dblScW wird dann bei mir mit Null "0" ausgelesen.
(Bsp. siehe unten)
Was ist nun bei dir anders als bei mir?

Bildschirminhalt erfassen-2.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wurschtel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 05. Mär 2019, 19:53

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 10. Mär 2019, 14:11

Sie sind nicht skaliert?
Oder, hast du nen Zeichnungsbereich?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 10. Mär 2019, 14:46

Lad mal ein Dok hoch
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon Wurschtel » 10. Mär 2019, 16:14

Aber sehr gerne doch ....

Habe es als normales docx angehängt. Der code im docm ist:

Code: Alles auswählen
Sub InlineShapesSkalieren()
'
Dim HoeheAbsolut As Single
Dim BreiteAbsolut As Single
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim iSh As InlineShape: Set iSh = dd1.InlineShapes(1)
Dim dblScH As Long, dblScW As Long
Dim dblOrigH As Single, dblOrigW As Single

For Each iSh In dd1.InlineShapes
    iSh.Select
    HoeheAbsolut = iSh.Height
    BreiteAbsolut = iSh.Width
    dblScH = iSh.ScaleHeight
    dblScW = iSh.ScaleWidth
    dblOrigW = PointsToMillimeters(HoeheAbsolut) '/ dblScW * 100)
    dblOrigH = PointsToMillimeters(BreiteAbsolut) '/ dblScH * 100)
   
    Debug.Print HoeheAbsolut, BreiteAbsolut
    Debug.Print dblScH, dblScW
    Debug.Print dblOrigH, dblOrigW
Next iSh

MsgBox "FERTIG"
End Sub


Vielleicht ist es noch wichtig zu wissen:
Die Tabellen werden via

Code: Alles auswählen
Word.Application.Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine, DisplayAsIcon:=False


aus Excel ins Word-Dok eingefügt. Sind in diesem Moment also noch verlinkt. Ist die Bearbeitung der Tabelleninhalte abgeschlossen, werden alle Verlinkungen im Dok per "STRG+Umschalt+F9" entfernt und es ergeben sich automatisch die InlineShapes.

An dieser Stelle vielleicht noch eben eine Anschlußfrage.
Wie kann ich den Verlinkungen zum Zeitpunkt des Einfügens einen Namen geben, unter dem ich später die InlineShapes wieder ansprechen kann?

Nun bin ich mal gespannt.

Gruß
Thomas
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wurschtel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8
Registriert: 05. Mär 2019, 19:53

Re: InlineShapes - Größe / Sklarierung in Word 365

Beitragvon theoS » 10. Mär 2019, 18:23

Wie kann ich den Verlinkungen zum Zeitpunkt des Einfügens einen Namen geben, unter dem ich später die InlineShapes wieder ansprechen kann?

Weiß ich nicht. Aus irgendeinem Grund haben Inlineshapes wohl in deinem Dokument keinen Namen.
(ich vermute, wie die Anfasser aussehen, dass es "alte" Inlineshapes sind, die Anfasser kenne ich nur von 2003-erstellten Doks, die neuen haben weiße)
Dazu wird kommen, dass, wenn du das durch Umwandeln der Felder erzeugst, die Information sowieso verloren geht.
Vielleicht, wenn du dir die Umwandlung mit einer Schleife vornimmst? Also eines nach dem andern. Aber inliner haben kein Namenseigenschaft.
Aber, warum nicht von hinten durchs Knie ins Auge?
Ausschneiden, einfügen. Dann kommst du an die Skalierung.
Alternative?
Alle Ishapes zurücksetzen.
Dann kommst du an die Ursprungsgröße und kannst sie einheitlich skalieren.
Code: Alles auswählen
Sub InlineShapesSkalieren()
    '
    Dim HoeheAbsolut As Single
    Dim BreiteAbsolut As Single
    Dim dd1 As Document: Set dd1 = ActiveDocument
    Dim iSh As InlineShape: Set iSh = dd1.InlineShapes(1)
    Dim dblScH As Long, dblScW As Long
    Dim dblOrigH As Single, dblOrigW As Single
zahl = dd1.InlineShapes.Count
    For i = zahl To 1 Step -1
    Set iSh = dd1.InlineShapes(i)
        iSh.Select
        Set ixxx = iSh.Range.Duplicate
        iSh.Range.Cut ' ausschneiden
        ixxx.Paste ' einfügen 'geht, wenn du inline auf default eingestellt hast beim Einfügen

'        iSh.Reset  'das ist die Alternative, dann hat jedes Ishape wieder seine ursprüngliche Größe und du kannst skalieren
    Next i

For Each iSh In dd1.InlineShapes

        HoeheAbsolut = iSh.Height
        BreiteAbsolut = iSh.Width
        dblScH = iSh.ScaleHeight
        dblScW = iSh.ScaleWidth
        dblOrigW = PointsToMillimeters(HoeheAbsolut) '/ dblScW * 100)
        dblOrigH = PointsToMillimeters(BreiteAbsolut) '/ dblScH * 100)
       
        Debug.Print HoeheAbsolut, BreiteAbsolut
        Debug.Print dblScH, dblScW
        Debug.Print dblOrigH, dblOrigW
       
Next iSh

    MsgBox "FERTIG"
    End Sub




theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4731
Registriert: 19. Apr 2008, 00:14


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast