Word openen via Excel

  • Onderwerp starter Onderwerp starter auxi
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

auxi

Gebruiker
Lid geworden
3 jan 2011
Berichten
70
Hallo allemaal,

wie kan mij helpen met het volgende?
Ik wil graag dat als ik kolom H benader Word op komt.
Korte vraag, maar groot probleem.

Hoor het wel.

Groet,

auxi
 
Verplaatst, een vraag over Word hoort niet in de Visual Basic sectie
 
Voorbeeldje. Deze code achter een knop op een formulier opent een nieuw Word document.

Code:
Private Sub CommandButton1_Click()
' Zorg ervoor dat er vanuit VBA een verwijzing is naar de Microsoft Word object library
Dim wrdApp As Object
Dim wrdDoc As Object
Dim i As Integer
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add ' Maak een nieuw document
    ' of
    'Set wrdDoc = wrdApp.Documents.Open("C:\docnaam.doc")
    ' Opent een bestaand document
    ' Regeltjes toevoegen
    With wrdDoc
        For i = 1 To 100
            .Content.InsertAfter "Test regel nummer #" & i
            .Content.InsertParagraphAfter
        Next i
        If Dir("C:\Newdoc.doc") <> "" Then
            Kill "C:\Newdoc.doc"
        End If
        .SaveAs ("C:\Newdoc.doc")
        .Close 'Sluit het document
    End With
    wrdApp.Quit ' close the Word application
    Set wrdDoc = Nothing
    Set wrdApp = Nothing
End Sub
 
Laatst bewerkt:
Hallo edmoor,

prima vb! Het werkt, na wat aanpassingen, perfect.

Wel nog het volgende probleem; nu het ik de code`s samen gevoegd, en nu komt word niet meer op!
Dit is wat er nu staat:

Code:
Sub Infoblad()
Dim msg, style, title, response
msg = "Hallo beste Ledenadministrateur, nu kun je het blad ledeninformatie invullen! Wil je doorgaan?"
style = vbYesNo + vbDefaultButton2 + _
vbInformation
title = "Gegevens bijwerken?"
response = MsgBox(msg, style, title)
If response = vbYes Then
msg = "Of wil je toch maar eerst alle gegevens opslaan?"
style = vbYesNoCancel + vbDefaultButton1 + _
vbInformation
title = "Gaan we bijwerken, of eerst opslaan?"
response = MsgBox(msg, style, title)
If respons = vbNo Then
Dim wrdApp As Object
Dim wrdDoc As Object
Dim i As Integer
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add

End If
If response = vbYes Then
Application.Dialogs(xlDialogSaveAs).Show
If response = vbCancel Then
Range("B6").Select
    End If
    End If
    End If
        End Sub

Weet jij wat er niet klopt?

Ik hoor het wel.

Dank je wel.

Groet,

auxi
 
Laatst bewerkt door een moderator:
Een beetje slordig geprogrammeerd, want o.a. de variabelen niet helemaal jofel gedeclareerd, en dus een foutje in je code.
Code:
Sub Infoblad()
Dim msg As String, title As String, response As Variant, response2 As Variant
Dim style As Variant
    
    msg = "Hallo beste Ledenadministrateur, nu kun je het blad ledeninformatie invullen! " _
        & "Wil je doorgaan?"
    style = vbYesNo + vbDefaultButton2 + vbInformation
    title = "Gegevens bijwerken?"
    response = MsgBox(msg, style, title)
    If response = vbYes Then
        msg = "Of wil je toch maar eerst alle gegevens opslaan?"
        style = vbYesNoCancel + vbDefaultButton1 + vbInformation
        title = "Gaan we bijwerken, of eerst opslaan?"
        response2 = MsgBox(msg, style, title)
        If respons2 = vbNo Then
            Dim wrdApp As Object
            Dim wrdDoc As Object
            Dim i As Integer
            Set wrdApp = CreateObject("Word.Application")
            wrdApp.Visible = True
            Set wrdDoc = wrdApp.Documents.Add
        ElseIf response2 = vbYes Then
            Application.Dialogs(xlDialogSaveAs).Show
        ElseIf response2 = vbCancel Then
            Range("B6").Select
        End If
    End If
End Sub
De reden dat het niet werkte was dat je een variabele (response) twee keer gebruikte. De tweede keer loopt hij daar op stuk, omdat je een openstaande variabele niet kan overschrijven. Dus met een extra variabele voor de tweede msgbox kom je een heel eind.

En graag de volgende keer je code opmaken met de CODE knop; dan is hij een stuk leesbaarder ;)
 
Octafish to the rescue :)
Om het netjes af te maken moet je aan het einde van de rit ook nog even wrdapp en wrddoc op nothing zetten.
 
Laatst bewerkt:
Hallo OctaFisch en Edmoor,

ik heb jullie opmerking(en) verwerkt, maar jammer dan!
Nu werkt het helemaal niet.

Hoor wel van jullie.

Groet,

auxi
 
Ik heb toevallig vandaag een heel interessant artikel gelezen over de onzin van het 'op Nothing' zetten van variabelen; dat is namelijk maar heel zelden nodig! Zodra een procedure of Functie wordt afgesloten, wordt de variabele namelijk ook 'gekeeld'. Alleen Globale variabelen houden hun waarden langer vast, en die zou je dus eventueel dus wel op Nothing moeten zetten. Dus dat zal de procedure de kop niet kosten :)
Wat dan wel? Geen idee, want een opmerking als 'Nu werkt het helemaal niet' zegt natuurlijk niet zoveel. Elke procedure wordt minstens opgestart, en zal in ieder geval naar de eerste regel moeten lopen. Dus waar staat de gele regel als hij stopt?
 
Wat dat Nothing betreft heb je gelijk maar het eet totaal geen brood maar is afhankelijk van je code wel degelijk nodig.
Wanneer je je aanwent om het altijd te doen zul je nooit tegen problemen aanlopen.
Als je het niet doet waar het wel nodig is ben je je werkgeheugen aan het volproppen die dan gauw uit z'n voegen kan basten.

En auxi, inderdaad even "debuggen" zoals Octfish al aangeeft, eventueel met het zetten van breakpoints.
Of laat je code hier even zien.
 
Laatst bewerkt:
Ik zal dat artikeltje een keer posten, want het geeft aan dat het zelfs wel verkeerd kan zijn om een variabele uit het geheugen te halen, omdat je de geheugencounter beïnvloed terwijl de variabele er nog steeds kan zijn! De auteur is er daarom een voorstander van om het niet op voorhand altijd te doen 'omdat het geen brood eet', maar er goed over na te denken, wat je immers met de rest van je code ook doet. En al ben ik technisch niet goed genoeg onderlegd om überhaupt welke uitspraak over correct geheugenbeheer dan ook te doen: handelingen doen 'omdat het toch niet uitmaakt' zou geen common practice moeten zijn in welke code dan ook. Alleen programmeren wat nodig is voor de specifieke taak, en geen overbodige regels toevoegen die niet nodig zijn. (Ik kan mij van een ander draadje deze uitspraak nog wel herinneren: "Ik ben altijd van de korte code :-) " )
 
"Ik ben altijd van de korte code"
Precies.
Maar dan niet "te weinig code" ;-)

Wat betreft geheugen allocatie is het gebruikelijk dit altijd zelf weer vrij te geven. In dit geval is het inderdaad niet nodig.
Daarom zei ik ook: "om het 'netjes' af te maken" :)
 
"Ik ben altijd van de korte code"
Precies.
Maar dan niet "te weinig code" ;-)

Wat betreft geheugen allocatie is het gebruikelijk dit altijd zelf weer vrij te geven. In dit geval is het inderdaad niet nodig.
Daarom zei ik ook: "om het 'netjes' af te maken" :)
Maar ik ben wel benieuwd naar het stukje dus als je dat voor me hebt, dan graag.
 
Hallo OctaFisch en edmoor,

ik weet niet waar jullie het over hebben, en dat is nu voor mij ook bijzaak.
OctaFisch de opmerking "Elke procedure wordt minstens opgestart, en zal in ieder geval naar de eerste regel moeten lopen. Dus waar staat de gele regel als hij stopt?"
klopt gedeeltelijk.
De procedure (zie bijlage) wordt wel opgestart, maar Word verschijnt niet, en een gele regel verschijnt ook niet!

Ben benieuwd hoe jullie dit verklaren.

Groet,

auxi
 

Bijlagen

Nou, de code doet het en nog zonder foutmeldingen ook, dus inderdaad geen gele regel :D
Al zat er wel een typfoutje in bij één van de regels. Daar had je respons2 staan i.p.v. response2. En dan loopt de procedure daar uiteraard overheen, met als gevolg dat de code deze regel overslaat:
If response2 = vbNo Then
Dus een eetje erbij, en je bent er.
 
Hallo OctaFisch,

nu werkt het, al had ik niets aan de code veranderd.

Nu heb ik nog 2 vragen:

1) Is het mogelijk om deze macro te starten als ik de cellen in kolom I (I6:I255) benader?
2) Hoe kan ik Word op de voorgrond krijgen? Nu blijft Word "achter" excel hangen, en is dus niet direct zichtbaar.

Hopelijk kunnen jullie mij hier ook mee helpen.

Groet,

auxi
 
Je zou het Excel venster kunnen minimaliseren.
 
Hallo OctaFisch,

dat zou ik zelf wel kunnen doen, echter als iemand anders het progje gebruikt weet hij/zij dat niet.
Dus mijn vraag blijft: kan ik het zo instellen dat Word voor excel opkomt?
De kolom benadering heb ik al geregeld, heb de code aangepast.

Groet,

auxi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan