21. august 2007 - 10:28Der er
81 kommentarer og 1 løsning
Dynamisk word-skabelon
Jeg vil gerne lave et dynamisk word dokument (skabelon), hvori den skal hente data i excel, afhængige de kriterier man har valgt.
fx. når man åbner skabelonen, skal man først udfylde nogle kriterier, og på baggrund de oplysninger, skal den hente data i excel.
kriterier, der skal udfyldes: salgschef nr: taste nr. (fx. 1-20 - eller dette kan løses ved brug af rullemenu) måned: taste måned (fx. 1-12 / jan-dec eller dette kan løses ved brug af rullemenu)
I excel vil der være 20 arkfaner, hvori hver fane vil indholde data for hver salgschef. Opbygningen for disse arkfane vil være det samme. Dette vil gøre det nemmere, når der skal hentes data. Når man i word har valgt, hvilken salgschef, der skal hentes data fra, skal word kunne hente data fra den arkfane, som indeholde de data som vedr. den valgte salgschef.
Håber at nogen kan komme med en løsning på dette problem
Jeg kan godt maile opbygning (word og excel), så det bedre kan give en forståelse, hvordan det skal bygges op.
Lav de 2 rullelister (comboboxe) til hhv. salgschef og måned. Du bør have et sted i dit Excel-ark (hvis ikke du har det allerede), hvor du har listet alle salgscheferne; gerne i alfabetisk orden.
I vba sætter du en reference til Excel. Herefter laver du et objekt med Excel, som derefter kan åbne (sikkert skjult for brugeren) din Excel-fil. Fyld comboboxen med data fra Excel-arket.
På Events på dine comboxe kan du således tage fat i de data, som du har behov for, ud fra den valgte salgschef/måned, da du har fuld adgang til Excel-arket.
Husk at slutte det hele pænt af igen, så du får lukket Excel-fil og slettet referencen til Excel.
Hvor meget vba kan du selv? Og jo, formålet var at hente data fra det rigtige ark i din Excel-fil. Hvad skal der i øvrigt ske med dem? Skal de blot vises, sættes ind i et dokument eller hvad?
Din kommentar 21/08 13:49:06: Jeg kan finde ud af lave rullelister, men comboboxe der har jeg aldrig prøvet før. Fra andet afsnit og derefter er jeg hoppet af kæden.
Jeg vil gerne lige præcisere, at når man åbne skabelonen/word dokumentet skal der meget gerne dukke et eller andet udfyldning, hvor man så vælge salgschef og måned. Her skal word gerne automatisk hente data i excel (gerne skjult, som du skriver - hvis det kan lade sig gøre). Den første figur i word, skal den hente data for måneden, mens de øvrige tabeller (for mdr. + akk.) skal der hentes data fra jan til juni md. fx.
Håber at dette gav et bedre billede af hvordan det skal løses
Hvis du hopper af fra 2. afsnit og ned, så har jeg en formodning om, at det alligevel bliver mig, der skal "lave det hele". Da jeg egentlig lever af det til hverdag, kommer jeg lidt i konflikt - både med mig selv og mit job - ved at lave en komplet løsning (gratis arbejde). Så hjælpe ja, det vil jeg gerne. Men her skal jeg lave hele løsningen, og det kan/vil jeg ikke.
Det er langt fra et færdigt projekt, men kan hente få rækker fra Excel ind i Word. Det bør du selv kunne udbygge. Og et lille problem som jeg ikke ved hvordan jeg ordner: Efter hentning af data fra Excel, lukkes regnearket igen, men ikke Excel. Hvordan det gøres, ved jeg ikke.
Åbner word dokuemntet og trykker på command knappen - intet sker, knappen bliver markeret. Hvis jeg dobbelt klikker påå knappen - kommer jeg i VB editor.
Gør jeg noget forkert?
Forresten har du mulighed for at pakke filerne ned i zip format - fordi jeg sidder på arbejdet, hvor jeg ikke har mulighed for at intallere programmer på computern (sidder på en tynd client). Det vil være super.
"Efter hentning af data fra Excel, lukkes regnearket igen, men ikke Excel. Hvordan det gøres, ved jeg ikke." - muligvis word-hajen kan bidrage med noget
Jeg takker for dit ihærdigt forsøg for at hjælpe mig.
Det kan du tro, at jeg kan. Forudsat, at der er sat et objekt med Excel-applikationen (og det går jeg ud fra, at der er), så kan følgende bruges.
objExcel.Quit
Her har jeg selvfølgelig forudsat, at objExcel tidligere er sat til Excel-applikationen. Den skal selvfølgelig lige rettes til iht. akyhnes kode/objekt (som jeg ikke har set).
kll1978: Jeg har altså ikke bygget noget fejlsikring ind i koden. Findes arket, o.s.v. Hvilke rækker der skal hentes, kan jeg ikke lige gennemskue. Ligeledes ved jeg ikke hvordan tabelnavne findes, hvis de overhovedet har et navn i Word. Derfor koden Documents("Verbal rapport.doc").Tables(1).Select.
Det er mit første Word VBA projekt, men vil gerne prøve at hjælpe hvis jeg kan.
-> akyhne. Tabelkolonner/rækker har ingen navne i Word, men findes som udgangspunkt ved at tælle række/kolonne. Men... :-) man kan i Word sætte et bogmærke i en celle, kolonne, række osv. og bruge den som markør til at aflæse hhv. række/kolonnenummer, hvis ens kode skal være dynamisk.
Private Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Then test (ListBox1.ListIndex + 1) UserForm1.Hide Else MsgBox "Vælg en sælger!" End If End Sub
Private Sub UserForm_Click() sælgere = Array("Sælger1", "Sælger2", "Sælger3", "Sælger4", "Sælger5") For I = 0 To UBound(sælgere) ListBox1.AddItem sælgere(I) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Then test (ListBox1.ListIndex + 1) UserForm1.Hide Else MsgBox "Vælg en sælger!" End If End Sub
Private Sub UserForm_Activate() sælgere = Array("Sælger1", "Sælger2", "Sælger3", "Sælger4", "Sælger5") For I = 0 To UBound(sælgere) ListBox1.AddItem sælgere(I) Next End Sub
Private Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Then test (ListBox1.ListIndex + 1) 'Vælger arknr. i Excel UserForm1.Hide Else MsgBox "Vælg en sælger!" End If End Sub
nu har jeg lavet den listbox og har fulgt din vejledning. I første omgnag der kører den som den skal, men hvis man igen trykker på knappen, bliver den tilføjes 5 yderlige sælgere; dvs. i listen vises der sælgere 1-5 og sælgere 1-5. Hvis man vælger "de tilføjet" sælgere, så vil den ikke overføre data, den åbner bare excel filen og intet sker.
hvordan indsætter jeg data i den første figur, hvor der er fire bokse. jeg ved at jeg skal lave bogmærker, og jeg har fundet ud af, hvordan det skal gøres, men koden til at den automatisk hente data i excel for en bestem måned, som man vælge i formularen. - wordhajen kan måske give nogle tips
Private Sub UserForm_Activate() If ListBox1.ListCount > 0 Then Exit Sub 'Hvis sælgere er indsat, skippes ny indsættelse sælgere = Array("Sælger1", "Sælger2", "Sælger3", "Sælger4", "Sælger5") For I = 0 To UBound(sælgere) ListBox1.AddItem sælgere(I) Next I = I - 1 ListBox1.Height = I * 18 End Sub
Jeg går ud fra, at akyhnes kode henter de data fra Excel, som der er behov for, og at du derfor "blot" har behov for at få fyldt data ind i dine bogmærker. Det gøres på følgende måde:
Antagelse: At du har et bogmærke, der hedder SalgMåned, som skal udfyldes.
ActiveDocument.Bookmarks("SalgMåned").Range.Text = "det der er hentet fra Excel"
Vær opmærksom på, at koden fejler, hvis du ikke har et bogmærke, der hedder "SalgMåned" (giver fejl nr. 5941).
Der skal vel ikke rettes tekst, men indsættes tekst? Det er i øvrigt lige meget, om det er autofigurer eller ej, hvis du/kll1978 bruger bogmærker i autofigurerne (hvilket jeg ville gøre) til at bestemme et "her-skal-udfyldes-punkt".
Argh - hader Drawing Canvas. Har du mulighed for at sætte et bogmærke rundt om x,x? (markér x,x, klik på Ctrl+Shift+F5, skriv et navn til bogmærket - ingen mellemrum, specialtegn osv.).
1. Vælg Salgschef 2. Vælg den aktuelle måned, som der skal hentes data fra excel til autofiguren. (har fundet ud at det skal være bogmærke, men hvor pokker det skal kodes ind, der er jeg hel bleg. 3. Tabellerne: der går den automatisk henter data, uden at der skal vælges noget (der er jeg med på hvordan koden skal være.
Dvs. brugeren skal kun tage stilling til to ting. Salgschef og måned.
kll1978: Du kunne sagtens sætte bogmærker på alle celler i tabellerne, men der vil det være nemmere at bruge metoden jeg lavede til dig.
Men hensyn til at skifte værdien i dine turkis (ikke grønne ;-)) bokse, skal du markere hvert "x,x" tekst, og give dem et separat bogmærke. Du kan så bruge 28/08-2007 21:58:31 til at rette teksten.
Der er ingen grund til at sætte ranget som i kommentaren 21:58:31, medmindre du efterfølgende vil sætte bogmærket rundt om det nu indsatte tal/tekst, hvilket er nødvendigt, hvis man skal kunne udfylde det samme område flere gange. Ellers er det fuldt ud tilstrækkeligt at bruge den kode, som jeg har i kommentaren 20:51:55.
Private Sub UserForm_Activate() If ListBox1.ListCount > 0 Then Exit Sub 'Hvis sælgere er indsat, skippes ny indsættelse sælgere = Array("Sælger1", "Sælger2", "Sælger3", "Sælger4", "Sælger5") For I = 0 To UBound(sælgere) ListBox1.AddItem sælgere(I)
Private Sub CommandButton1_Click() If ListBox1.ListIndex > -1 Then test (ListBox1.ListIndex + 1) 'Vælger arknr. i Excel UserForm1.Hide Else MsgBox "Vælg en sælger!" End If End Sub Next I = I - 1 ListBox1.Height = I * 18 End Sub
Hvis jeg gerne vil have Combobox istedet for ListBox, hvad skal koden så være?
For I = 1 To 12 Documents("Verbal rapport.doc").Tables(1).Cell(2, I + 1).Select Selection.Text = Round(Akk(1, I) * 100, 2) Selection.Font.Name = "Verdana" Selection.Font.Size = 8
Next
For I = 1 To 12 Documents("Verbal rapport.doc").Tables(2).Cell(2, I + 1).Select Selection.Text = Round(OmsAkk(1, I) * 100, 2) Selection.Font.Name = "Verdana" Selection.Font.Size = 8 Documents("Verbal rapport.doc").Tables(2).Cell(3, I + 1).Select Selection.Text = Round(OmsAkk(1, I) * 100, 2) Selection.Font.Name = "Verdana" Selection.Font.Size = 8
Next
For I = 1 To 12 Documents("Verbal rapport.doc").Tables(3).Cell(2, I + 1).Select Selection.Text = Round(LønomkAkk(1, I) * 100, 2) Selection.Font.Name = "Verdana" Selection.Font.Size = 8
Next
End Function
Jeg får besked når jeg kører denne "Run time error 13: Type mismatch
Området "Selection.Text = Round(Akk(1, I) * 100, 2)" bliver markeret med gult.
Jeg har prøve at kigge tilbage til tidligere koder, og prøve kørt dem, og uden problmer. Men når jeg tilføjes mine ændringer, så vil den ikke køre som den skal.
Den fejler blot fordi August til December ikke indeholder nogen værdi. Man kan ikke afrunde ingenting til tal med 2 decimaler ;-). Jeg laver en løsning.
Den med ændringen af bogmærkerne skal jeg lige kigge nærmere på, da bogmærket bliver slettet når man ændrer værdien af det med koden ActiveDocument.Bookmarks("ExtOmsProcent").Range.Text = "2,1"
turkise bokse skal hente data fra det samme datagrundlag som tabellerne
fx. hvis man i formularen - via. fx en combobox/liste vælger juni måned, skal der hente data fra kolonne G => Ekstern oms. (G7) Pers. omk (G8) Markedsf.omk (G9) Øvrige omk. (G10)
Lad os sige maaned er 7: Spring til A7. Vælg cellen der er 0 celler nedad og maaned (som er 7) celler til højre for. Resultat celle G7. Fra G7 - vælg range("A1:A4"), altså G7:G10.
Så det er ikke range("A1:A4") i forhold til arkets top, men i forhold til det range der er angivet før .range("A1:A4")
Range("A1").range("A1:A4").select vil vælge celle A1 til A4 Range("G1").range("A1:A4").select vil vælge celle G1 til G4 Range("B2").Offset(-1, 3).range("A1:A4").Select vil vælge E1 til E4
Hvis du i VBA editoren går op og vælger "view" -> "Locals Window", kan du indsætte debug points som stopper koden et bestemt sted. I "Locals" vinduet, kan du så se værdierne for dine variabler. Det kan give en stor hjælp ved udvikling og fejlsøgning.
Dim rngRange Bogmaerker = Array("", "ExtOmsProcent", "MarkedsfOmkProcent", "OvrOmkProcent", "LoenOmkProcent") For S = 1 To UBound(MaanedsStatistik) If ActiveDocument.Bookmarks.Exists(Bogmaerker(S)) = True Then Set rngRange = ActiveDocument.Bookmarks(Bogmaerker(S)).Range If IsNumeric(MaanedsStatistik(S, 1)) Then rngRange.Text = Round(MaanedsStatistik(S, 1) * 100, 2) Else rngRange.Text = MaanedsStatistik(S, 1) End If rngRange.Bookmarks.Add Bogmaerker(S) Else Bogmærkefejl = Bogmærkefejl & "Bogmærket " & Bogmaerker(S) & " blev ikke fundet!" & Chr(10) End If Set rngRange = Nothing
De data der bliver sat ind bliver gange med 100, men jeg har nogle nøgletal, som ikke skal ganges, hvad heddes koden så?
sorry, jeg ikke har vendt tilbage - har desværre haft lidt travlt og har derfor ikke set på det. Kan du ikke give et svar, så du kan få dine point i første omgang.
Jeg vender tilbage når jeg lige får tid til at kigge på det. På forhånd mange tak for din hjælp og word-haj.
Ok, og tak for point. Det var udfordrende at forske lidt i Word VBA.
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.