Avatar billede gammer Nybegynder
27. juli 2006 - 15:48 Der er 9 kommentarer og
1 løsning

Overført data i et array (fra Excel) til Word

Jeg har lavet en makro, der overfører et array til Word. Array’et er oprettet i Excel.

Dataene der overføres skal i Word  opstilles ved hjælp af tabulatorer. Og her går det så galt. Den kode jeg har lavet giver følgende fejlmeddelelse:

”Run-time error ’438’

Object doesn’t support this property or method”

Linien der giver fejl er:
Selection.TypeParagraph.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabLeft


Hele koden er følgende:

Sub TilWord()

Dim SkatArray As Variant
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim x, y As Integer

' skriv range til array'et
Sheets("SAMBESKATNINGSINDKOMST").Select
SkatArray = Range("A2:M306")

' start Word og opret et dokument

    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
   
    Set wrdDoc = wrdApp.Documents.Add
    ActiveDocument.PageSetup.Orientation = wdOrientLandscape ' formatér dokumentet
    ActiveDocument.PageSetup.TopMargin = CentimetersToPoints(2)
    ActiveDocument.PageSetup.BottomMargin = CentimetersToPoints(2)
    ActiveDocument.PageSetup.LeftMargin = CentimetersToPoints(2)
    ActiveDocument.PageSetup.RightMargin = CentimetersToPoints(2)
   
    Selection.TypeParagraph.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabLeft
    Selection.TypeParagraph.TabStops.Add Position:=CentimetersToPoints(8), Alignment:=wdAlignTabRight
    Selection.TypeParagraph.TabStops.Add Position:=CentimetersToPoints(11), Alignment:=wdAlignTabRight
    Selection.TypeParagraph.TabStops.Add Position:=CentimetersToPoints(14), Alignment:=wdAlignTabRight
   
   
    x = 5
    With wrdDoc
    Do While SkatArray(x, 2) <> ""
    For y = 1 To 11 '11 kolonner
        .Content.InsertAfter "" & SkatArray(x, y)
       
    Next y
        .Content.InsertParagraphAfter
    x = x + 1
   
    Loop
   
     
    End With
   
End Sub

Er der nogen der har en løsning på problemet og evt. råd til den videre opbygning af koden?

Er mit problem ikke beskrevet godt nok må i lige sige til!
Avatar billede mugs Novice
27. juli 2006 - 15:57 #1
Nu er jeg langt fra nogen ørn til Excel. Men hvis vi sammenligner med Access tyder det på en reference fejl. Prøv at åbne din VBA editor og i menuen Tools > References at kontrollere, at du har en reference til Word.

I Access skal en sådan reference være tilgængelig, og det kunne jo være det samme i Excel. Hvis du kontrollerer dine referemcer vil du se, at du kan afkrydse en lang række referencer.
Avatar billede gammer Nybegynder
27. juli 2006 - 16:07 #2
Referencen til Word er sat under Tools, References. Så jeg tror ikke det er der, det går galt!
Avatar billede supertekst Ekspert
27. juli 2006 - 18:19 #3
Når jeg rettede TypeParagraph  ---> ParagraphFormat - så ingen problemer :-)

Sub TilWord()

Dim SkatArray As Variant
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim x, y As Integer

' skriv range til array'et
Sheets("Ark1").Select
SkatArray = Range("A2:M306")

' start Word og opret et dokument

    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
   
    Set wrdDoc = wrdApp.Documents.Add
    With wrdApp
        .ActiveDocument.PageSetup.Orientation = wdOrientLandscape ' formatér dokumentet
        .ActiveDocument.PageSetup.TopMargin = CentimetersToPoints(2)
        .ActiveDocument.PageSetup.BottomMargin = CentimetersToPoints(2)
        .ActiveDocument.PageSetup.LeftMargin = CentimetersToPoints(2)
        .ActiveDocument.PageSetup.RightMargin = CentimetersToPoints(2)
       
        .Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabLeft
        .Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(8), Alignment:=wdAlignTabRight
        .Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(11), Alignment:=wdAlignTabRight
        .Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(14), Alignment:=wdAlignTabRight
    End With
   
   
    x = 5
    With wrdDoc
    Do While SkatArray(x, 2) <> ""
    For y = 1 To 11 '11 kolonner
        .Content.InsertAfter "" & SkatArray(x, y)
       
    Next y
        .Content.InsertParagraphAfter
    x = x + 1
   
    Loop
   
     
    End With
   
End Sub
Avatar billede gammer Nybegynder
27. juli 2006 - 22:16 #4
Supertekst:

Det virker fint og og samtidig har du "strømlinet" koden, så det er bare perfekt. Pointene er dine.

Blot et lille spørgsmål til hvis du kan og vil:

I "For Next" løkken vil jeg gerne have VB til at lave en tabulator indrykning. Jeg har prøvet med "Selection.TypeText Text:=vbTab" men jeg får en fejl med den. Har du et bud på hvad jeg skal gøre her?

Iøvrigt, mange tak for hjælpen!
Avatar billede supertekst Ekspert
28. juli 2006 - 10:33 #5
Selv tak - prøv med:        wrdApp.Selection.TypeText Text:=vbTab
Avatar billede gammer Nybegynder
28. juli 2006 - 11:30 #6
Det ser ud til at være noget i den stil jeg skal bruge

Igen, mange tak for hjælpen supertekst
Avatar billede gammer Nybegynder
28. juli 2006 - 15:01 #7
Supertekst må jeg lige forstyrre dig igen

Jeg har forsøgt at bruge wrdApp.Selection.TypeText Text:=vbTab til at tabulere så der kommer adskillelse mellem de data som For Next løkken indsætter. Løkken ser nu sådan ud:
For y = 1 To 11 '11 kolonner
            .Content.InsertAfter "" & SkatArray(x, y)
            wrdApp.Selection.TypeText Text:=vbTab
Next y

Mit problem er, at alle "tab'ene" bliver indsat før alle dataene, således at dataene blot rykker frem på linien.

Har du (eller andre) en løsning herpå, giver jeg gerne yderligere 50 point for hjælpen!
Avatar billede supertekst Ekspert
29. juli 2006 - 15:52 #8
Her er et forslag, der indsætter fra SkatArray - flytter markøren det sidst indsatte antal tegn til højre og derefter indsætter "Tab":

    For y = 1 To 11 '11 kolonner
        .Content.InsertAfter "" & SkatArray(x, y)
        wrdApp.Selection.MoveRight Unit:=wdCharacter, Count:=Len(SkatArray(x, y))
        wrdApp.Selection.TypeText Text:=vbTab
    Next y
Avatar billede gammer Nybegynder
29. juli 2006 - 16:46 #9
Igen må jeg sige mange tak for hjælpen. Efter en lille tilretning af løkken fungerer det fint. Da jeg brugte dit forslag direkte gik det galt efter 2. gennemløb, da løkken forskød indholdet af SkatArray med yderligere en for hvert gennemløb. Jeg har lavet en lille ændring, så løkken nu ser sådan ud:

        For y = 1 To 11 '11 kolonner
        .Content.InsertAfter "" & SkatArray(x, y)
        wrdApp.Selection.MoveRight Unit:=wdCharacter, Count:=Len(SkatArray(x, y)) - p
        wrdApp.Selection.TypeText Text:=vbTab
        p = p - 1
        Next y

Nu fungerer den upåklageligt. Du har reddet mig fra mange timers arbejde!!! (hvis jeg overhovedet var kommet til en løsning!)

Jeg har oprettet et "spørgsmål" med 50 point til dig her i Excel kategorien med navnet "Point til supertekst" - så læg et svar her og pointene er dine.
Avatar billede supertekst Ekspert
29. juli 2006 - 17:14 #10
Igen selv tak - det er en fornøjelse, når man kan hjælpe!
Jeg lægger et svar.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester