22. maj 2003 - 08:20Der er
13 kommentarer og 1 løsning
Gemme feltindhold i tekstfil - er der nogen der har prøvet ?
Jeg har et større regneark hvor der på en af siderne står nogle personoplysninger som jeg gerne vil kunne gemme til en simpel textfil da disse oplysninger skal kunne indlæses igen hvis jeg sender en ny version af regnearket til mine kunder.
Oplysningerne står i 6 kolonner og x antal linier og skal egentlig bare skrives i filen på faste positioner ( cpr=pos 0-10, navn=pos 12-35 f.eks.)
Oplysningerne vil jeg så derefter gerne kunne indlæse igen og sætte på plads i arket.
At læse og skrive til en fil må kunne lade sig gøre med et filesystemobject, men det med at springe rundt mellem felterne og læse eller skrive, det er jeg i tvivl om hvordan jeg griber an.
Tror ikke helt jeg forstår, hvad dit problem er .... ".... at springe rundt mellem felterne og læse eller skrive ..." Skal du ikke bare gøre det i Excel og så gemme i en tekstfil?
Jeg har et eksempel liggende, som viser hvordan man gemmer som en kommasepareret fil. Den vil du også nemt kunne genindlæse igen i Excel.
Kan du ikke anvende funktionen "Gem som" hvor du gemmer som Tekst(tabulatorsepareret)
Du kan lave en macro, som gemmer og indlæser filen efter behov. Når du skal bruge data fra tekstfilen kan du via en macro åbne den fra Excel og kopiere området med data til dit regneark. /fobian
De eneste vitale data i arket er nogle persondata, som ligger på en bestemt side i arket. Disse data (og kun disse) skal jeg have mulighed for at gemme i en textfil. Jeg forestiller mig at man gør noget i stil med: gå til felt A3 læs værdi gem i variabel på pos x gå til felt B3 læs værdi gem i variabel på pox x + y ... skriv variabel i fil gå til felt A4 ....
Hvis du gemmer som en kommaseparet fil vil du på den øverste række få f.eks. de data, som står i række 1, adskilt med semikolon. Den næste række vil indeholde de data som står i række 2 o.s.v.
Det der er opgaven i det er at det ikke er alle data på siden der skal gemmes og det skal være så automatisk at brugeren ikke skal tænke på hvordan det skal gøres. Han/hun skal bare trykke på en af makroknapperne der er på siden.
Det starter altid i f.eks. A5..G5 ( altså 7 kolonner ) Men ned ad vil det værre forskelligt fra kunde til kunde (afhænger af antal ansatte) Det tror jeg at der kan løses ved at jeg checker for om værdien i celle Ax er blank - det vil betyde at linien er tom da det er CPR der står i kolonne A og det skal bruges for at personen kan slås op.
Her er et forslag. Jeg har bevidst brugt "Delimiter" istedet for "Fast Bredde". Dette gør det meget nemmere at indlæse data igen.
Option Explicit
Sub GemSomTextFil() Dim Ark As Worksheet Dim rng1 As String Dim x As Long, y As Long Dim FilNavn As String Set Ark = Sheets("Ark1") rng1 = Range("a5", Range("a5").End(xlDown).Offset(0, 6).Address).Address FilNavn = "c:\Medarb.csv" MakeCSVFile rng1, FilNavn, True 'Kald til underliggende makro End Sub
Sub MakeCSVFile(strRng As String, Fil As String, IncludeHeaders As Boolean) Const sDELIM As String = ";" Dim rngExport As Range Dim vCellType() 'holder til kolonnens format Dim strAp As String * 1 'holder til apostrof Dim strTemp As String Dim lX As Long Dim lY As Long 'tællere Dim lRows As Long Dim lCols As Long
strAp = Chr(34) 'apostrof Set rngExport = Range(strRng)
With rngExport lRows = .Rows.Count lCols = .Columns.Count ReDim vCellType(lCols) For lX = 1 To lCols vCellType(lX) = VarType(.Cells(2, lX)) Next
Open Fil For Output As #1
If IncludeHeaders = True Then For lX = 1 To lCols strTemp = strAp & CStr(LTrim(.Cells(1, lX)) & strAp) If lX < lCols Then Print #1, strTemp & sDELIM; Else Print #1, strTemp; End If Next Print #1, End If
For lY = 2 To lRows For lX = 1 To lCols strTemp = "" Select Case vCellType(lX) Case 8: strTemp = strAp & CStr(LTrim(.Cells(lY, lX)) & strAp) Case 7: strTemp = strAp & Format(.Cells(lY, lX), "dd/mm-yyyy") & strAp Case Else: strTemp = .Cells(lY, lX) End Select If lX < lCols Then Print #1, strTemp & sDELIM; Else Print #1, strTemp; End If Next Print #1, Next End With 'rngExport Close #1 End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.