Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

OLE-probleem(pje)

Overhaus
9 antwoorden
  • 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.
  • Bedoel je gewoon de VB constante voor een
    tab => vbTab
  • 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
  • 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.
  • 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


  • Ik ben zelf ook nieuwsgieriger naar een eenvoudiger oplossing. Ik had je titel beter moeten lezen OLE ! dus WORD gewoon in VB als object. Misschien kun je VB code schrijven naar een bookmark ?

    Ik zag ouwe rot Paulus ook weer in het forum opduiken. Hij weet het vast.
  • 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?
  • 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.
  • 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.


Beantwoord deze vraag

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