Hur man sätter in Excel-tabell i Word med VBA
Microsoft Office Microsoft Word Microsoft Microsoft Excel Hjälte Ord / / April 29, 2020
Senast uppdaterad den
VBA är ett mycket kraftfullt verktyg du kan använda för att automatisera mycket arbete mellan flera Microsoft Office-applikationer. En vanlig aktivitet som du kan automatisera med VBA är att infoga en Excel-tabell i ett Word-dokument.
Visual Basic for Applications (VBA) är ett mycket kraftfullt verktyg du kan använda för att automatisera mycket arbete mellan flera Microsoft Office-applikationer. En vanlig aktivitet som du kan automatisera med VBA är att infoga en Excel-tabell i ett Word-dokument.
Det finns två sätt du kan göra detta. Den första är att automatisera en rak kopia och klistra in ett befintligt intervall från Excel till en ny tabell i ett Word-dokument. Den andra är att utföra beräkningar i Excel, skapa en ny tabell i Word och skriva resultaten till tabellen.
Du kan försöka spela in ett makro för att göra detta, men makron låter dig bara automatisera uppgifter inuti Word. I den här artikeln lär du dig att skriva VBA-kod för att automatisera dessa åtgärder mellan Excel och Word.
Kopiera och klistra in ett Excel-intervall i Word med VBA
I båda exemplen börjar vi med ett exempel på Excel-kalkylblad. Detta prov är en lista över inköpsorder för en mängd olika produkter.
Låt oss säga att du vill kopiera och klistra in hela cellutbudet i det här kalkylbladet i ett Word-dokument. För att göra detta måste du skriva en VBA-funktion som körs när du klickar på en "Kopiera till Word" -knapp.
Välj Utvecklaren från menyn och välj Föra in från kontrollgruppen i bandet. I rullgardinsmenyn väljer du knappkontrollen under ActiveX-kontroller.
Dra sedan kommandoknappen på höger sida av arket. Du kan ändra bildtexten till "Kopiera till Word" genom att högerklicka på knappen och välja Egenskaper. Ändra bildtexten, och du kan använda teckensnitt för att uppdatera teckenstorlek och stil.
Notera: Om du inte ser det Utvecklaren i din Excel-meny, lägg sedan till den. Välj Fil, alternativ, Anpassa bandoch välj Alla kommandon från den nedre rullgardinsmenyn. Flytta sedan Utvecklaren från vänster ruta till höger och välj OK för att avsluta.
Skriv kopieringen och klistra in VBA-koden
Nu är du redo att börja skriva VBA-kod. För att komma igång, dubbelklicka på den nya Kopiera till Word för att öppna kodredigeringsfönstret.
Du bör se en subroutine som heter Commandbutton1_Click () som visas nedan.
Du vill kopiera varje avsnitt av koden nedan. Innan du startar kodningen måste du aktivera till Microsoft Word-referensbibliotek för att kontrollera Word på din dator med VBA.
Välj i kodredigeraren Verktyg från menyn och välj referenser. I listan över tillgängliga referenser bläddrar du ned och aktiverar Microsoft Word 16.0 Object Library.
Välj OK så är du redo att börja kodningen. Vi går igenom varje avsnitt av koden åt gången så att du förstår vad den koden gör och varför.
Först måste du skapa variabler och objekt som kommer att innehålla intervallet och låta dig styra Word-applikationen.
Dim tblRange Som Excel. Räckvidd
Dim WordApp som Word. Ansökan
Dim WordDoc som Word. Dokumentera
Dim WordTable som Word. Tabell
Nästa kodrader väljer ett specifikt cellintervall och sparar det i ett Excel Range-objekt i VBA.
Ställ in tblRange = ThisWorkbook. Arbetsblad ( "Blad1") Range. ( "A2: G44")
Därefter vill du kontrollera om Word-applikationen redan är öppen på datorn. Du kan referera till Word-applikationen med hjälp av en speciell "klass" -referens med VBA GetObject-kommandot för att utföra detta. Om Word inte redan har öppnats, kommer nästa rad att starta det med hjälp av CreateObject-funktionen. Linjen "On Error Resume Next" förhindrar eventuella fel från den första GetObject-funktionen (om Word inte redan är öppet) från att stoppa körningen av nästa rad i programmet.
Vid fel Återuppta nästa
Ställ in WordApp = GetObject (klass: = "Word. Ansökan")
Om WordApp inte är något ställer du in WordApp = CreateObject (klass: = "Word. Ansökan")
Nu när Word-programmet startas vill du göra det synligt för användaren och aktivera det för användning.
WordApp. Synlig = sant
WordApp. Aktivera
Därefter vill du skapa ett nytt dokument i Word-applikationen.
Ställ in WordDoc = WordApp. Dokument. Lägg till
Slutligen kopierar du och klistrar in cellerna i en ny tabell i Word-dokumentet.
tblRange. Kopia
WordDoc. Punkterna (1). Ordna. PasteExcelTable _
LinkedToExcel: = Falskt, _
WordFormatting: = Falskt, _
RTF: = False
Växlarna i ovanstående funktion kommer att infoga en icke-länkad tabell med käll Excel-formatering (inte Word-formatering) och inte med rik textformat.
Slutligen, för att hantera Excel-intervall som är bredare än dokumentet, måste du automatiskt fylla på den nya tabellen så att den passar inom marginalen för ditt nya Word-dokument.
Ställ in WordTable = WordDoc. Tabeller (1)
WordTable. AutoFitBehavior (wdAutoFitWindow)
Och nu är du klar! Spara filen som en makroaktiverad Excel-fil (.xlsm-förlängning). Stäng redigeraren, spara den ursprungliga Excel-filen igen och klicka sedan på kommandoknappen för att se din kod i handling!
Skriv Excel-resultat i ett ordtabell med VBA
I det här nästa avsnittet skriver du VBA-kod som gör beräkningar för värden i Excel och skriver dem till en tabell i Word.
I det här exemplet tar vi 10 rader med data, beräknar och skriver resultaten till en tabell i ett Word-dokument. Dessutom kommer den ursprungliga tabellen att innehålla fyra kolumner, och VBA-koden drar de första tio raderna med data från det området.
Precis som i det sista avsnittet kommer vi att gå igenom varje sektion åt gången så att du förstår vad den koden gör och varför.
Skapa först variabler och objekt som innehåller informationen och låter dig skriva till Word-applikationen.
Dim tblRange Som Excel. Räckvidd
Dim WrdRange Som Word. Räckvidd
Dim WordApp som Word. Ansökan
Dim WordDoc som Word. Dokumentera
Dim WordTable som Word. Tabell
Dim intRows
Dim intColumns
Dim strDate Som String
Dim strItem As String
Dim intUnits As Variant
Dim intCost som variant
Dim intTotal Som Variant
Ställ sedan in de totala kolumnerna och raderna som du vill läsa från Excel-intervallet.
intNoOfRows = 10
intNoOfColumns = 5
Upprepa samma kod som det sista avsnittet som öppnar Word om det inte redan är öppet.
Vid fel Återuppta nästa
Ställ in WordApp = GetObject (klass: = "Word. Ansökan")
Om WordApp inte är något ställer du in WordApp = CreateObject (klass: = "Word. Ansökan")
WordApp. Synlig = sant
WordApp. Aktivera
Ställ in WordDoc = WordApp. Dokument. Lägg till
De nästa fyra raderna skapar en tabell i det nyöppnade Word-dokumentet.
Ställ in WrdRange = WordDoc. Område (0, 0)
WordDoc. Tabeller. Lägg till WrdRange, intNoOfRows, intNoOfColumns
Ställ in WordTable = WordDoc. Tabeller (1)
WordTable. Gränser. Aktivera = Sant
Slutligen kommer följande slinga att utföra dessa åtgärder:
- För varje rad lägger du beställningsdatum, objekt, enheter och kostnad i variabler
- Beräkna enhetstiderna kostnad (total försäljning) och lagra den i en variabel
- För varje kolumn skriver du värdena till Word-tabellen, inklusive den beräknade totala försäljningen i den sista cellen
- Gå vidare till nästa rad och upprepa proceduren ovan
Så här ser koden ut:
För i = 1 till IntNoOfRows
För j = 1 till IntNoOfColumns
Om j = 1 Sedan
strDate = tblRange. Celler (i + 1, j) .Värde
strItem = tblRange. Celler (i + 1, j + 1) .Värde
intUnits = Val (tblRange. Celler (i + 1, j + 2) .Värde)
intCost = Val (tblRange. Celler (i + 1, j + 3). Värde)
intTotal = intUnits * intCost
Sluta om
Välj Fall j
Fallet är = 1
WordTable. Cell (i, j). Ordna. Text = strDate
Fallet är = 2
WordTable. Cell (i, j). Ordna. Text = strItem
Fall är = 3
WordTable. Cell (i, j). Ordna. Text = intUnits
Fallet är = 4
WordTable. Cell (i, j). Ordna. Text = intCost
Fallet är = 5
WordTable. Cell (i, j). Ordna. Text = intTotal
Fall annat
Avsluta Välj
Nästa
Nästa
Funktionen "Celler" i den första delen drar cellvärden från Excel. Celler (x, y) betyder att det drar värdet på cellen i rad x och kolumn y.
Funktionen "Cell" i den sista delen skriver till cellerna i Word-tabellen med samma rad- och kolumntilldelningar.
När du har sparat och kört den här VBA-koden ser du resultaten i ditt nyskapade Word-dokument.
Som ni ser är det inte för komplicerat att skapa en användbar automatisering mellan Excel och Word. Det handlar bara om att förstå hur de olika "objekten" fungerar som kan skapa och kontrollera både Excel- och Word-applikationerna på din dator.