Beheer Excel vanuit Word met VBA in Microsoft Excel 2010

Anonim

Soms moeten we gegevens van een Word-document naar een Excel-bestand kopiëren. We kunnen dit heel gemakkelijk doen met een macro in alle versies van Office. De macro opent een bestaand / nieuw Excel-bestand, kopieert de inhoud en slaat het bestand op en sluit het. Laten we eens kijken hoe dit wordt gedaan.

Optie expliciet


Sub OpenAndReadWordDoc()
Dim string als string
Dim p zo lang, r zo lang
Dim wrdApp als object, wrdDoc als object
Dim wb als werkboek
Dim trange als variant

Stel wb = Werkmappen in.Toevoegen
Met wb.Werkbladen(1).Bereik(“A1”)
.Value = "Word-documentinhoud:"
.Lettertype.Vet = True
.Lettergrootte = 14
.Offset(1,0).Selecteren
Eindigt met

r = 3

Stel wrdApp = CreateObject ("Word.Applicatie") in
wrdApp.Visible = True
Stel wrdDoc = wrdApp.Documents.Open ("B:\Test\MyNewWordDoc.docx") in

Met wrdDoc
Voor p = 1 tot .Alinea's.Aantal
Set trange = .Bereik(Start:=.Alinea's(p).Bereik.Start, _
Einde:=.Alinea's(p).Bereik.Einde)
tString = trange.Text
tString = Links(tString, Len(tString)-1)

Als Instr(1, tString,”1”) > 0 Dan
wb.Werkbladen(1).Bereik(“A” & r).Waarde = tString
r=r+1
Stop als

Volgende pagina
.Dichtbij

Eindigt met

wrdApp.Stop
Stel wrdDoc = Niets in
Stel wrdApp = Niets in
wb.Saved = True

Einde sub

Om de bovenstaande code naar uw bestand te kopiëren,

  • Druk op Alt + F11 op het toetsenbord
  • Aan de linkerkant ziet u Microsoft Excel Objects
  • Klik met de rechtermuisknop en selecteer Invoegen
  • Klik vervolgens op Module
  • Kopieer de code naar het codevenster aan de rechterkant

Laten we nu eens kijken hoe deze code werkt -

Eerst declareren we de variabelen die we nodig hebben -tstring als een string om tekst vast te houden (we zullen later zien welke tekst). 2 variabelen "p" & "r" als tellers. Deze zijn van het "lange" type. Dan hebben we de 2 objectvariabelen wrdApp en wrdDoc. wrdApp is het woordtoepassingsobject en wrdDoc is het Word-documentobject. Wb is onze werkmapvariabele voor de nieuwe werkmap die in de code is gemaakt. Als u een bestaande werkmap opent, kunt u in plaats daarvan deze variabele daaraan toewijzen. De laatste variabele is het variabele type variabele dat de inhoud zal hebben die moet worden overgebracht van het woord doc naar het Excel-bestand.

Stel wb = Werkmappen in.Toevoegen

Hiermee wordt de nieuwe werkmap toegewezen aan de variabele wb. Als u geen nieuwe werkmap wilt toevoegen maar een bestaande werkmap wilt openen, kunt u deze regel als volgt wijzigen:
Stel wb in - Werkmappen.Open ("B:\Test\File1.xlsx")

Met wb.Werkbladen(1).Bereik(“A1”)
.Value = "Word-documentinhoud:"
.Lettertype.Vet = True
.Lettergrootte = 14
.Offset(1,0).Selecteren
Eindigt met

De With wb.Worksheets(1).range(“A1”) is een snelle manier om ernaar te verwijzen. U hoeft het dus niet voor elk van de coderegels tussen de instructies With en End with te herhalen.

Deze regels code worden in de tekst "Word Document Inhoud:" met een vet lettertype en lettergrootte 14 in cel A1 van de 1NS werkblad in de nieuwe werkmap. En dan .Offset(1,0).Select selecteert de volgende rij.

r = 3

De variabele "r" krijgt een waarde 3 toegewezen, omdat dit de startrij in het Excel-bestand is voor de gegevens die uit het Word-document moeten worden gekopieerd.

Stel wrdApp = CreateObject ("Word.Applicatie") in

Als Word al in uw systeem draait,Object makenzal een nieuw exemplaar van Word maken. Dus deze regel wijst de objectvariabele wrdApp toe aan de Word-toepassing die u later in de code kunt gebruiken.

wrdApp.Visible = True

Het nieuw gemaakte exemplaar van Word is niet zichtbaar wanneer het wordt gemaakt. Om het zichtbaar te maken, moet je wrdApp.Visible = True instellen zodat het zichtbaar is.

Stel wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx") in

We hebben de nieuwe instantie van de woordtoepassing gemaakt, maar we hebben nog geen brondocument voor Word geopend. Dus deze opdracht opent het Word-document. Het object wrdDoc is toegewezen aan dit document zodat we het later in de code kunnen gebruiken.

Met wrdDoc… .Eindig met

Dit is onze "With"-lus die volledig zal werken met het wrdDoc-object. Zodra u deze lus opent, hoeft u de tekst "wrdDoc" niet opnieuw in deze lus te herhalen. U kunt direct beginnen met de punt (“.”) voor objecten die betrekking hebben op wrdDoc. Deze lus eindigt met de Eindigt met uitspraak. Nadat het End With-statement is ingevoerd, kunt u niet meer naar de objecten na wrdDoc verwijzen met alleen de ".".

Voor p = 1 tot .Alinea's.Aantal

Dit is de "For"-lus die loopt vanaf de 1NS laatste alinea's in het word-document. Het Word-bestand dat de gegevens bevat, heeft 100 regels met informatie, elk opgeslagen als een afzonderlijke alinea. De lus wordt verhoogd van 1 tot 100 en kopieert de alinea's. Als er bepaalde voorwaarden zijn ingesteld, wordt het kopiëren en plakken op die voorwaarden gebaseerd.

Set trange = .Bereik(Begin:=.Alinea's(p).Bereik.Begin, Einde:=.Alinea's(p).Bereik.Einde)

Dit wijst het begin en einde van elke alinea toe aan het bereik naarmate de lus toeneemt.

tString = trange.tekst
tString = Links(tString,len(tString)-1)

Eerst wordt de tekst uit trange doorgegeven aan TString. Dan heeft elke alinea een alinea-teken aan het einde van de zin. Dit wordt verwijderd met de functie Links. Vanaf de linkerkant worden alle tekens behalve de laatste opgeslagen in de variabele tString.

Als Instr(1, tString, “1”) > 0 Dan
wb.Werkbladen(1).Bereik(“A” & r).Waarde = tString
r=r+1
Stop als

Deze ALS-functie controleert of de tekst in tString het nummer 1 bevat. Als het waar is, kopieert het de inhoud van tString naar de volgende beschikbare rij in de werkmap. “r” had eerst een waarde van 3. Met r=r+1 verhogen we deze met 1, zodat de volgende invoer onder de vorige invoer kan worden geplaatst.

Volgende pagina
.Dichtbij

De Volgende pagina regel code wordt verhoogd naar de volgende alinea.

.Dichtbij sluit het document zodra aan alle alinea's is gewerkt. Dit is de uitvoer die we in het Excel-bestand krijgen -

U zult zien dat alleen die alinea's die nummer 1 ergens in het nummer bevatten, in de uitvoer worden opgenomen.

wrdApp.Quit
Stel wrdDoc = Niets in
Stel wrdApp = Niets in
wb.Saved = True

wrdApp.Quit sluit het woord Application. Set wrdDoc = Nothing en Set wrdApp = Nothing zal het geheugen van deze 2 objectvariabelen vrijgeven en op Nothing zetten. wb.Saved = True slaat de werkmap op.

Met bovenstaande code kunnen we bepalen welke gegevens van het Word-bestand naar het Excel-bestand moeten worden gekopieerd.