Hämta data från stängda arbetsböcker


Istället för att hämta data från stängda arbetsböcker med hjälp av ADO/SQL kan vi nyttja den inbyggda funktionen ExecuteExcel4Macro i Excel.

Fördelen med denna metod, jämfört med ADO, är att ingen overhead skapas i VB-projekten då inget externt objektbibliotek behöver anropas och refereras till.

Nackdelen är att metoden nyttjar enbart engelska funktioner med kommatecknet som argumentavskiljare samt kan endast användas med US-datum. Därtill krävs att vi på förhands vet hur stora cellområdena är såvida inte dynamiska namn används.

För att få till fungerande lösningar behöver vi förstå skillnaden mellan numeriska (tal) och alfanumeriska värden (text). För alfanumeriska uttryck måste vi använda oss av följande struktur: ""uttryck"" men ingenting för numeriska värden.

Det gör i sin tur att formlerna för metoden kan bli både långa och svårtydda.

Följande förutsättningar gäller för exemplet ifråga:

 

 

 Om ett felmeddelande erhålls vid kopiering till VBA-modul så läs mer här»
 

 

(© 2002 - 2005 All rights Colo - Used by permission)

Option Explicit

 

Sub Hamta_Data_Stangda_Arbetsbocker()

  '© 2005 Alla rättigheter XL-Dennis

  Dim wbBook As Workbook

  Dim wsTarget As Worksheet

  Dim wsSource As Worksheet

  Dim stFilename As String

  Dim i As Long, j As Long

  Dim vaObjects As Variant

 

  Set wbBook = ThisWorkbook

  Set wsTarget = wbBook.Worksheets(1)

 

  With wsTarget

    'Läser in uppslagsvärdena till arrayen.

    vaObjects = .Range(.Range("A2"), .Range("A65536").End(xlUp)).Value

  End With

 

  For j = 1 To 3

    'Skapa källfilernas namn.

    stFilename = "'c:\Källor\[S" & j & ".xls]Blad1'!R1C1:R6C2,2,0"

    For i = 1 To UBound(vaObjects)

      'Slår upp värdena och skriver de funna värdena till arbetsbladet.

      With wsTarget

        .Cells(1 + i, 1).Offset(0, j).Value = _

            Application.ExecuteExcel4Macro("VLOOKUP(""" & _

            vaObjects(i, 1) & """," & stFilename & ")")

      End With

    Next i

  Next j

End Sub