Toon posts:

Wrd 2003 naar 2007 macro start voor document zichtbaar is

Pagina: 1
Acties:

Onderwerpen


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ik heb een document met een macro erin (vba)
deze macro start automatisch bij het openen van het document.
De macro gaat vervolgens een tabel vullen met gegevens uit een andere database.

indien dit document geopend word via de verkenner is er niets aan de hand.
Zodra het document geopend word vanuit een ander document (wat vaak gebeurd en niet anders kan) dan krijg ik een error.

in de Debugger krijg ik deze regel highlighted:

Set tbl = doc.Tables(1)

Wat logisch is want doc verwijst naar het activedocument.

in word 2003 opende eerst het document voor het afstarten van de macro, en dus was activedocument het document met de tabel in.

in word 2007 opent de macro al zonder dat het document zichtbaar is. Activedocument verwijst hier dus naar het document met links (vanwaaruit het macro document geopend wordt).

er zijn dus 2 documenten open...
activedocument verwijst naar het verkeerde document.
hoe kan ik dit wijzigen?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Probeer 'thisdocument' eens.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ik loop nog steeds tegen het probleem aan, en ik kom er niet uit.
Het zal vast te vinden zijn via google, maar ik heb geen gepaste beschrijving voor het probleem.

situatie:
Spreadsheet in excel vol met links naar word documenten.
zodra je op een link klikt, open het word document, en zal de macro gestart worden.

In Office 2003, opende eerst het document, en daarna starte de macro, dus activedocument was op dat moment het word document.
In Office 2007 start de macro nog voor het word document geopend is.
Active document is dus op dat moment de excel.

In de macro staat een stuk code wat zoekt naar een bepaalde tabel, zoals deze te vinden zijn in het word document. Nu krijg ik de melding dat de tabel niet gevonden is, logisch want deze staat niet in de spreadsheet.

Is er een simpele manier om dit zonder al te veel VBA kennis op te vangen?
Onderstaand een stuk van de code, waar het dus misloopt.


Option Explicit
Dim strPath As String
Dim doc As Document
Dim con As New Connection

Sub Eigenschappen()

Dim strText As String 'Gelezen tekst in iedere tabel, rij 1, kolom 2
Dim tbl As Table

On Error GoTo Err_Eigenschappen

'Maak verbinding met de database
Connect

Set doc = ActiveDocument

For Each tbl In doc.Tables
If tbl.Columns.Count = 4 And tbl.Rows.Count = 8 Then
strText = tbl.Cell(1, 2).Range.Words(1)
If strText = "Eigenschappen" Then
tbl.Select
ReadData tbl
End If
End If
Next tbl

'Ga naar begin van het document
doc.Range(0, 0).Select

'Sluit verbinding naar de database
Disconnect
Exit Sub



  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Bij ActiveDocument ben je ook nog eens afhankelijk van de gebruiker, die moet niet met de muis of alt-tab gaan zitten spelen tijdens het draaien vd code.

Ik zou het andersom doen: laat de macro de link "uitlezen", dan kan je een verwijzing naar het Word document in een variabele zetten voor je het daarna pas opent. Dus niet Set doc = ActiveDocument maar Set doc = wdApp.Documents.Open("D:\bla.docx")
Dus:
Visual Basic:
1
2
3
4
5
6
7
Sub foo()
 Dim wdApp As Word.Application
 Dim wdDoc As Word.Document
 Set wdApp = CreateObject("Word.Application")
 Set wdDoc = wdApp.Documents.Open("D:\bla.docx")
 wdApp.Visible = True
End Sub

offtopic:
Let ook even op dat ik code tags gebruik, zodat het beter leesbaar is :Y)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ja zoiets is me al eerder aangeraden, maar dan zit ik weer met het probleem van excel <---> word
de macro staat in een word template.

1. In excel klik ik op de hyperlink
2. het word document opent
3. de macro start

Hoe schrijf ik een macro, die in die word template staat, die vervolgens kijkt welke link in excel als laatst is aangeklikt.
(de macro start pas na de fysieke klik, dus hoe vang je dat dan toch af in de macro?)

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ah. Bah, je hebt gelijk. Zelfs als je er een pauze tussen zet. Bugje?

Enige omweg die ik kan bedenken is de macro niet in document.open() zetten maar de macro aan te roepen via de commandline. Dus zet in Excel geen snelkoppeling naar d:\a.docm maar naar (als de macro foo heet) "C:\Program Files (x86)\Microsoft Office\Office14\Winword.exe" d:\a.docm /mfoo
Of via VBA in Excel hetzelfde bereiken, natuurlijk.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Het gaat om een groot aantal hyperlinks, iets meer dan 1000.
dus het lijkt me niet zo wenselijk om ze stuk voor stuk aan te passen.

[Voor 37% gewijzigd door Jackbq op 17-01-2012 11:03]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Het aanpassen van de links zelf is toch twee minuten werk met een loopje in een tijdelijke macro in Excel?

Voeg er voor "C:\Program Files (x86)\Microsoft Office\Office14\Winword.exe" toe en er na /mfoo en je bent er wat dat betreft. De Word-macro aanpassen/hernoemen moest toch al dus dat zal niet meer tijd kosten. (En dat VBA-aanpassen zou ook weer kunnen worden geautomatiseerd maar nu komen we te dicht bij Inception :+ )

Edit: maar dit is inderdaad eerder symptoombestrijding. Mooier zou zijn om de .open()-macro correct te draaien maar daar heb ik iig vooralsnog geen ideeen meer voor.

[Voor 16% gewijzigd door F_J_K op 17-01-2012 11:19]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Het is in mijn ogen vreemd dat het functioneren van office 2003 zo veranderd tov 2007, en dat hier bij MS zelf weinig van terug te vinden is.

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
F_J_K schreef op dinsdag 17 januari 2012 @ 11:18:
Voeg er voor "C:\Program Files (x86)\Microsoft Office\Office14\Winword.exe" toe en er na /mfoo en je bent er wat dat betreft.
Volgens mij werkt dit niet? vanuit excel kan ik denk ik geen parameters meegeven aan het opstart commando voor word. Winword runnen gaat prima, maar zodra daar iets achter staat pakt hij het niet meer.
maakt niet uit of het nu een netwerkpad is, of een simepel word file op de c:

Overigens:
Er moet toch wel een stuk code beschikbaar zijn wat ik in een macro zet, wat vervolgens eerst de view op word zet, voordat de oorspronkelijke macro start? Het hele probleem is nu slechts dat de verkeerde window bovenop staat, en dus refereert alles naar daar ipv het achterliggende word document.

[Voor 23% gewijzigd door Jackbq op 17-01-2012 13:14]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Hmmm. C:\Progra~2\micros~1\Office14\Winword.exe d:\a.docm \mfoo werkt inderdaad ook niet. Het kan natuurlijk dan weer wel via returnValue = Shell("C:\Progra~2\micros~1\Office14\Winword.exe d:\a.docm /mfoo", 1)

Maar het wordt steeds minder mooi :X

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ja het mooie is er wel vanaf, maar indien het werkt is het een mooie tijdelijke oplossing.
Wel zit ik nog met de vraag of er nou niet gewoon een optie is, die word focused voordat de macro runt.
Dat zou immers heel het probleem oplossen.

<edit>
Waar zet ik die returnvalue eigenlijk?
Nu is gewoon het hyperlink veld in excel in gebruik.

[Voor 17% gewijzigd door Jackbq op 17-01-2012 15:47]


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Wie verteld mij waar je zo'n return value zit?
Volgens mij moeten dan de hyperlinks vervangen worden door zo'n return value.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Wat ik gaf was VBA-code die je in Excel dan zou moeten uitvoeren.
Visual Basic:
1
returnValue = Shell("C:\Progra~2\micros~1\Office14\Winword.exe d:\a.docm /mfoo", 1)

Dat doe ik zo omdat Shell() een reactie kwijt wil. Dan zet ik dat maar even in een dummy-variabele. Mooier is om daar nog wat mee te doen maar dat lijkt hier niet nodig.

Overigens zou je ik in plaats hiervan gaan nadenken of er niet een betere manier is zonder VBA in ieder los Word document maar de code centraal uit te voeren op een specifiek bestand.

En hopen dat er ooit een fix komt voor dit rare gedrag van Word/VBA. Het gebeurt ook in OFF2010.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Anoniem: 113297

in office 2010 functioneert het indien je het volledige objectpad vermeldt :
Visual Basic:
1
2
set doc=word.application.activedocument
'rest van de code....

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ik ben helaas gebonden aan office 2007, daar ook nog een tip voor?

Anoniem: 113297

ik veronderstel dat het daar ook van toepassing is :)

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Helaas werkt dat niet, hij blijft in de excel kijken naar de tabel, hierbij is er geen verschil tussen;
Set doc = ActiveDocument of Set doc = Word.Application.ActiveDocument

Blijkbaar houd excel de focus, ik krijg namelijk een foutmelding (die hij hoort te geven indien hij de tabel niet vind) als ik hier niet op klik, en alles minimaliseer.
Vervolgens klik op op Word, en dan komt excel naar boven met op de voorgrond de word foutmelding.
Pas na het wegklikken van de foutmelding komt het daadwerkelijk document naar boven.

Het probleem zit dus nog steeds met het document in de focus te zetten.

<edit>
even een msgbox erin gezet die de inhoud van doc laat zien.

indien opgestart via excel --> Runtime 4248, This command is not available because no document is open.
Indien word document zelf opstarten --> de filename.doc

Mijn vermoeden klopt dus, de Macro word al uitgevoerd voordat het document geladen is.

[Voor 21% gewijzigd door Jackbq op 18-01-2012 15:33]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Wat ik me dus afvraag: heb je (TS) dit geprobeerd?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Ja, dat heb ik geprobeerd, maar omdat de macro in een template staat. (een dot file) pakt hij voor thisdocument de template, en niet het document waar het om gaat.

  • Jackbq
  • Registratie: Augustus 2001
  • Laatst online: 05-06 20:04
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee