Ga naar inhoud

OLE-probleem(pje)


Aanbevolen berichten

Ik ben bezig met OLE-automatisering. Zo probeer ik facturen vanuit een VB-programma als Microsoft Word document te creëren. Dat gaat perfect maar hoe krijg ik een tab daarin? Dat is voor een factuur essentieel tenzij een lettertype wordt gebruikt waarvan alle karakters dezelfde breedte hebben zoals op een typemachine maar dat is lelijk. Wie weet dit (al of niet) toevallig? Ik ben via dit forum al meermalen uitstekend geholpen. Er moet een oplossing zijn want ik kan me niet voorstellen, dat Microsoft daar niet aan gedacht heeft.
Link naar reactie
Beste Dijkele, Als ik vbCrLf gebruik, dan gaat de cursor naar het begin van de volgende regel als ik vbTab gebruik dan gaat de cursor een aantal (5 ?) posities verder Maar ik wil dat de cursor naar b.v. positie 80 gaat. Ik moet dus een statement hebben dat gelijkwaardig is aan het Basic-statement tab(80) Overhaus
Link naar reactie
Beste Dijkele, Ik heb je verkeerd geplaatste reactie gevonden. Jij bent waarschijnlijk veel sneller dan ik kan volgen want ik snap er geen jota van. Voor de goede orde volgt hier eerst jouw reactie dan staat die gelijk op de goede plek in deze forumdiscussie: Je kan natuurlijk 80 spaties vullen maar ik zou e.e.a. anders opzetten. Maak eerst je frame in een Word document. (extensie *.rtf) en zet je variabelen daarin tussen blokhaken. Je kunt de boel zo precies positioneren. Lees vervolgens vanuit VB elke regel uit, plaats deze in een array en vervang alles tussen de blokhaken met een variabele. Vervolgens schrijf je de hele array weer weg naar een nieuw document. Wat bedoel je met dat frame? En ik dacht dat alle Word documenten de extensie *.doc hadden. Welke variabelen bedoel je die ik tussen blokhaken moet zetten? Ik snap er helemaal niets van en al zou ik het begrijpen dan nog lijkt jou idee mij nogal omslachtig. Er moet een hele omweg bewandeld worden om een eenvoudig doel te bereiken. Er moet toch een statement bestaan waarmee ik naar een bepaalde positie op een regel kan gaan zoals het Basic-statement Tab(x)? Je eerste zin lijkt erop te duiden, dat je ervan uit gaat, dat alle karakters dezelfde breedte hebben maar dat is bij de meeste fonts niet het geval. Misschien kun je mij, eenvoudige van geest, uitleggen wat je precies hebt bedoeld te zeggen. Overhaus.
Link naar reactie
Tekst kan vele extensies aannemen. In´*.rtf zitten alle opmaakcode's. Je bron is een *.rtf en deze lees je regel voor regel uit. Ken je dit soort code ? Dim vrij_bestandsnummer As Integer Dim regel As String Dim tekst() As String Dim i As Integer vrij_bestandsnummer = FreeFile i = 0 Open "c:nota.rtf" For Input As #vrij_bestandsnummer Do Until EOF(vrij_bestandsnummer) i = i + 1 Line Input #vrij_bestandsnummer, regel ReDim Preserve tekst(i) tekst(i) = regel Loop Close #vrij_bestandsnummer Zie je hier niets in ? met space(80) krijg je 80 spaties
Link naar reactie
Het blijkt, dat mijn probleem door mij wat helderder aan de orde moet worden gesteld. Ik heb in VB6 een programma geschreven waarbij men met behulp van het besturingselement 'Data' door een database kan wandelen. In deze database (Excel) staan produkten en hun prijzen. Deze gegevens verschijnen op het computerscherm in labels, die voorzien zijn van een keuzerondje. Door een klick op zo'n keuzerondje wordt een produkt gekozen met de daaraan gekoppelde prijs. Zo kunnen offertes, orders en facturen naar de printer worden gestuurd middels het statement 'Printer.Print'. De printer verstaat ook het statement 'Tab(x)', waarbij x het aantal posities op de betreffende regels aanduidt. Zo kan ik met: Printer.Print Tab(10); Printer.Print strProdukt; Printer.Print Tab(80); Printer.Print strPrijs een regel printen die begint met 10 spaties, dan de omschrijving van het produkt, dan een aantal spaties en tenslotte, te beginnen op positie 80 de prijs (de prijzen zijn uiteraard uitgevuld). Zo komen alle getallen keurig onder elkaar. Na 'Printer.EndDoc' wordt de offerte, order of factuur netjes afgedrukt. Maar ik wil wél graag al deze gegevens bewaren en wel in een Word-file, wil ik niet alles kwijt zijn bij afsluiten van het programma. Daartoe open ik een Word-document voor schrijven met: Set objWordApp=CreateObject ("Word.Application.8") objWord.App.documents.Add endan voer ik tekst in via: .......insertAfter Text:= Tot zover is alles perfect gelukt. Maar ik kom er maar niet achter hoe ik die tab moet invoeren zoals ik dat wël aan de printer heb kunnen opdragen. Dat is mijn probleem Ik heb vier Visual Basic boeken erop nageslagen maar nergens vind ik het antwoord. Wie weet de oplossing?
Link naar reactie
Deze truc werkt meestal wel. Ga naar Word, en neem een macro op. Voer alle handelingen uit (mbv muis en toetsenbord) die het geprogrammeerde programma ook moet gaan doen. Daarna kun je met de Visual Basic editor (ook onder het menu Macro) de macro in VB-code analyseren en kijken hoe Word het zelf doet. Ik zie dat deze discussie inmiddels behoorlijk gedateerd is, ik hoop dat deze tip nog bruikbaar is.
Link naar reactie
Beste KVU Bedankt voor je reactie. Ik wil je vertellen hoe ik ben gevaren Ik heb een macro gemaakt zoals je voorstelde, waarin ik met een sneltoets een tab op 9 cm kan zetten. De VB editor geeft de volgende tekst: Selection.ParagraphFormat.TabStops.ClearAll ActiveDocument.DefaultTabStop = CentimetersToPoints(1.25) Selection.ParagraphFormat.TabStops.Add Position:= _ CentimetersToPoints(9), _ Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces ( De laatste 3 regels is één regel) Als ik dit zó in mijn programma invoeg dan krijg ik een foutmelding: Sub or function not defined (CentimetersToPoints(9)) Dus heb ik een Dim-statement geplaatst: Dim CentimetersToPoints(0 to 23) as Single Dan krijg ik nieuwe foutmelding: Object required (Selection.ParagraphFormat.TabStops.ClearAll) Dus veranderde ik het verhaal als volgt: objWordApp.Selection.ParagraphFormat.TabStops.ClearAll objWordApp.ActiveDocument.DefaultTabStop = CentimetersToPoints(1.25) objWordApp.Selection.ParagraphFormat.TabStops.Add Position:= _ CentimetersToPoints(9), _ Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces Hierna voer ik de volgende tekst in: objWordApp.documents(1).Content.InsertAfter Text:=vbTab en daarna stuur ik tekst naar het Word document Nu krijg ik geen enkele foutmelding maar als ik het opgeslagen Word-document bekijk dan is er helemaal geen tab verschenen. Laat ik de tweede regel weg (objWordApp.ActiveDocument.DefaultTabStop = CentimetersToPoints(1.25)) dan komt er wel een tab maar een van ongeveer 5 spaties en niet op positie 9 cm. Dat tabje krijg ik ook als ik dat hele verhaal weglaat. Ergens heb ik het gevoel, dat we op de goede weg zijn maar we zijn er blijkbaar nog (lang) niet. Overhaus.
Link naar reactie
  • 2 weken later...
Mijn OLE-probleem(pje), dat zo langzamerhand voor mijn een OLE-probleem begon te worden is opgelost! Sinds mijn laatste reactie (3 april) is het bijzonder stil geworden rond dit probleem. Intussen heb ik niet stil gezeten en al proberende heb ik de oplossing gevonden, die ik de moeite waard vind om hier te vermelden. Dijkele was ook nieuwsgierig naar een eenvoudiger oplossing en KVU, die mij de tip aan de hand deed een makro te maken en die te analyseren heeft er recht op te weten welke oplossing er uit de bus gekomen is. Twee dingen,(zou den Uyl, God hebbe zijn ziel, gezegd hebben): 1. Als je vanuit Visual Basic, OLE Automation servers (Access, Word of Excell) wil benaderen, moet je de juiste verwijzing aan het project toevoegen via het dialoogvenster References(Project-References) Voor Word is dat Microsoft Word 8.0 Object Library. Zonder die verwijzing kan VB de VBA-taal niet lezen. 2. De laatste lange ‘zin’ van de makro, bedacht ik, had iets te maken met de sneltoetsen die ik had opgegeven voor de makro. En aangezien ik in mijn VB programma geen sneltoets heb gedefinieerd en ook niet kon definiëren was deze zin onbruikbaar . Ik heb hem toen gewoon weggelaten en de DefaultTabStop-waarde op 9 gezet i.p.v. op 1.25 en zie, het wonder geschiedde. Ik kreeg een juweel van een tab van 9 cm! Uiteindelijk is het dus zó geworden: objWordApp.Selection.ParagraphFormat.TabStops.ClearAll objWordApp.ActiveDocument.DefaultTabStop = CentimetersToPoints(x) objWordApp.Documents(1).Content.InsertAfter Text:=vbTab (waarbij x de gewenste tablengte is) Ik ben een intens gelukkig mens en bedank iedereen, die meegedacht heeft en speciaal KVU. Overhaus.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...