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