25. marts 2004 - 16:00Der er
3 kommentarer og 1 løsning
Overførsel af data fra excel til Word
Styresystem: Win 2000 og XP.
Beskrivelse: Jeg er i gang med et projekt, hvor der først importeres eksterne data til et regneark i Excel. Disse data gennem går derefter adskillige beregninger og spredes ud i 15-20 regnark i projektmappen. Når beregningerne er slut, kopieres de relevante resultater over i Word, som en endelig rapport til slutbruger. Undervejs kan bruger foretage en række valg, som præsenteres i 5-6 dialogbokse. Det meste er styret af VBA.
Spørgsmål: Når jeg i slutningen af ovenstående proces ”smider” data over i Word, har jeg ikke nogen problemer første gang jeg gør det, men hvis jeg gør det igen lige efter, får jeg fejl ”462: The remote server machine does not exist or is unavarable”.
Skelettet i min kode ser således ud: Sub KopierTilWordTest() 'Dim MSW As Word.Application Dim MSW As Object
’Her kommer så koden, der smider data fra Excel til Word og det virker ;-)
MSW.Quit Set MSW = Nothing
Exit Sub
FejlBehandling: Select Case Err.Number Case 91 ' MSW.Quit Resume Next Case 429 Set MSW = CreateObject("Word.Application") Resume Next Case 462 ' MsgBox Err.Number & Error(Err.Number) ' Set MSW = Nothing ' MSW.Quit ' Resume Case 5941 MsgBox Err.Number & Error(Err.Number) MSW.Selection.MoveUp Unit:=wdLine, Count:=1 Case Else MsgBox Err.Number & Error(Err.Number) End Select End Sub
Jeg har på fornemmelsen at problemet har noget med oprydning efter den første kørsel at gøre. Hvis jeg ser i Task Manager kører WINWORD.EXE nogle gange som process og andre gange ikke.
De mange udkommenteringer i fejlproceduren er udtryk for diverse forsøg under vejs. Foruden de Err.Number, der fremgår af koden har jeg også undervej fået nogle uden forklaring og med et stort negativt nummer.
I korthed: hvad gør jeg for at undgå eller handle fejl 462?
Hej CK Den første del: Set MSW = GetObject(, "Word.Application") med set MSW = createObject("Word.Application") eller sætte en reference til Word fra Excel og bruge er ok i min kode, da fejlbehandling på Err.Number 429 netop tager højde for denne situation. Men ikke 462!
Vedr: dim MSW as word.application set MSW = new word.application
har jeg prøvet det tidligere og er i tvivl om det er ok med object eller om det skal være word.application. Jeg har imidlertid ændret på koden siden, så jeg skulle måske prøve igen. Ved du hvad forskellen er om jeg erklærer object eller word.application?
Jeg ved ikke hvad fejlkode 429 og 462 tager højde for, men jeg ved at man kun bør bruge Set MSW = GetObject(, "Word.Application"), hvis du skal arbejde med Com+ Service eller MTS Service, og da du ikke skal det i det her scenarie, så bør du bruge set MSW = createObject("Word.Application") da den er hurtigere og beregnet til netop det du skal bruge den til.
Ja der er stor forskel på om du bruger "as Object" eller "As Word.Application" der er for det første den forskel, at Word.Application ikke fylder nær så meget som Object, og dermed går det hurtigere. Desuden så får du mulighed for at udnytte IntelliSence der går at du får en masse hjælp i VBA editoren.
Jeg har desværre ikke haft tid til dette projekt i en periode.
Men netop i dag har jeg fundet et skriv hos Microsoft: Knoledge Base-artikel 319832, som beskriver og løser problemet.
Hermed lukker jeg spørgsmålet
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.