Hantera inbäddade Word-dokument i Excel
Här visas några tips för hur vi kan hantera inbäddade Word-dokument i arbetsblad.Excel har många kvalitéer men när det gäller att skriva matchar inte Excel Word i alla avseenden. Det kan därför vara på sin plats att infoga ett Word-dokument istället. Använder vi oss av en rapporteringsmall kan ett infogat Word-dokument avsevärt öka kvalitén i mallen.
I det första exemplet visas hur vi mha VBA kan infoga ett Word-dokument i ett arbetsblad. (Detta kan ju också ske manuellt via kommandot Infoga | Objekt...)
I det andra exemplet demonstreras hur vi kan aktivera dokumentet och göra det tillgängligt för indata från användarna.
Slutligen i det tredje exemplet belyses hur vi kan verifiera om ett inbäddat Word-dokument har fyllts med text eller inte.
Intressant här är att det krävs att vi skapar Word-objekt för att läsa dokumentet.
Option Explicit
'© 2004 Alla rättigheter XL-Dennis
Private wbBook As Workbook
Private wsSheet As Worksheet
Sub Add_Word_Object()
Dim rnStart As Range
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Blad1")
Application.ScreenUpdating = False
With wsSheet
Set rnStart = .Range("D5")
rnStart.Select 'Startcell för Word-objektet.
.OLEObjects.Add ClassType:="Word.Document.8"
End With
Application.ScreenUpdating = True
End Sub
Sub Activate_Word_Object()
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Blad1")
'Excel kan ibland visa irrelevanta meddelande
'i samband med att objekt aktiveras.
Application.DisplayAlerts = False
With wsSheet
.Unprotect Password:="Hemligt"
.OLEObjects("wd_Objekt").Select
'Här aktiveras Word-dokumentet.
Selection.Verb Verb:=xlPrimary
.Protect Password:="Hemligt"
End With
Application.DisplayAlerts = True
End Sub
Sub Check_Contents_Word_Object()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Blad1")
On Error Resume Next
Err.Number = 0
Set wdApp = GetObject("Word.Application")
If Err.Number = 429 Then
Set wdApp = CreateObject("Word.Application")
Err.Number = 0
End If
With wsSheet
.Unprotect Password:="Hemligt"
Set wdDoc = .OLEObjects("wd_Objekt").Object
'Om dokumentet är tomt är längden lika med 1.
If Not Len(wdDoc.Content) > 1 Then
.Protect Password:="Hemligt"
MsgBox "Word-objektet saknar innehåll!", vbCritical
Else
.Protect Password:="Hemligt"
MsgBox "Word-objektet har ett innehåll.", vbInformation
End If
End With
Set wdDoc = Nothing
Set wdApp = Nothing
End Sub