Vraag & Antwoord

Programmeren

[VBA] Pagina-instelling alleen voor selectie

9 antwoorden
  • Even voorop gesteld: ik ben een volstrekte beginner met VBA. Het volgende: ik heb een afbeelding die paginagroot is. Die wil ik op A3-formaat hebben, dus moet die pagina ook A3 worden. Dit is een regelmatig terugkerend iets dat door diverse mensen (ook die niet zo goed overweg kunnen met Word) gedaan moet worden. Ik heb daarom een macro opgenomen die het volgende doet:[list=1:b23f557eed][*:b23f557eed]afbeelding is geselecteerd [*:b23f557eed]Bestand --> pagina-instelling… [*:b23f557eed]Tab papier [*:b23f557eed]Papierformaat A3 [*:b23f557eed]Toepassen op geselecteerde tekst [*:b23f557eed]Ok.[/list:o:b23f557eed] (Vervolgens nog wat handelingen met de afbeelding en de kop- en voettekst, maar dat is in dezen -denk ik- niet interessant) Daar is het volgende uit komen rollen: [code:1:b23f557eed]Sub Processchema_vergroten() ' ' Processchema_vergroten Macro ' "&chr(10)&"Uitvergroten van processchema's tot A3 formaat en bijbehorende pagina-instellingen wijzigen. ' With Position = Selection.PageSetup .LineNumbering.Active = False .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(5) .BottomMargin = CentimetersToPoints(2.5) .LeftMargin = CentimetersToPoints(2.5) .RightMargin = CentimetersToPoints(2.5) .Gutter = CentimetersToPoints(0) .HeaderDistance = CentimetersToPoints(1.25) .FooterDistance = CentimetersToPoints(0.47) .PageWidth = CentimetersToPoints(29.7) .PageHeight = CentimetersToPoints(42) .FirstPageTray = wdPrinterDefaultBin .OtherPagesTray = wdPrinterDefaultBin .SectionStart = wdSectionNewPage .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = True .VerticalAlignment = wdAlignVerticalTop .SuppressEndnotes = False .MirrorMargins = False .TwoPagesOnOne = False .BookFoldPrinting = False .BookFoldRevPrinting = False .BookFoldPrintingSheets = 1 .GutterPos = wdGutterPosLeft End With End Sub[/code:1:b23f557eed] Probleem hierbij is, dat het [i:b23f557eed]hele document[/i:b23f557eed] nu op A3-formaat gezet wordt. Daar zit ik niet op te wachten, het moet die ene pagina zijn. Daarom heb ik bij het opnemen ook voor geselecteerde tekst gekozen. Als ik zo kijk naar de code zie ik ook staan "Selection.PageSetup". Toch lijkt dat niet goed te gaan. Google helpt me niet verder, dus stel ik de vraag maar hier: hoe krijg ik voor elkaar dat niet heel het document aangepast wordt, maar alleen die pagina?
  • Ik neem even aan dat je handmatig pagina breaks hebt gezet? Zo ja, dan hoef je de breaks voor en na de pagina die je wilt veranderen alleen maar te vervangen door sectie-einden, en dan met name de optie waarbij je gelijk een nieuwe pagina krijgt. Dit vind je ergens in het Opmaak menu. Dan kun je jouw macro zonder aanpassingen draaien, en zullen de wijzigingen alleen gelden voor die sectie.
  • Hmm... ik probeerde de secties ook op te nemen in de macro. Met die xecties gaat het goed met de pagina-instelling, maar bij End With stopt het gebeuren. Het vergroten van de afbeelding en de kop-en voettekst doet hij nu niet. Zo ziet het er nu uit: [code:1:43f122da49]Sub Processchema_uitvergroten() ' ' Processchema_uitvergroten Macro ' Macro opgenomen op 9-5-2008 door Ger Bruinsma ' Selection.MoveLeft Unit:=wdCharacter, Count:=1 Selection.InsertBreak Type:=wdSectionBreakContinuous Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.InsertBreak Type:=wdSectionBreakNextPage Selection.MoveLeft Unit:=wdCharacter, Count:=2 Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend With Selection.PageSetup .LineNumbering.Active = False .Orientation = wdOrientPortrait .TopMargin = CentimetersToPoints(5) .BottomMargin = CentimetersToPoints(2.5) .LeftMargin = CentimetersToPoints(2.5) .RightMargin = CentimetersToPoints(2.5) .Gutter = CentimetersToPoints(0) .HeaderDistance = CentimetersToPoints(1.25) .FooterDistance = CentimetersToPoints(1.25) .PageWidth = CentimetersToPoints(29.7) .PageHeight = CentimetersToPoints(42) .FirstPageTray = wdPrinterDefaultBin .OtherPagesTray = wdPrinterDefaultBin .SectionStart = wdSectionContinuous .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = True .VerticalAlignment = wdAlignVerticalTop .SuppressEndnotes = False .MirrorMargins = False .TwoPagesOnOne = False .BookFoldPrinting = False .BookFoldRevPrinting = False .BookFoldPrintingSheets = 1 .GutterPos = wdGutterPosLeft End With Selection.InlineShapes(1).Fill.Visible = msoFalse Selection.InlineShapes(1).Fill.Solid Selection.InlineShapes(1).Fill.Transparency = 0# Selection.InlineShapes(1).Line.Weight = 0.75 Selection.InlineShapes(1).Line.Transparency = 0# Selection.InlineShapes(1).Line.Visible = msoFalse Selection.InlineShapes(1).LockAspectRatio = msoTrue Selection.InlineShapes(1).Height = 963.8 Selection.InlineShapes(1).Width = 703# Selection.InlineShapes(1).PictureFormat.Brightness = 0.5 Selection.InlineShapes(1).PictureFormat.Contrast = 0.5 Selection.InlineShapes(1).PictureFormat.ColorType = msoPictureAutomatic Selection.InlineShapes(1).PictureFormat.CropLeft = 0# Selection.InlineShapes(1).PictureFormat.CropRight = 0# Selection.InlineShapes(1).PictureFormat.CropTop = 0# Selection.InlineShapes(1).PictureFormat.CropBottom = 0# If ActiveWindow.View.SplitSpecial <> wdPaneNone Then ActiveWindow.Panes(2).Close End If If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ ActivePane.View.Type = wdOutlineView Then ActiveWindow.ActivePane.View.Type = wdPrintView End If ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _ LinkToPrevious ActiveWindow.ActivePane.View.PreviousHeaderFooter Selection.WholeStory Selection.Copy ActiveWindow.ActivePane.View.NextHeaderFooter Selection.PasteAndFormat (wdPasteDefault) If Selection.HeaderFooter.IsHeader = True Then ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter Else ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader End If Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _ LinkToPrevious ActiveWindow.ActivePane.View.PreviousHeaderFooter Selection.WholeStory Selection.Copy ActiveWindow.ActivePane.View.NextHeaderFooter Selection.PasteAndFormat (wdPasteDefault) ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument End Sub[/code:1:43f122da49] PS: sorry voor de lappen code, maar er is hier geen inklap-functie op het forum...
  • Met bovenstaande lukt het nu gek genoeg wel, alleen zit er nog een hik in: de afbeelding neemt ook de gehele breedte in beslag, terwijl dit toch niet de bedoeling was. Volgens mij is dat met het commando [b:125bcdaaae]LockAspectRatio = msoTrue[/b:125bcdaaae] toch ondervangen, maar zoals gezegd is VBA mijn ding niet echt en heb ik het misschien bij het verkeerde eind of op een andere plaats fout staan. Het zou m.i. in elk geval in dit stuk moeten zitten: [code:1:125bcdaaae] Selection.InlineShapes(1).Fill.Visible = msoFalse Selection.InlineShapes(1).Fill.Solid Selection.InlineShapes(1).Fill.Transparency = 0# Selection.InlineShapes(1).Line.Weight = 0.75 Selection.InlineShapes(1).Line.Transparency = 0# Selection.InlineShapes(1).Line.Visible = msoFalse Selection.InlineShapes(1).LockAspectRatio = msoTrue Selection.InlineShapes(1).Height = 963.8 Selection.InlineShapes(1).Width = 703# Selection.InlineShapes(1).PictureFormat.Brightness = 0.5 Selection.InlineShapes(1).PictureFormat.Contrast = 0.5 Selection.InlineShapes(1).PictureFormat.ColorType = msoPictureAutomatic Selection.InlineShapes(1).PictureFormat.CropLeft = 0# Selection.InlineShapes(1).PictureFormat.CropRight = 0# Selection.InlineShapes(1).PictureFormat.CropTop = 0#[/code:1:125bcdaaae] Hoe moet ik dit wijzigen zodat de afbeelding in hoogte wordt uitvergroot en de breedte zich daaraan aanpast?
  • [quote:b34df68c45="Ger"] <knip> [code:1:b34df68c45]<knip> Selection.InlineShapes(1).LockAspectRatio = msoTrue Selection.InlineShapes(1).Height = 963.8 Selection.InlineShapes(1).Width = 703# <knip>[/code:1:b34df68c45] Hoe moet ik dit wijzigen zodat de afbeelding in hoogte wordt uitvergroot en de breedte zich daaraan aanpast?[/quote:b34df68c45] Je zet nu eerst de hoogte, en vervolgens toch nog de breedte. Doordat je de hoogte-breedte verhoudingen al hebt vastgezet met LockAspectRatio, hoef je alleen de gewenste hoogte in te stellen. De breedte wordt dan automatisch aangepast.
  • Ofwel, ik moet die regel met width weghalen begrijp ik?
  • [quote:5959d996e5="Ger"]Ofwel, ik moet die regel met width weghalen begrijp ik?[/quote:5959d996e5]Yep
  • Hmm... dat gaat ook niet helemaal goed zie ik. Als ik dat doe, wordt de alleen de hoogte veranderd en doet de breedte helemaal niets. Ik vraag me af, wat doet dat hekje (#) bij sommige regels? Heeft dat ermee te maken?
  • [quote:904792d211="Ger"]Hmm... dat gaat ook niet helemaal goed zie ik. Als ik dat doe, wordt de alleen de hoogte veranderd en doet de breedte helemaal niets. [/quote:904792d211]Vreemd, want dit heb ik even snel getest, en dat werkt bij mij wel zoals je het zou verwachten (breedte blijft in verhouding staan tot de hoogte). Kan ik zo even niks over zeggen. [quote:904792d211="Ger"]Ik vraag me af, wat doet dat hekje (#) bij sommige regels? Heeft dat ermee te maken?[/quote:904792d211]Dat is een verkorte notatie, om aan te geven dat het getal ervoor van het type Double is. [url=http://xlvba.3.forumer.com/index.php?showtopic=22]Hier[/url] vind je wat meer shortcuts.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.