Vraag & Antwoord

Programmeren

Macro schrijven in ms office xp

22 antwoorden
  • Ik weet niet of ik de vraag in het juiste forum zet maar ik heb een vraagje over het schrijven van 2 specifieke macro's: Kan iemand mij uiteggen hoe ik van de volgende situatie's een macro maak dwz wat ik er juist moet inzetten: situatie 1: betreft een geavanceerd printcommando om een pdf te maken via acrobatdistiller. Voorbeeld : van pagina 1 (W) van sectie 4 (X) tot pagina 20 (Y) van sectie 5 (Z) geeft p1s4-p20s5. Dus bij File-print-pages moet het volgende staan: p1s4-p20s5 Hij moet naar een specifieke niet standaard printer printen Hij moet ook naar een bestand afdrukken Het pad waarnaar hij moet printen moet ingevuld worden met een standaardwaarde, hij moet alleen naar de naam van het bestand vragen. dus zoiets \\naamserver\map\supmap\naam bestand (afhankelijk van input). Situatie 2: een volledig document naar een specifieke niet-standaard printer printen, naar een bestand afdrukken. Pad: idem situatie 1 PS het is de bedoeling om van de documenten op deze manier via acrobatdistiller software een pdf document aan te maken. Alle hulp is welkom
  • Al geprobeerd een macro op te nemen? Of kan dat niet in jouw office versie. Daarna deze analyseren (F1 is je vriend). De volgende is even snel in WD2000 opgenomen (print overigens niet naar file maar verandert wel de printer). [code:1:3a3ab466e1]Sub Macro3() ' ' Macro3 Macro ' Macro recorded 2004/05/13 by Wim Sturkenboom ' ActivePrinter = "HP Deskjet 1125C Printer" Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _ Collate:=True, Background:=True, PrintToFile:=False, PrintZoomColumn:=0, _ PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0 End Sub[/code:1:3a3ab466e1] Om een naam vragen kan met een inputbox of met een formuliertje. Na wat gekloot (voor vraag 2): [code:1:3a3ab466e1]Sub Macro4() ' ' Macro4 Macro ' Macro recorded 2004/05/13 by Wim Sturkenboom ' Dim dir As String Dim current_printer As String Dim fn As String ' save current printer current_printer = ActivePrinter ' set new printer ActivePrinter = "HP Deskjet 1125C Printer" ' default directory dir = "c:\" ' prompt for filename and combine path and filename fn = dir + InputBox("Enter output filename", "File name for PDF conversion") ' print to file Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _ Collate:=True, Background:=True, PrintToFile:=True, PrintZoomColumn:=0, _ PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0, _ OutputFileName:=fn, Append:=False ' restore original printer ActivePrinter = current_printer End Sub[/code:1:3a3ab466e1]Het stukje tav het opslaan en terughalen van de huidige printer is niet getest.
  • Ok dat is me dus gelukt en idd het terugzetten van de originele printer lukt niet, maar daar zal ik nog wel eens op zoeken. Maar nu zou ik toch graag die macro aan een knop linken die ik dan in een van de werkbalken kan zetten. Hoe moet ik dat aanpakken want dat lukt me niet? Heb gezocht en kan wel een knop maken in VBA maar hoe link ik die aan de macro en hoe kan ik die dan in word of excel zetten?
  • Hallo Boomertje, Klik rechts ergens op een werkbalk en kies dan aanpassen Kies het tabblad opdrachten en selecteer hier macro's Selecteer nu aangepaste knop in het vak rechts en sleep deze naar de werkbalk waar je hem wilt hebben. Let op, dit moet een werkbalk zijn en kan niet zomaar ergens waar verder niets is. Tijdens het slepen zie je een kruisje. Als het kruisje verandert in een plusje kan je de muisknop loslaten en zal je een nieuwe knop zien. Door nu rechts op deze knop te klikken kan je het een en ander aanpassen. Onder meer naar welke macro hij verwijst. Groeten, Wouter
  • Thanks guys het werkt. Nu toch noch enkele aanvullende vraagjes, hoe kan ik ervoor zorgen dat ik de aangemaakte macro's ook naar andere pc's kan overbrengen, zonder ze opnieuw te moeten maken, kan ik maw een bestand maken dat die macro bevat en dit dan mailen of op diskette zetten. Ik weet dat ik de hier gegeven voorbeeld macro een beetje moet aangepast worden voor gebruik onder excel. Nu wil ik weten of het mogelijk is om aan de hand van een input te bepalen of er een workbook, een selectie of alles geprint moet worden maw de macro vraagt een cijfer en daarmee weet hij wat er geprint moet worden, een if-clausule dus. PS websites waar meer info (gratis) te vinden is over macro's zijn ook welkom.
  • Opslaan van macro's (voor Word): de macro's worden opgeslagen in een template. Normaliter is dat [i:24280efc77]normal.dot[/i:24280efc77]. Je kunt echter ook een nieuw template maken en daar de macro in opslaan; in jouw geval bv een template die je pdfconverter noemt. Deze template kun je kopieren naar alle machines. Alternatief is om de template op een plek te zetten waar alle machines de templates kunnen vinden (menu [i:24280efc77]tools->options[/i:24280efc77], tabblad [i:24280efc77]filelocations[/i:24280efc77], veld [i:24280efc77]workgroup termplates[/i:24280efc77]); bv eeb server. Het 'probleem' met normal.dot is dat gebruikers daar vaak al zelf macro's in zetten. Op het moment dat jij jouw normal.dot er overheen zet, zijn die gebruikers hun macro's kwijt. Ik begin meestal met een nieuwe template en neem een lege macro op. In de eerste vraag die de [i:24280efc77]record-macro[/i:24280efc77] wizard je stelt kun je aangeven waar de macro moet worden opgeslagen.
  • Ik begrijp het, maar aangezien het de bedoeling is dat de macro automatisch opstart als word opstart, ben ik dus wel verplicht om via normal.dot te gaan. Naar analogie met de macro in word heb ik ook een beetje geeperimenteerd met een macro in excel die hetzelfe moet doen. Ik ben er nog niet helemaal uit, maar mijn probleem is eigenlijk hetzelfde hoe maak ik een macro die ik naar andere pc's kan transfereren. We krijgen op het werk soms macro's in de vorm van xla bestanden, je opent ze 1 keer je krijgt de macro altijd te zien in excel. Is dit de manier van werken, spijtig genoeg kan ik bij die macro's niet zien hoe ze opgebouwd zijn, er verschijnt altijd de boodschap project unviewable. De macro in excel maken lukt trouwens niet zo goed, ben vertrokken van de voorbeeldmacro en heb al geprobeerd met het opnemen van de macro maar ik loop vast bij het onderdeel waar het pad met bestandsnaam moet worden ingegeven. ik heb dit als code na vanalles geprobeerd te hebben: [color=green:cfd9975a5c][code:1:cfd9975a5c]Sub Macro4() ' ' Macro4 Macro ' Macro recorded 2004/05/13 by Wim Sturkenboom ' Dim current_printer As String Dim Fn As String ' save current printer current_printer = ActivePrinter ' set new printer Application.ActivePrinter = "HP DeskJet 895Cxi op Ne00:" ' prompt for filename and combine path and filename Fn = c:\test ("Enter output filename", "File name for PDF conversion") ' print to file ActiveWindow.SelectedSheets.PrintOut Copies:=1, PrintToFile:=True, Collate _ :=True ' restore original printer Application.ActivePrinter = "HP DeskJet 895Cxi op Ne00:" End Sub[/code:1:cfd9975a5c][/color:cfd9975a5c]
  • Ik denk niet dat excel de regel lust die om de filename vraagt; daar mist wat, lijkt me (bv iets in de geest van [i:6840d272bb]inputbox[/i:6840d272bb])
  • je hebt idd gelijk en ik heb een beetje zitten denken. De print to file functie in excel werkt iets anders dan in word, nl je krijgt onmiddelijk een inputscherm te zien. Mijn idee is het volgende: Ik creeer een extra inputveld, waardoor er 2 inputvelden verschijnen (1 via de input functie, het andere via de print to file functie). Het is de bedoeling dat in het eerste inputveld de naam van het bestand ingegeven wordt, he 2de wordt dan automatisch ingevuld (padnaam/"naam bestand uit eerste inputveld"), het probleem is echter dat ik er niet in slaag om het 2de inputveld automatisch te doen vullen met het pad en de waarde van het eerste inputveld. Hetgeen onder word werkt om een inputveld in te vullen werkt niet onder excel ik krijg altijd errors op dir of op fn. Het probleem is eigenlijk dat ik geen ervaring heb met macro's noch met enige andere programmeertaal, maar ik probeer ze te begrijpen en het zo te leren
  • Waarom printen met een inputbox? Dit is toch ook voldoende? [code:1:8945a2a45d]expressie.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)[/code:1:8945a2a45d] Als je alles invult krijg je toch helemaal geen inputscherm te zien of heb ik het nu fout? Het zou dan zoiets worden: [code:1:8945a2a45d]fn=InputBox("Voer bestandsnaam in", "Invoer vereist")[/code:1:8945a2a45d] nu staat in de variabele fn de bestandsnaam opgeslagen. Wil je hier nog een pad aan toevoegen gaat dat zo: [code:1:8945a2a45d]fn="c:/test/"+fn[/code:1:8945a2a45d] (jij vergeet dus de aanhalingstekens!) [code:1:8945a2a45d]expressie.PrintOut(, , 1, False, Applacation.ActivePrinter, True, False, fn)[/code:1:8945a2a45d] Groeten, Wouter
  • hartelijk dank, maar het werkt niet zoals het hoort, ik geef wel een naam op maar er wordt geen bestand aangemaakt op c:\test\. Het is de bedoeling dat het bestand onder de opgenomen naam op een specifieke locatie bewaard wordt, in mijn geval de locatie van de acrobat distiller. Ik heb nu volgende code [color=green:7c10438196]Sub Macro4() ' ' Macro4 Macro ' Macro recorded 2004/05/13 by Wim Sturkenboom ' Dim current_printer As String Dim Fn As String ' save current printer current_printer = ActivePrinter ' set new printer Application.ActivePrinter = "HP DeskJet 895Cxi op Ne00:" ' prompt for filename and combine path and filename Fn = InputBox("Enter output filename", "File name for PDF conversion") Fn = "c:\test\" + Fn ' print to file ActiveWindow.SelectedSheets.PrintOut Copies:=1, PrintToFile:=True, Collate _ :=True ' restore original printer Application.ActivePrinter = "HP DeskJet 895Cxi op Ne00:" End Sub[/color:7c10438196]
  • Maar moet je die acrobat printer dan niet selecteren als actieve printer i.p.v. die deskjet? Als het morgen nog niet gelukt is zal ik zelf acrobat installeren en proberen het een en ander uit te vogelen.
  • Dat klopt maar omdat ik thuis niet over die adobe printer beschik enkel op het werk heb ik het met mijn eigen printer geprobeerd. Dat maakt eigenlijk niks uit want als het zo lukt moet ik achteraf gewoon de printer veranderen. Maar de oplossing die jij voorsteld lukt ook niet hoor. Ik zal nog effe het probleem schetsen. Wanneer je in excel print to file doet krijg je in tegenstelling dan bij word direct een input box te zien. Normaal typ je hierin het pad "\\servernaam\acrobatdistiller\fid\in\"filename"". Dit wil ik eigenlijk automatiseren zodat hij eerst om een filename vraagt en daarna doorgaat naar het eigenlijke inputventster van print to file waar hij dan automatisch het bovenstaande pad met de eerder vermelde filename vermeld. Het enigste resultaat dat ik bekom is dat ik 2 inputvenster krijg die niet werken als je er iets intypt. Om de een of andere reden lukt het ook niet om de standaardprinter terug in te stellen nadat de macro uitgevoerd (door de macro nvd)
  • Wat dacht je ervan om: 1) F1 te gebruiken :x 2) de filename op te geven bij de printout method 8) Ik schrijf weinig of geen macros in excel, naar deze had ik binnen 3 minuten: stap 1: macro opnemen die naar een file print[code:1:68106b515f]Sub Macro2() ' ' Macro2 Macro ' Macro recorded 2004/05/20 by Wim Sturkenboom ' ' Application.ActivePrinter = "HP DeskJet 500 on LPT1:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "HP DeskJet 500 on LPT1:", PrintToFile:=True, Collate:=True End Sub[/code:1:68106b515f]stap 2: plaats de cursor op printout (in VBA editor) en ram op F1[quote:68106b515f] PrintOut Method Prints the object. Syntax expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName) expression Required. An expression that returns an object in the Applies To list. From Optional Variant. The number of the page at which to start printing. If this argument is omitted, printing starts at the beginning. To Optional Variant. The number of the last page to print. If this argument is omitted, printing ends with the last page. Copies Optional Variant. The number of copies to print. If this argument is omitted, one copy is printed. Preview Optional Variant. True to have Microsoft Excel invoke print preview before printing the object. False (or omitted) to print the object immediately. ActivePrinter Optional Variant. Sets the name of the active printer. PrintToFile Optional Variant. True to print to a file. If PrToFileName is not specified, Microsoft Excel prompts the user to enter the name of the output file. Collate Optional Variant. True to collate multiple copies. [i:68106b515f][b:68106b515f]PrToFileName[/b:68106b515f][/i:68106b515f] Optional Variant. If PrintToFile is set to True, this argument specifies the name of the file you want to print to. Remarks "Pages" in the descriptions of From and To refers to printed pages — not overall pages in the sheet or workbook. [/quote:68106b515f]Zoals je kunt lezen, kun je een filenaam meegeven stap 3: aanpassen macro naar aanleiding van wat je net gelezen hebt[code:1:68106b515f]Sub Macro2() ' ' Macro2 Macro ' Macro recorded 2004/05/20 by Wim Sturkenboom ' ' current_printer = Application.ActivePrinter Application.ActivePrinter = "HP DeskJet 500 on LPT1:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "HP DeskJet 500 on LPT1:", PrintToFile:=True, Collate:=True, _ PrToFileName:="c:\hallo.prn" ActivePrinter = current_printer End Sub[/code:1:68106b515f]Ik heb hier ook even het terugzetten van de printer aan toegevoegd. Nu zou je de boel verder wel moeten kunnen oplossen lijkt me.
  • Hee Wim, Volgens mij had ik dat ook al opgeschreven :wink: En die filename geeft hij als het goed is mee met de variabele fn. Nouja ik zal zelf nu eens acrobat installeren en een stuk code geven dat bij mij werkt. Voorgaande wat ik geschreven heb is namelijk allemaal uit mijn hoofd en niet getest.
  • [quote:9db1244739="Wouter Broekhuizen"]Volgens mij had ik dat ook al opgeschreven :wink:[/quote:9db1244739]Je hebt gelijk, had ik even niet gezien. [quote:9db1244739="Wouter Broekhuizen"]En die filename geeft hij als het goed is mee met de variabele fn.[/quote:9db1244739]In zijn laatste code doet hij dat niet [code:1:9db1244739]ActiveWindow.SelectedSheets.PrintOut Copies:=1, PrintToFile:=True, Collate :=True[/code:1:9db1244739]
  • Nou de cd van acrobat kan ik niet vinden :-? Dus hoe je er een pdf van kan maken weet ik niet precies, maar het als bestand printen lukt bij mij wel. [code:1:ac466549d2]Sheets.PrintOut , , 1, False, , True, False, "d:/test.prn"[/code:1:ac466549d2] Haal alle code eens weg uit de macro en plak alleen bovenstaande erin. Nu wordt het als een bestand geprint op de d schijf met als naam test.prn Als dat dan werkt kan je de macro weer verder uitbreiden. Ik krijg overigens helemaal geen scherm te zien ofzo wat jij bedoeld.
  • [quote:fe5dbbfc52="Wouter Broekhuizen"][code:1:fe5dbbfc52]Sheets.PrintOut , , 1, False, , True, False, "d:/test.prn"[/code:1:fe5dbbfc52]Haal alle code eens weg uit de macro en plak alleen bovenstaande erin. Nu wordt het als een bestand geprint op de d schijf met als naam test.prn[/quote:fe5dbbfc52]En dat had ik 'm dus al gedaan door een nieuwe macro op te nemen :P Alleen krijg ik een file op de c-schijf die hallo.prn heet. Maar het zal nu wel duidelijk moeten zijn voor topicstarter, lijkt me.
  • Het is inderdaad duidelijk. Ik was er ook al in geslaagd om via de macro naar een bestand te printen. Alleen lost dit mijn probleem nog niet op. In het voorbeeld dat gegeven worden, gaan we ervan uit dat de naam van het bestand altijd hetzelfde is. In mijn geval is dat niet zo, het enigste dat vast ligt is de locatie waar het bestand bewaard moet worden dus c:\test of iets anders, de naam van het bestand vernaderd bij elk document waarvan een pdf gemaakt wordt, maw woorden de macro moet naar de naam van het bestand vragen en dan het bestand dat aangemaakt worden de eerst ingegeven naam toekennen en bewaren op de vaste plaats. Nu ik heb ook nog eens via google gezogd en heb misschien een oplossing via sendkeys. Ik ga eens een beetje experimenten en zien of ik er uit kom. Wat denken jullie, zou ik er geraken met deze functie.
  • NEEEE! :( Niet met sendkeys! Het kan natuurlijk wel, maar dit is geen echte oplossing. Je moet gewoon een inputbox gebruiken. De bestandsnaam opslaan in een variabele, hier het pad aan toevoegen. En naar deze variabele verwijzen in de functie printout. Probeer dit eens: [code:1:a1e2a1838d]Bestandsnaam = InputBox("Voer de naam in waarmee het bestand opgeslagen moet worden", Invoer vereist) Bestandsnaam = "c:\test\" & Bestandsnaam Sheets.PrintOut , , 1, False, , True, False, Bestandsnaam[/code:1:a1e2a1838d] de c:\test\ moet je natuurlijk aanpassen aan jou eigen locatie Wijze les nummer 1: geef duidelijke namen aan variabele.

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.