Avatar billede hugopedersen Nybegynder
22. maj 2003 - 08:20 Der 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.
Avatar billede janvogt Praktikant
22. maj 2003 - 08:44 #1
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.
Avatar billede fobian Nybegynder
22. maj 2003 - 08:47 #2
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
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 08:59 #3
Lidt uddybende forklaring:

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
....
Avatar billede janvogt Praktikant
22. maj 2003 - 09:45 #4
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.
Avatar billede janvogt Praktikant
22. maj 2003 - 09:45 #5
kommaseparet = kommasepareret
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 10:03 #6
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.
Avatar billede bak Forsker
22. maj 2003 - 10:25 #7
Er det de samme celler der skal gemmes hver gang ?
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 10:33 #8
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.
Avatar billede bak Forsker
22. maj 2003 - 11:09 #9
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
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 11:17 #10
Det ser ud til at lave noget der nok kan bruges.
Jeg skal lige checke det i aften når jeg kommer i nærheden af det rigtige ark. Så vender jeg tilbage.
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 11:22 #11
bak>

Smid lige et svar så du kan få dine point - jeg fandt en kopi af en gammel udgave af mit regneark her på arbejde. Og det fungerer 100%
Avatar billede bak Forsker
22. maj 2003 - 12:16 #12
Ok, hugo :-)
Har du også fundet en måde at læse filen ind igen ?
Avatar billede bak Forsker
22. maj 2003 - 12:16 #13
Og her er svaret så
Avatar billede hugopedersen Nybegynder
22. maj 2003 - 12:48 #14
Indlæsningen er næste step :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester