• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

De groote van een TXT bestand gereed maken voor excel 2003

  • Onderwerp starter Onderwerp starter HWV
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.213
Goedendag,

Ik heb de volgende code gevonden op het form, om een tekst betsand in delen te knippen ivm dat exel 2003 maar een beperkte aantal regels aan kan.
Met onderstaande code zou het bestand in delen gehakt worden op opgeslagen zodat je deze kan openen met excel 2003 of lager.

Ik kan wel een naam ingeven voor het op te halen bestand maar daarna geef hij een foutmelding op regel
Code:
      Open FileName For Input As #FileNum

Heeft iemand een idee waar het aan zou kunnen liggen

Code:
Attribute VB_Name = "Module1"
Sub LargeFileImport()

      'Dimension Variables
      Dim ResultStr As String
      Dim FileName As String
      Dim FileNum As Integer
      Dim Counter As Double
      'Ask User for File's Name
      FileName = InputBox("Please enter the Text File's name, e.g. test.txt")
      'Check for no entry
      If FileName = "" Then End
      'Get Next Available File Handle Number
      FileNum = FreeFile()
      'Open Text File For Input
      Open FileName For Input As #FileNum
      'Turn Screen Updating Off
      Application.ScreenUpdating = False
      'Create A New WorkBook With One Worksheet In It
      Workbooks.Add template:=xlWorksheet
      'Set The Counter to 1
      Counter = 1
      'Loop Until the End Of File Is Reached
      Do While Seek(FileNum) <= LOF(FileNum)
         'Display Importing Row Number On Status Bar
          Application.StatusBar = "Importing Row " & _
             Counter & " of text file " & FileName
          'Store One Line Of Text From File To Variable
          Line Input #FileNum, ResultStr
          'Store Variable Data Into Active Cell
          If Left(ResultStr, 1) = "=" Then
             ActiveCell.Value = "'" & ResultStr
          Else
             ActiveCell.Value = ResultStr
          End If
          
          'For Excel versions before Excel 97, change 65536 to 16384
          If ActiveCell.Row = 65536 Then
             'If On The Last Row Then Add A New Sheet
             ActiveWorkbook.Sheets.Add
          Else
             'If Not The Last Row Then Go One Cell Down
             ActiveCell.Offset(1, 0).Select
          End If
          'Increment the Counter By 1
          Counter = Counter + 1
      'Start Again At Top Of 'Do While' Statement
      Loop
      'Close The Open Text File
      Close
      'Remove Message From Status Bar
      Application.StatusBar = False

   End Sub

Alvast bedankt

HWV
 
HWV,

Je moet wel het volledige pad invoeren. dus C:/mijn documenten/word/ oplos.doc
 
Hm, volgens mij komt dat door onderstaande regel.
Code:
FileName = Application.GetOpenFilename
Als je namelijk op Annuleren klikt, wordt er geen bestandsnaam aan Filename gegeven.

Met vriendelijke groet,


Roncancio
 
HWV,

Je moet wel het volledige pad invoeren. dus C:/mijn documenten/word/ oplos.doc

Via Application.GetOpenFilename kan je een bestand selecteren.
Dan hoef je geen volledig pad te geven.

Met vriendelijke groet,


Roncancio
 
Het schijnt te werken.

Ik heb nu het gehel pad er in gezet, en hij is nu bezig....
Weet nog niet of het werkt maar dat zien we zo.
Ik ( met mijn stome kop) had niet en txt file maar een .bat file als txt bestand aangezien.
Daar gaat hij natuurlijk ook van over zijn nek.

Ik laat het zo weten als het si gelukt.

Bedankt voor de input

HWV
 
Laatst bewerkt:
Ik heb nu het gehel pad er in gezet, en hij is nu bezig....
Weet nog niet of het werkt maar dat zien we zo.
Ik ( met mijn stome kop) had niet en txt file maar een .bat file als txt bestand aangezien.
Daar gaat hij natuurlijk ook van over zijn nek.

Ik laat het zo weten als het si gelukt.

Bedankt voor de input

HWV

Dit kan je ondervangen door een filter.

Code:
FileName = Application.GetOpenFilename("Text Files (*.txt), *.txt")

Met vriendelijke groet,


Roncancio
 
Moet ik wat weg halen in het script dan

Heb het nu twee keer geprobeerd.... Maar slaat vast .
Ik heb txt bestand al gehalveerd maar nog steeds slaat hij gelijk vast
bestand txt nu 17 mb

Heeft één van jullie het ook al zelf geprobeerd

HWV
 
HWV,

Is dit voor VB geschreven?
Code:
Attribute VB_Name = "Module1"
Sub LargeFileImport()
Bij mij loopt hij door en als hij terugaat naar onderstaande regel komt de fout melding - Invoer na einde bestand.
Code:
Line Input #FileNum, ResultStr
 
Heb het nu twee keer geprobeerd.... Maar slaat vast .
Ik heb txt bestand al gehalveerd maar nog steeds slaat hij gelijk vast
bestand txt nu 17 mb

Heeft één van jullie het ook al zelf geprobeerd

HWV

Ja.
Met onderstaande code werkt het bij mij zonder problemen.
Code:
Sub LargeFileImport()
'Bernie Deitrick's code for opening very large text files in Excel
'Dimension Variables
Dim ResultStr As String
Dim FileName As String
Dim FileNum As Integer
Dim Counter As Double
'Ask User for File's Name
FileName = Application.GetOpenFilename
'Check for no entry
If FileName = "" Then End
'Get Next Available File Handle Number
FileNum = FreeFile()
'Open Text File For Input
Open FileName For Input As #FileNum
'Turn Screen Updating Off
Application.ScreenUpdating = False
'Create A New WorkBook With One Worksheet In It
Workbooks.Add Template:=xlWorksheet
'Set The Counter to 1
Counter = 1
'Loop Until the End Of File Is Reached
Do While Seek(FileNum) <= LOF(FileNum)
'Display Importing Row Number On Status Bar
Application.StatusBar = "Importing Row " & Counter & " of text file " _
& FileName
'Store One Line Of Text From File To Variable
Line Input #FileNum, ResultStr
'Store Variable Data Into Active Cell
If Left(ResultStr, 1) = "=" Then
ActiveCell.Value = "'" & ResultStr
Else
ActiveCell.Value = ResultStr
End If
If ActiveCell.Row = 65536 Then
'If On The Last Row Then Add A New Sheet
ActiveWorkbook.Sheets.Add
Else
'If Not The Last Row Then Go One Cell Down
ActiveCell.Offset(1, 0).Select
End If
'Increment the Counter By 1
Counter = Counter + 1
'Start Again At Top Of 'Do While' Statement
Loop
'Close The Open Text File
Close
'Remove Message From Status Bar
Application.StatusBar = False
End Sub

Met vriendelijke groet,


Roncancio
 
tja het werk :-(

Het werkt wel , maar niet voor mij bestand.
Ik heb een bestand TXT van ongeveer 650.000 regels in excel 2007
Als ik het met deze script halveren om het te kunnen gebruiken in excel 2003 is het een probleem.
Ik heb niet de beschikking over excel 2007, maar wil wel graag wel het bestand binnen halen.
Ik moet het nu voorbereiden om straks snel alles binnen te halen ivm dat de data actueel moet blijven die ik overzet.
Als ik dit met de hand moet doen gaat daar veel tijd aan verloren.

Hebben jullie een idee hiervoor.

HWV

( al bedankt voor de genomen moeite )
 
Je kunt het txt-bestand inlezen in een matrix sq.
Als je iedere 65000e regel markeert kun je vervolgens de matrix opdelen in stukken van 65000 regels.
Als je die stukken als afzonderlijke bestanden wegschrijft heb je bestanden die voldoen aan de maximumcriteria van Excel.

Code:
Open "C:\voorbeeld.txt" For Input As #1
  sq=split(Input(LOF(1), #1),vbcr & chr(10))
  Close #1

  for j= 65000 to ubound(sq) step 65000
    sq(j)="###" & sq(j)
  next
  sq=split(join(sq,vbcr),"###")

  for j= 0 to ubound(sq)
    open "C:\deel " & j & ".txt" for output as #1
    write #1, sq(j)
    close #1
 next
 
Laatst bewerkt:
Het werkt wel , maar niet voor mij bestand.
Ik heb een bestand TXT van ongeveer 650.000 regels in excel 2007
Als ik het met deze script halveren om het te kunnen gebruiken in excel 2003 is het een probleem.
Ik heb niet de beschikking over excel 2007, maar wil wel graag wel het bestand binnen halen.
Ik moet het nu voorbereiden om straks snel alles binnen te halen ivm dat de data actueel moet blijven die ik overzet.
Als ik dit met de hand moet doen gaat daar veel tijd aan verloren.

Hebben jullie een idee hiervoor.

HWV

( al bedankt voor de genomen moeite )

Even voor de duidelijkheid.

Er is een txt-bestand met veel gegevens.
Dit bestand staat al in een Excel 2007 bestand?
En het moet van Excel 2007 naar Excel 2003.

Het txt-bestand kan dus niet gebruikt worden om de gegevens rechtstreeks in Excel 2003 te zetten.

Met vriendelijke groet,


Roncancio
 
Duidelijkheid

Het is een txt bestand van ongeveer 30mb

Ik heb het al eerder naar een excel 2007 gehaald ( lees hij gewoon in zonder probleem )
Maar ik heb nu op mijn nieuwe job geen 2007 vandaar.

Ik moet dus van een txt naar excel 2003.
Ik ga nu de optie van SNB proberen

HWV
 
Ben natuurlijk een leek

Dit gaat zo niet lukken SNB.
Ik zal onwaarschijnlijk iets fout doen.
Ik moet het wel in excel in een macro zetten ?

Code:
Sub bestand()

Open "C:\voorbeeld.txt" For Input As #1
  sq = Split(Input(LOF(1), #1), vbCr & Chr(10))
  Close #1

  For j = 65000 To UBound(sq) Step 65000
    sq(j) = "###" & sq(j)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For j = 0 To UBound(sq)
    Open "C:\deel " & j & ".txt" For Output As #1
    Write #1, sq(j)
    Close #1
 Next

End Sub

Thanks HWV
 
1. dit is een macro die je in een excelbestand kunt zetten.
2. in mijn voorbeeld ga ik ervan uit dat het bestand dat je in kleinere stukken wil splitsen C:\voorbeeld.xls heet. Pas dit aan op de naam van het bestand dat jij wil opknippen.
3. het is niet verkeerd als je wat specifieker bent als iets niet lukt (waar, hoe, wanneer, na welke akties, etc.)
 
? doe ik iets verkeerd

Hoi,

Ik heb de code
Code:
Sub bestand()

Open "C:\voorbeeld.txt" For Input As #1
  sq = Split(Input(LOF(1), #1), vbCr & Chr(10))
  Close #1

  For j = 65000 To UBound(sq) Step 65000
    sq(j) = "###" & sq(j)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For j = 0 To UBound(sq)
    Open "C:\deel " & j & ".txt" For Output As #1
    Write #1, sq(j)
    Close #1
 Next

End Sub

In een macro gezet en mijn bestand voorbeeld genoemd op de locatie zoals in het script staat aan geveven C:\voorbeeld.txt grote van het bestand om precies te zijn (36.705)
De macro draait en hij zet een bestand deel 0 neer op de C: maar met de zelfde groote als het voorbeeld bestand.
Dit bestand is dus nog steeds te groot om in te lezen ( melding in excel 2003 ) bestand is niet volledig ingelezen.

Hij heeft het bestand niet verkleind.

Is dit aan te passen

HWV
 
Test met de volgende gewijzigde code

Code:
Sub bestand()

Open "C:\voorbeeld.txt" For Input As #1
  sq = Split(Input(LOF(1), #1), [COLOR="DarkRed"][B]vbCr[/B][/COLOR] )
  Close #1

  For j = 65000 To UBound(sq) Step 65000
    sq(j) = "###" & sq(j)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For j = 0 To UBound(sq)
    Open "C:\deel " & j & ".txt" For Output As #1
    Write #1, sq(j)
    Close #1
 Next

End Sub
 
Werkt nog niet

Best SNB

Helaas het werkt helaas nog niet:

De macro draait en hij zet een bestand deel 0 neer op de C: maar met de zelfde groote als het voorbeeld bestand.
Dit bestand is dus nog steeds te groot om in te lezen ( melding in excel 2003 ) bestand is niet volledig ingelezen.

HWV

( ik hoop dat u toch de oplossing voor kunt aandragen )
Bedankt voor de genomen moeite
 
probeer het dan met
Code:
Sub bestand()
  Open "C:\voorbeeld.txt" For Input As #1
    sq = Split(Input(LOF(1), #1), [COLOR="DarkRed"][B]Chr(10)[/B][/COLOR])
  Close #1

  For j = 65000 To UBound(sq) Step 65000
    sq(j) = "###" & sq(j)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For j = 0 To UBound(sq)
    Open "C:\deel " & j & ".txt" For Output As #1
      Write #1, sq(j)
    Close #1
  Next
End Sub

Bij mij loopt het perfect.
Ik begin me af te vragen wat voor txt-bestand dit is (hoe worden de regeleinden aangeduid ?).
 
Laatst bewerkt:
Waanzinnig

Beste SNB

Zoals in de kop al gezegd waanzinnig, hij werkt nu wel !
Hij heeft er 10 bestanden van gemaakt ( komt dus neer op een kleine 650.000 regels )
Ik kan deze nu naar excel halen en bewerken.

Bedankt ik vind je helemaal waanzinnig

Groet HWV:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan