/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn 

Kodeord  


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
læse en bestemt linie med vba i tekst-fi~
Fra : taske
Vist : 506 gange
140 point
Dato : 14-09-04 20:32

Er der nogle som ved hvordan man i et excel (vba) ark henter en bestemt linie fra en tekst-fil.
Jeg har en fil hvor der hele tiden tilskrives linier, jeg vil med en makro i excel hente og bearbejde de nye linier uden at skulle starte forfra i toppen. makroen skal med et tidsinterval stå og tjekke om der er nyt og så tilføje linier i excel. Listen kan blive lang (35000+ linier) så jeg mangler en metode hvor jeg kan sige at sidst kom jeg til linie 21001 så nu skal jeg starte med at tjekke linie 21002.

Madsen

 
 
Kommentar
Fra : berpox


Dato : 14-09-04 22:57

Denne kodestump åbner vilen TEXTFILE.TXT og ruller den igennem indtil sidste linie der så skrives i celle B1. I A1 skrives antallet af linier.

Kode
Sub ReadTextFileLine()
Dim LinesOfText As String
Dim LineNo As Long
LineNo = 0
Open "C:\TEXTFILE.TXT" For Input As #1
Do While Not EOF(1)
Line Input #1, LinesOfText
LineNo = LineNo + 1
Loop
'Close the file
Close #1
Worksheets("Sheet1").Range("A1").Value = LineNo 'write line numbers to Sheet1,cell A1
Worksheets("Sheet1").Range("B1").Value = LinesOfText 'write last line content to Sheet1,cell B1
End Sub


mvh Berpox

Kommentar
Fra : berpox


Dato : 14-09-04 23:03

Hvis du vil gå til en bestemt linie, så skal du åbne din textfil som et recordset vha. microsoft jet og ADO'en.

Så kan du gøre brug af .movelast funktionaliteten.

Prøv at kigge her:
http://www.erlandsendata.no/english/index.php?d=envbadacconnstring

under afsnittet "Connecting to a text file:"

mvh Berpox


Kommentar
Fra : kafkakim


Dato : 14-09-04 23:41

Prøve denne
Kode
Dim fso As FileSystemObject
Dim ts As TextStream
Dim buf As String
Dim vbuf As Variant

Set fso = New FileSystemObject
Set ts = fso.OpenTextFile(Path)

dim count as int
count = 1
With ts
While Not .AtEndOfStream
buf = .ReadLine
redim vbuf[count]
vbuf[count] = buf

Wend
.Close
End With


Nu har du det i en stringarray som du kan indeksere i

Kafka

Kommentar
Fra : taske


Dato : 15-09-04 09:59

Tak for de hurtige svar, men jeg må indrømme at jeg desvære ikke kommer vidre med den nye information.

Men er det muligt at lade funktionen vente 5 sek, når den der kommet til bunden af filen, også køre vidre derfra hvor den kom til.
Vente 5, køre igen, OSV. til den blev afbrudt.
Sagen er at der kan komme 50 linier eller 0 linier på de 5 sek

Madsen



Accepteret svar
Fra : berpox

Modtaget 140 point
Dato : 15-09-04 13:03

Fælles for de her nævnte forslag er at de ÅBNER tekstfilen på et givent tidspunkt. PÅ det tidspunkt er der n linier i teksten.

Derfor er du nødt til at genindlæse filen for at læse videre i filen. Som jeg skriver, så må du bruge ADO'en for at gøre brug af muligheden for at "movelast" - altså åbne filen som et recordset. I din makro kan du så gemme sidste linie som record-nummer, evt. ud i en tekstfil. Næste gang du åbner filen/recordsettet, så kan du flytte dig til recordsetnummer n+1 og læse derfra (indtil EOF).

Hvis din applikation der skriver i tekstfilen derimod kunne skrive i en database, så ville du have mulighed for at holde en connection åben til databasen, og dermed også hele tiden vide hvor du er i recordsettet.

Din Excel makro holdes således kørende og kigger med faste intervaller, om der er kommet ekstra linier til i databasen.

Det kan du altså ikke med en tekstfil, og det uanset om du bruge min metode, eller filesystemobject i flg. kafkakim.

mvh Berpox

Godkendelse af svar
Fra : taske


Dato : 15-09-04 22:07

Tak for svaret berpox.
det virker nu ikke endnu men jeg kan godt se at du har vist den rigtige vej, dog er det nok lidt for langhårte til mig                  

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 173643
Tips : 31664
Nyheder : 719565
Indlæg : 6383655
Brugere : 218258

Månedens bedste
Årets bedste
Sidste års bedste