2016-05-29 6 views
0

So habe ich ein 1000 Seiten Dokument in einem MS Publisher. Das Problem ist, dass ich jeden einzelnen TextFrame in ihm ändern muss, und es gibt ungefähr 4 von denen pro Seite. Ich habe noch nie mit Macros gearbeitet, aber ich habe ein bisschen in C und Python programmiert, also habe ich etwas Erfahrung mit der Programmierung. Mein Makro sieht wie folgt aus:Probleme mit Makro in MS Publisher

Sub Resize_Textbox() 
Dim pubPage As Page 
Dim pubShape As Shape 
For Each pubPage In ActiveDocument.Pages 
    For Each pubShape In pubPage.Shapes 
     If pubShape.Type = pbTextFrame Then 
      pubShape.TextFrame.Height = "21.5 cm" 
      If pubShape.TextFrame.Width = "18 cm" Then 
       pubShape.TextFrame.Width = "12.6 cm" 
      End If 
      If pubShape.TextFrame.Width = "8.75 cm" Then 
       pubShape.TextFrame.Width = "6.3 cm" 
      End If 
     End If 
    Next pubShape 
Next pubPage 
End Sub 

I Makrosicherheit überprüft haben und haben alle Makros aktiviert, ich sparte alles, aber wenn ich versuche, passiert nichts Makro zu laufen. Jetzt habe ich keine Ahnung, ob ich etwas falsch im Code selbst gemacht habe, aber es scheint mir ganz richtig zu sein. Allerdings habe ich bemerkt, dass wenn ich versuche, es in VBA auszuführen, es mir einen Fehler in Zeile gibt, wo ich die Höhe des Textrahmens ändern möchte, so dass es einen Fehler im Code geben muss, denke ich. Jede Hilfe wäre willkommen!

Antwort

0

In VBA, die Höhe und Breite Eigenschaften sind in Punkten nicht literal cm gemacht, können Sie CentimetersToPoints verwenden, um es auf den erforderlichen Wert zu konvertieren.

pubShape.TextFrame.Height = CentimetersToPoints(21.5) 

Geben Sie nicht das Suffix "cm" ein.

EDIT \ ZUSäTZLICH:

betreiben ich einen Test und habe nicht den Fehler Sie bekommen, mit dem Unterschied, dass ich mit deklarierten Variablen arbeitet. Ihre Fehlermeldung würde normalerweise bedeuten, dass wir set = davor benötigen oder dass wir auf etwas verweisen, das nicht da ist.

Versuchen Sie in Ihrer Methode die unten und sehen, ob es funktioniert (Beachten Sie diese Probe nur tut Seite eins): -

Public Sub test() 
Dim pg As Page 
Dim shp As Shape 

Set pg = ThisDocument.Pages(1) 
    For Each shp In pg.Shapes 
     If shp.Type = pbTextFrame Then 
      shp.Height = CentimetersToPoints(5) 
     End If 
    Next 
Set pg = Nothing 

End Sub 
+0

Danke für die schnelle Antwort! Also habe ich ohne cm versucht, und ohne "" Zeichen und ich habe versucht, das gleiche zu tun, wie du es getan hast, aber nichts hat funktioniert. Ich bekomme immer noch den Kompilierfehler auf. Höhe Zeile: "Methode oder Datenelement nicht gefunden" – Toma

+0

@Toma, ich habe mehr zu meiner Antwort hinzugefügt, sehen, ob es hilft. –

0

ich erkannte, was ich falsch gemacht habe. Ich musste es einfach so machen:

pubShape.Height = ... 

Ohne TextFrame in der Mitte.