Importera textfiler med
fler poster än 65536
(ADO & DAO & FSO)

 

I detta tips visas hur vi kan importera data från textfiler där antalet poster överstiger ett arbetsblad totala rader om 65536.

ADO-exemplet är testat med en textfil innehållande 242000 rader och 1 kolumn i versionerna  2000 och 2002. Sammantaget skapas 4 st arbetsblad.

DAO-exemplet är testat med en textfil innehållande 242000 rader och 1 kolumn i versionerna 97,  2000 och 2002. Sammantaget skapas 4 st arbetsblad.

 

Se också följande tips:


Följande procedur fungerar endast i versionerna 2000 och 2002. Detta då vi här använder oss av metoden CopyFromRecordset i ADO, vilken inte är tillgänglig i 97. För att exemplet ska fungera krävs att en referens sätts till Microsoft ADO och till Microsoft Scripting Runtime.

Option Explicit

 Sub Importera_Stora_Textfiler_ADO()

   '© 2003 Alla rättigheter XL-Dennis

   Dim stSokVag As String, stFilnamn As String, stHamtaFil As String

   Dim cnt As ADODB.Connection, rst As ADODB.Recordset,

   Dim fsoObj As Object

 

   'Användarna väljer textfil för import.

   stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...")

 

   'Om användaren klickar på Avbryt-knappen.

   If stHamtaFil = "Falskt" Then Exit Sub

   Application.ScreenUpdating = False

 

   'Här används s k late binding.

   Set fsoObj = CreateObject("Scripting.FileSystemObject")

   stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path

   stFilnamn = fsoObj.GetFile(stHamtaFil).Name

 

   'Öppnar en ADO-anslutning till den angivna mappen

   Set cnt = CreateObject("ADOdb.Connection")

   cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

         "Data Source=" & stSokVag & ";" & _

         "Extended Properties=""text;HDR=Yes;FMT=Delimited"""

 

   Set rst = CreateObject("ADOdb.Recordset")

 

   'Öppnar den valda textfilen och importera den till Excel.

   rst.Open "SELECT * FROM " & stFilnamn, cnt, 3, 1, 1

 

   While Not rst.EOF

      Worksheets.Add

      ActiveSheet.Range("A1").CopyFromRecordset rst, 65536

   Wend

 

   rst.Close

   cnt.Close

  
   Set rst = Nothing

   Set cnt = Nothing

    Application.ScreenUpdating = True

 End Sub

 

Följande procedur fungerar i versionerna 97, 2000 och 2002. Här använder vi oss av ADO och vi behöver därför ange referenser till Microsoft DAO 3.51 samt till Microsoft Scripting Runtime.

Option Explicit  

Sub Importera_Stora_Textfiler_DAO()

   '© 2002 Alla rättigheter XL-Dennis

   Dim stSokVag As String, stFilnamn As String, stHamtaFil As String

   Dim Db As DAO.Database

   Dim Rst As DAO.Recordset

   Dim fsoObj As Object

 

   'Användarna väljer textfil för dataimport

   stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...")

 

   'Om användaren klickar på Avbryt-knappen.

   If stHamtaFil = "Falskt" Then Exit Sub

 

   Application.ScreenUpdating = False

 

   'Här används s k late binding.

   Set fsoObj = CreateObject("Scripting.FileSystemObject")

   stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path

   stFilnamn = fsoObj.GetFile(stHamtaFil).Name

 

   'Här skapas DAO-kopplingen och textfilen öppnas.

   Set Db = OpenDatabase(stSokVag, False, True, "Text;")

   Set Rst = Db.OpenRecordset("SELECT * FROM " & stFilnamn)

 

   'Textfilens innehåll läggs till den aktiva arbetsboken och arbetsblad läggs till.

   While Not Rst.EOF

      Worksheets.Add

      ActiveSheet.Range("A1").CopyFromRecordset Rst, 65536

   Wend

 

   Rst.Close

   Db.Close  

   Set Rst = Nothing

   Set Db = Nothing

   Application.ScreenUpdating = True

 End Sub