Avatar billede hbl Nybegynder
31. januar 2005 - 21:08 Der er 9 kommentarer

Ændre kolonnebredde automatisk på en variable tabel via vba

Ændre kolonnebredde automatisk på en variable tabel

Jeg har en tabel some er 4,31cm bred pr kolonne, der skal kortes ned til 3 cm. Pr. kolonne.

Tabellen er indpasted fra et andet dokument, proceduren skal gentages ca. 2-300 gange, og hver gang vil antallet af linier være forskellige.

Nedenstående makro kode, kan håndtere mit behov når tabellen er statisk i sin størrelse, d.v.s. lige mange rækker hver gang.
Hvordan laver en makro der tæller antallet af linier og bruger resultatet, således nedenstående makro gør det rigtige.

4,31cm bredde

Pensionsbidrag

    aaa            bbb    ccc    I alt
01.01.2005    9 %    3 %    12 %
01.01.2006    9 %    4 %    13 %
01.01.2007    10 %    5 %    15 %


Sub bidrag()

  Selection.GoTo What:=wdGoToBookmark, Name:="bidrag_start"
  Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=3, Extend:=wdExtend
    Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
    Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
    Selection.Columns.PreferredWidth = CentimetersToPoints(3)
  End Sub
 

Jeg har faktisk en ligende udfordring hvor mit worddokument skal kigge ind i en excel fil og paste en række udfyldte celler.
Udfordringen er også her at området hvor data står  fra case til case, har forskellige antal rækker/linier. Vedlagte makro, kan håndtere mit behov, når data er er statisk i sin størrelse, d.v.s. har lige mange linier hver gang.

Sub hent ()

Dim xlApp As Object

Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

xlApp.workbooks.Open FileName:="C:\udtræk til statusrapport.xls"

xlApp.Range("j98:k103").Select
xlApp.Selection.Copy

Selection.GoTo What:=wdGoToBookmark, Name:="tilvalggrafisk"
    With ActiveDocument.Bookmarks
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.PasteAndFormat (wdFormatPlainText)
xlApp.Quit
Set xlApp = Nothing
End Sub

Det vil altid være således at 1.position i arket vil være j 98:k98  men jeg ved ikke hvor mange linier der udfyldes. Jeg vil kunne anføre et maks område hvor jeg ved at det ikke kommer ud over eks. J98:k110. Men problemet er så at det vil være forskelligt fra sag til sag hvor mange linier, og der med celler der er udfyldt og hvor mange der er tomme, jeg skal kun have pasted de ikke tommer celler i området.

Er det muligt at lave et tillæg til vedlagte makro, der kan håndtere denne udfordring.
Eller vil det være nemmere at overføre maks området j 98;k110, og benytte evt. makroen fra den 1. angivne udfordring?

Med venlig hilsen


HHB
Avatar billede jkrons Professor
31. januar 2005 - 21:19 #1
Måske har jeg misforstået opgaven, men ville det ikke være nemmere at markere hele tabellen på en gang og så ændre alle kolonner under ét. så er antallet af rækker ligegyldigt.

fx
Sub KolBred
    Selection.Tables(1).Select
    Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
    Selection.Columns.PreferredWidth = CentimetersToPoints(3)
End Sub
Avatar billede hbl Nybegynder
31. januar 2005 - 21:57 #2
Kære Jkrons

Tak for dit svar, Jeg har prøvet at lægge dit forslag ind i og afspille den.

Men det virker ikke. Jeg har måske ikke forklaret min udfordring tydeligt, så jeg prøver lige igen.
Det er ikke muligt at markere tabellen, dette skyldes at denne operation, kun er et delelement ud af en større række hændelser.
Den eneste måde til at finde netop denne tabel (som også er vist) er ved brug af bogmærker. Bogmærket "bidrag_start" efterfølges af tabellen, så de nedenfor indsatte linier i VBA er min måde at få markeret min tabel på. Måske findes der en anden.
Men disse vba linier passer kun, når tabellen er på 4 linier. Næsten case er tabellen på 3 linier eller 5 linier, og så passer koden ikke.
Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=3, Extend:=wdExtend
    Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend

Håber det kastede lidt mere lys over udfordringen

MVH

HHB
Avatar billede jkrons Professor
31. januar 2005 - 22:07 #3
Selv om du kun kan finde den via bogmærket må du kunne bruge min kode alligevel i kobination med din:

Sub KolBred
    Selection.GoTo What:=wdGoToBookmark, Name:="bidrag_start"
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Tables(1).Select
    Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
    Selection.Columns.PreferredWidth = CentimetersToPoints(3)
End Sub
Avatar billede jkrons Professor
31. januar 2005 - 22:08 #4
Hvis tabellen ikke må være markeret efter operationen kan du tilføje kode, der fjerner markeringen igen.
Avatar billede hbl Nybegynder
01. februar 2005 - 09:13 #5
Kære Jkrons
Tak for dit svar - det virker så mange tak.
Har du et bud på hvordan jeg i excel i et evt. på forhånd defineret området eks. J98:k110 kun kopier og overføre til word, de celler der er "ikke tomme", og lader de celler tilbage der er tomme.
Jeg tildeler foreløbig 60 points for dit foreløbige super svar, i håb om at du så også har et svar på den 2.del.
Avatar billede jkrons Professor
01. februar 2005 - 15:18 #6
Hej hbl-> Jeg ser lige på Excel tingen :-)
Avatar billede jkrons Professor
01. februar 2005 - 15:28 #7
Hvis du fx har cellerne i Excel

1  2
Tom 3
4  5
Tom 6
Tom Tom
7  8
Tom 9
0  Tom

Hvordan forventer du så at det skal se ud i Word?
Avatar billede hbl Nybegynder
01. februar 2005 - 15:52 #8
Kære Jkrons
Jeg for forsøgt at stille op hvordan jeg kan forestille mig kolonne og række vil være udfyldt i excel arket, og hvordan de så skal se ud i word:
original i excel        udseende i word       
r/c    j    k        r/c    j    k
1    10    20        1    10    20
2    11    21        2    11    21
3    tom    tom        4    12    22
4    12    22        5    13    23
5    13    23        7    14    24
6    tom    tom        8    15    25
7    14    24        10    16    26
8    15    25               
9    tom    tom               
10    16    26               

Det var en variant - her kommer anden variant
original udseende                    udseende i word   
j    k    L            k    L
tom    1    2            1    2
                       
j    k    L            j    L
1    tom    2            1    2
                       
j    k    L            j    k
1    2    tom            1    2


Med venlig hilsen

Hvis du løser denne venligst svarer på den super kort under excel her er den også lagt ud - så vil der jo være yderligere point.

MVH
HHB
Avatar billede hbl Nybegynder
01. februar 2005 - 19:31 #9
Kære Jkrons
Mine tabeller ser lidt mærkelige ud - de har tilsyneladende forskubbet sig. så jeg prøver igen - nu skulle det gerne se lidt pænere ud og nemmer at forstå.
r/c    j    k        r/c    j    k
1    10    20        1    10    20
2    11    21        2    11    21
3    tom    tom      4    12    22
4    12    22        5    13    23
5    13    23        7    14    24
6    tom    tom      8    15    25
7    14    24      10    16    26
8    15    25               
9    tom    tom               
10    16    26               

Det var en variant - her kommer anden variant
original udseende                    udseende i word   
j    k    L            k    L
tom    1    2          1    2
                       
j    k    L            j    L
1    tom    2          1    2
                       
j    k    L            j    k
1    2    tom          1    2

MVH
HHB
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
Tag et kursus i Word og øg effektiviteten

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