Visual Basic for Applications (VBA) on tehokas työkalu automatisoimaan paljon työtä useiden Microsoft Office -sovellusten välillä. Yksi yleinen toiminto, jonka voit automatisoida VBA: n avulla, on Excel-taulukon lisääminen Word-asiakirjaan.
Voit tehdä tämän kahdella tavalla. Ensimmäinen on automatisoida olemassa olevan alueen suora kopiointi ja liittäminen Excelistä Word-asiakirjan uuteen taulukkoon. Toinen on laskelmien suorittaminen Excelissä, uuden taulukon luominen Wordissa ja tulosten kirjoittaminen taulukkoon.
Voit yrittää tallentaa makron tätä varten, mutta makrot antavat sinun automatisoida tehtäviä vain Wordin sisällä. Tässä artikkelissa opit kirjoittamaan VBA-koodin näiden toimintojen automatisoimiseksi Excelin ja Wordin välillä.
Kopioi ja liitä Excel-alue Wordiin VBA: lla
Aloitamme molemmissa esimerkeissä Excel-laskentataulukosta. Tämä näyte on luettelo useiden tuotteiden ostotilauksista.
Oletetaan, että haluat kopioida ja liittää tämän laskentataulukon koko solualue Word-asiakirjaan. Tätä varten sinun on kirjoitettava VBA-toiminto, joka suoritetaan, kun napsautat Kopioi Wordiin -painiketta.
Valitse Kehittäjä valikosta ja valitse Lisää valintanauhan Ohjaimet-ryhmästä. Valitse pudotusvalikosta pudotusvalikosta ActiveX-komponentit.
Piirrä seuraavaksi komentopainike taulukon oikealle puolelle. Voit vaihtaa kuvatekstiksi Kopioi Wordiin napsauttamalla hiiren kakkospainikkeella painiketta ja valitsemalla Ominaisuudet. Vaihda kuvateksti ja voit päivittää kirjasimen koon ja tyylin kirjasimen avulla.
Merkintä: Jos et näe Kehittäjä Excel-valikossa ja lisää se. Valitse Tiedosto, Vaihtoehdot, Mukauta nauhaja valitse Kaikki komennot vasemmasta avattavasta valikosta. Sitten liikkua Kehittäjä vasemmasta ruudusta oikealle ja lopeta valitsemalla OK.
Kirjoita Kopioi ja liitä VBA-koodi
Nyt olet valmis aloittamaan VBA-koodin kirjoittamisen. Aloita kaksoisnapsauttamalla uutta Kopioi Wordiin -painiketta avataksesi koodieditori-ikkunan.
Sinun pitäisi nähdä aliohjelma nimeltä Commandbutton1_Click () alla olevan kuvan mukaisesti.
Haluat kopioida koodin alla olevat osat. Ennen kuin aloitat koodaamisen, sinun on otettava käyttöön Microsoft Word -viitekirjasto, jotta voit hallita Wordia tietokoneellasi VBA: lla.
Valitse koodieditorissa Työkalut valikosta ja valitse Viitteet. Vieritä käytettävissä olevien viitteiden luettelossa alas ja ota käyttöön Microsoft Word 16.0 -objektikirjasto.
Valitse OK ja olet valmis aloittamaan koodauksen. Käymme läpi kunkin koodin osan kerrallaan, joten ymmärrät mitä koodi tekee ja miksi.
Ensin sinun on luotava muuttujat ja objektit, jotka pitävät aluetta ja joiden avulla voit hallita Word-sovellusta.
Dim tblRange As Excel.Range
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordTable As Word.Table
Seuraava koodirivi valitsee tietyn solualueen ja tallentaa sen VBA: n Excel Range -objektiin.
Set tblRange = ThisWorkbook.Worksheets("Sheet1").Range("A2:G44")
Seuraavaksi haluat tarkistaa, onko Word-sovellus jo auki tietokoneessa. Voit viitata Word-sovellukseen käyttämällä erityistä ”class” -viitettä VBA GetObject -komennolla tämän saavuttamiseksi. Jos Wordia ei ole vielä avattu, seuraava rivi käynnistää sen CreateObject-toiminnolla. ”On Error Resume Next” -rivi estää ensimmäisen GetObject-toiminnon virheitä (jos Word ei ole vielä auki) pysäyttämästä ohjelman seuraavan rivin suorittamista.
On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")
Nyt kun Word-sovellus on käynnistetty, haluat tehdä siitä käyttäjän näkyvän ja aktivoida sen käyttöä varten.
WordApp.Visible = True
WordApp.Activate
Seuraavaksi haluat luoda uuden asiakirjan Word-sovellukseen.
Set WordDoc = WordApp.Documents.Add
Lopuksi kopioit ja liität solualueen uuteen taulukkoon Word-asiakirjassa.
tblRange.Copy
WordDoc.Paragraphs(1).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False
Yllä olevan toiminnon kytkimet lisäävät linkittämättömän taulukon käyttämällä lähde-Excel-muotoilua (ei Word-muotoilua) eikä rikkaan tekstin muotoa.
Lopuksi, jotta voit käsitellä asiakirjaa laajempia Excel-alueita, sinun on asennettava uusi taulukko automaattisesti, jotta se mahtuu uuden Word-asiakirjan marginaaleihin.
Set WordTable = WordDoc.Tables(1)
WordTable.AutoFitBehavior (wdAutoFitWindow)
Ja nyt olet valmis! Tallenna tiedosto makroja tukevana Excel-tiedostona (.xlsm-laajennus). Sulje editori, tallenna alkuperäinen Excel-tiedosto uudelleen ja napsauta sitten komentopainiketta nähdäksesi koodisi toiminnassa!
Kirjoita Excel-tulokset Word-taulukkoon, jossa on VBA
Tässä seuraavassa osassa kirjoitat VBA-koodin, joka suorittaa Excelin arvojen laskemisen ja kirjoittaa ne Wordin taulukkoon.
Tässä esimerkissä vedämme 10 rivin arvoa tietoja, laskemme ja kirjoitamme tulokset Word-asiakirjan taulukkoon. Alkuperäinen taulukko sisältää myös neljä saraketta, ja VBA-koodi vetää kymmenen ensimmäistä tietoriviä tältä alueelta.
Aivan kuten viimeisessä osassa, käymme läpi kaikki osiot kerrallaan, joten ymmärrät mitä koodi tekee ja miksi.
Luo ensin muuttujat ja objektit, jotka pitävät tietoja ja antavat sinun kirjoittaa Word-sovellukseen.
Dim tblRange As Excel.Range
Dim WrdRange As Word.Range
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim WordTable As Word.Table
Dim intRows
Dim intColumns
Dim strDate As String
Dim strItem As String
Dim intUnits As Variant
Dim intCost As Variant
Dim intTotal As Variant
Määritä seuraavaksi sarakkeiden ja rivien kokonaismäärä, jonka haluat lukea Excel-alueelta.
intNoOfRows = 10
intNoOfColumns = 5
Toista sama koodi kuin viimeinen osa, joka avaa Wordin, jos se ei ole vielä auki.
On Error Resume Next
Set WordApp = GetObject(class:="Word.Application")
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")
WordApp.Visible = True
WordApp.Activate
Set WordDoc = WordApp.Documents.Add
Seuraavat neljä riviä luovat taulukon vasta avatun Word-asiakirjan sisälle.
Set WrdRange = WordDoc.Range(0, 0)
WordDoc.Tables.Add WrdRange, intNoOfRows, intNoOfColumns
Set WordTable = WordDoc.Tables(1)
WordTable.Borders.Enable = True
Lopuksi seuraava silmukka suorittaa nämä toiminnot:
- Laita kullekin riville tilauspäivä, kohde, yksiköt ja kustannukset muuttujiin
- Laske yksikköajat kustannukset (kokonaismyynti) ja tallenna ne muuttujaan
- Kirjoita jokaisen sarakkeen arvot Word-taulukkoon, mukaan lukien laskettu kokonaismyynti viimeisessä solussa
- Siirry seuraavalle riville ja toista yllä olevat toimenpiteet
Koodi näyttää tältä:
For i = 1 To intNoOfRows
For j = 1 To intNoOfColumns
If j = 1 Then
strDate = tblRange.Cells(i + 1, j).Value
strItem = tblRange.Cells(i + 1, j + 1).Value
intUnits = Val(tblRange.Cells(i + 1, j + 2).Value)
intCost = Val(tblRange.Cells(i + 1, j + 3).Value)
intTotal = intUnits * intCost
End If
Select Case j
Case Is = 1
WordTable.Cell(i, j).Range.Text = strDate
Case Is = 2
WordTable.Cell(i, j).Range.Text = strItem
Case Is = 3
WordTable.Cell(i, j).Range.Text = intUnits
Case Is = 4
WordTable.Cell(i, j).Range.Text = intCost
Case Is = 5
WordTable.Cell(i, j).Range.Text = intTotal
Case Else
End Select
Next
Next
Ensimmäisen osan ”Solut” -toiminto vetää solujen arvot Excelistä. Solut (x, y) tarkoittaa, että se vetää solun arvon rivillä x ja sarakkeessa y.
Viimeisen osan ”Solu” -toiminto kirjoittaa Word-taulukon soluihin samalla rivi- ja sarakemäärityksellä.
Kun olet tallentanut ja suorittanut tämän VBA-koodin, näet tulokset vasta luomassasi Word-asiakirjassa.
Kuten näette, ei ole liian monimutkaista luoda hyödyllistä automaatiota Excelin ja Wordin välille. Se on vain ymmärrys siitä, miten erilaiset ”objektit” toimivat luodakseen ja ohjata sekä Excel- että Word-sovelluksia tietokoneellasi.