Sådan indsættes Excel-tabel i Word med VBA
Microsoft Office Microsoft Ord Microsoft Microsoft Udmærker Sig Helt Ord / / April 29, 2020
Sidst opdateret den
VBA er et meget kraftfuldt værktøj, du kan bruge til at automatisere en masse arbejde mellem flere Microsoft Office-applikationer. En almindelig aktivitet, du kan automatisere ved hjælp af VBA, er at indsætte en Excel-tabel i et Word-dokument.
Visual Basic for Applications (VBA) er et meget kraftfuldt værktøj, du kan bruge til at automatisere en masse arbejde mellem flere Microsoft Office-applikationer. En almindelig aktivitet, du kan automatisere ved hjælp af VBA, er at indsætte en Excel-tabel i et Word-dokument.
Der er to måder, du kan gøre dette på. Den første er at automatisere en lige kopi og indsæt af et eksisterende interval fra Excel til en ny tabel i et Word-dokument. Det andet er at udføre beregninger i Excel, oprette en ny tabel i Word og skrive resultaterne til tabellen.
Du kan prøve optag en makro at gøre dette, men makroer giver dig kun mulighed for at automatisere opgaver inde i Word. I denne artikel lærer du, hvordan du skriver VBA-kode for at automatisere disse handlinger mellem Excel og Word.
Kopier og indsæt et Excel-interval i Word med VBA
I begge eksempler starter vi med et eksempel på et Excel-regneark. Denne prøve er en liste over indkøbsordrer for en række produkter.
Lad os sige, at du gerne vil kopiere og indsætte hele celleområdet i dette regneark i et Word-dokument. For at gøre dette skal du skrive en VBA-funktion, der kører, når du klikker på en "Kopier til Word" -knap.
Vælg Udvikler fra menuen og vælg Indsæt fra kontrolgruppen i båndet. I rullelisten skal du vælge knapkontrol under ActiveX-kontroller.
Træk derefter kommandoknappen på højre side af arket. Du kan ændre overskrift til "Kopier til Word" ved at højreklikke på knappen og vælge Ejendomme. Skift billedtekst, og du kan bruge skrifttype til at opdatere skriftstørrelse og stil.
Bemærk: Hvis du ikke kan se det Udvikler i din Excel-menu, og tilføj den derefter. Vælg Fil, Muligheder, Tilpas bånd, og vælg Alle kommandoer fra venstre rulleliste. Flyt derefter Udvikler fra venstre rude til højre og vælg OK for at afslutte.
Skriv kopien og indsæt VBA-koden
Nu er du klar til at begynde at skrive VBA-kode. For at komme i gang skal du dobbeltklikke på den nye Kopier til Word for at åbne vinduet med kodeditor.
Du skal se en subroutine kaldet Commandbutton1_Click () som vist nedenfor.
Du ønsker at kopiere hver sektion af koden nedenfor. Før du begynder at kode, skal du aktivere til Microsoft Word-referencebibliotek for at kontrollere Word på din computer ved hjælp af VBA.
I kodeditoren skal du vælge Værktøj fra menuen og vælg Referencer. I listen over tilgængelige referencer skal du rulle ned og aktivere Microsoft Word 16.0 Object Library.
Vælg OK, og du er klar til at begynde at kode. Vi gennemgår hvert afsnit af koden ad gangen, så du forstår, hvad den kode gør, og hvorfor.
Først skal du oprette de variabler og objekter, der holder området, og giver dig mulighed for at kontrollere Word-applikationen.
Dim tblRange Som Excel. Rækkevidde
Dim WordApp som Word. Ansøgning
Dim WordDoc som Word. Dokument
Dim WordTable som Word. Bord
Den næste kodelinie vælger et specifikt område af celler og gemmer det i et Excel Range-objekt i VBA.
Indstil tblRange = DenneWorkbog. Arbejdsark ( "Ark1") Range. ( "A2: G44")
Dernæst vil du kontrollere, om Word-applikationen allerede er åben på computeren. Du kan referere til Word-applikationen ved hjælp af en speciel "klasse" -reference med VBA GetObject-kommandoen for at udføre dette. Hvis Word ikke allerede er åbnet, starter den næste linje det ved hjælp af CreateObject-funktionen. Linjen "On Error Resume Next" forhindrer enhver fejl fra den første GetObject-funktion (hvis Word ikke allerede er åben) i at stoppe udførelsen af den næste linje i programmet.
Ved fejl Genoptag næste
Indstil WordApp = GetObject (klasse: = "Word. Ansøgning")
Hvis WordApp ikke er noget, skal du indstille WordApp = CreateObject (klasse: = "Word. Ansøgning")
Nu hvor Word-applikationen er startet, vil du gøre det synligt for brugeren og aktivere det til brug.
WordApp. Synlig = sandt
WordApp. Aktiver
Dernæst ønsker du at oprette et nyt dokument i Word-applikationen.
Indstil WordDoc = WordApp. Dokumenter. Tilføje
Endelig kopierer og indsætter du området med celler i en ny tabel i Word-dokumentet.
tblRange. Kopi
WordDoc. Afsnit (1) .Range. PasteExcelTable _
LinkedToExcel: = Falsk, _
WordFormatting: = Falsk, _
RTF: = False
Skiftene i ovenstående funktion indsætter en ikke-linket tabel ved hjælp af Excel-formatering (ikke Word-formatering) og ikke ved hjælp af rich text-format.
Til sidst, for at håndtere Excel-intervaller, der er bredere end dokumentet, skal du autotilpasse den nye tabel, så den passer inden for margenerne i dit nye Word-dokument.
Indstil WordTable = WordDoc. Borde (1)
WordTable. AutoFitBehavior (wdAutoFitWindow)
Og nu er du færdig! Gem filen som en makroaktiveret Excel-fil (.xlsm-udvidelse). Luk redigeringsprogrammet, gem den originale Excel-fil igen, og klik derefter på din kommandoknap for at se din kode i handling!
Skriv Excel-resultater i en ordetabel med VBA
I dette næste afsnit skriver du VBA-kode, der udfører beregninger på værdier i Excel og skriver dem til en tabel i Word.
I dette eksempel trækker vi 10 rækker med data, beregner og skriver resultaterne til en tabel i et Word-dokument. Den originale tabel vil også indeholde fire kolonner, og VBA-koden trækker de første ti rækker med data fra dette interval.
Ligesom i det sidste afsnit gennemgår vi hvert afsnit ad gangen, så du forstår, hvad den kode gør, og hvorfor.
Opret først variabler og objekter, der indeholder dataene, og giver dig mulighed for at skrive til Word-applikationen.
Dim tblRange Som Excel. Rækkevidde
Dim WrdRange Som Word. Rækkevidde
Dim WordApp som Word. Ansøgning
Dim WordDoc som Word. Dokument
Dim WordTable som Word. Bord
Dim intRows
Dim intColonner
Dim strDate som streng
Dim strItem som streng
Dim intUnits As Variant
Dim intCost som variant
Dim intTotal Som Variant
Indstil derefter de samlede kolonner og rækker, du vil læse fra Excel-området.
intNoOfRows = 10
intNoOfColumns = 5
Gentag den samme kode som det sidste afsnit, der åbner Word, hvis det ikke allerede er åbent.
Ved fejl Genoptag næste
Indstil WordApp = GetObject (klasse: = "Word. Ansøgning")
Hvis WordApp ikke er noget, skal du indstille WordApp = CreateObject (klasse: = "Word. Ansøgning")
WordApp. Synlig = sandt
WordApp. Aktiver
Indstil WordDoc = WordApp. Dokumenter. Tilføje
De næste fire linjer opretter en tabel inde i det nyåbnede Word-dokument.
Indstil WrdRange = WordDoc. Område (0, 0)
WordDoc. Borde. Tilføj WrdRange, intNoOfRows, intNoOfColonner
Indstil WordTable = WordDoc. Borde (1)
WordTable. Grænser. Aktivér = sandt
Endelig udfører følgende loop disse handlinger:
- For hver række skal du placere ordredato, artikel, enheder og omkostninger i variabler
- Beregn enhedstidsomkostninger (samlet salg) og gem det i en variabel
- For hver søjle skal du skrive værdierne til Word-tabellen, inklusive det beregnede samlede salg i den sidste celle
- Gå videre til næste række, og gentag proceduren ovenfor
Sådan ser den kode ud:
For i = 1 Til intNoOfRows
For j = 1 Til intNoOfColonner
Hvis j = 1 Derefter
strDate = tblRange. Celler (i + 1, j) .værdi
strItem = tblRange. Celler (i + 1, j + 1) .værdi
intUnits = Val (tblRange. Celler (i + 1, j + 2) .værdi)
intCost = Val (tblRange. Celler (i + 1, j + 3) .værdi)
intTotal = intUnits * intCost
Afslut Hvis
Vælg sag j
Sag er = 1
WordTable. Celle (i, j) .Range. Tekst = strDate
Sag er = 2
WordTable. Celle (i, j) .Range. Tekst = strItem
Sag er = 3
WordTable. Celle (i, j) .Range. Tekst = intUnits
Sag er = 4
WordTable. Celle (i, j) .Range. Tekst = intCost
Sag er = 5
WordTable. Celle (i, j) .Range. Tekst = intTotal
Sag ellers
Slut Vælg
Næste
Næste
Funktionen "Celler" i den første del trækker i celleværdier ud af Excel. Celler (x, y) betyder, at det trækker værdien af cellen i række x og kolonne y.
Funktionen "Celle" i den sidste del skriver til cellerne i Word-tabellen ved hjælp af de samme række- og kolonnetildelinger.
Når du gemmer og kører denne VBA-kode, ser du resultaterne i dit nyoprettede Word-dokument.
Som du kan se, er det ikke for kompliceret at oprette nogle nyttige automatiseringer mellem Excel og Word. Det er bare et spørgsmål om at forstå, hvordan de forskellige "objekter" fungerer, der kan skabe og kontrollere både Excel- og Word-applikationerne på din computer.