Avatar billede hubertus Seniormester
04. oktober 2009 - 09:41 Der er 13 kommentarer og
1 løsning

konverter til en fil uden koder.

Hej experter

Jeg har fået en opgave, der lyder som følger:
en txt fil skal hentes ind i excel, bearbejdes og derefter exporteres til en fil helt uden koder. Cellernes inhold skal stå i forlængelse af hinanden uden skilletegn og mellemrum. Hver række skal udgøre en linie i filen. Gemmer jeg filen som en txt fil, så optræder der mellemrum mellem de enkelte cellers indhold. Tilsvarende gælder en csv fil, her er der blot et semikolon der adskiller de enkelte cellers indhold.


Er der en løsning?

ps. Det drejer sig om et ark med mange rækker, og extention skal være txt.

Hvem kan hjælpe
Avatar billede supertekst Ekspert
04. oktober 2009 - 11:15 #1
Når filen er skabt - kan denne gennemlæses og mellemrum eller ; slettes via "Replace" og skrives i en ny tekstfil

eller

at eksporten udføres via VBA
Avatar billede hubertus Seniormester
04. oktober 2009 - 11:57 #2
Det bør ske via VBA kode, da det er en proces der skal gentages mange gange. Har du en VBA kode der kan løse problemet?
Avatar billede supertekst Ekspert
04. oktober 2009 - 12:29 #3
Ikke direkte - men den kan jo nok "bankes sammen".

Hvad er spillereglerne for eksporten - hvilke kolonner / rækker o.s.v.?
Avatar billede hubertus Seniormester
04. oktober 2009 - 12:40 #4
Der er 7 kolonner A - G, og antallet af rækker er dynamisk. Indholdet i cellerne er såvel tal, dato, og tekst.

en række kunne se således ud:

kunde nr  ekspedient  lev. dato  bilag nr. leverandør  type/st.
810000    A25        01-07-2009  270288    AA12345    501
     
      antal
hele  40

de andre linier, har samme format. hver linie skal udgøre en linie i resultatfilen.

Det er første del af min opgave.
Avatar billede supertekst Ekspert
04. oktober 2009 - 13:56 #5
Dim filsti As String
Dim linie As String

Dim antalRækker As Long, antalKolonner As Long
Sub eksporter()
    filsti = ActiveWorkbook.Path
   
    If Right(filsti, 1) <> "\" Then
        filsti = filsti + "\"
    End If

    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
    antalKolonner = ActiveCell.SpecialCells(xlLastCell).Column
   
    Open filsti + "eksport.txt" For Output As #1
        For ræk = 2 To antalRækker
            linie = ""
            For kol = 1 To antalKolonner
                linie = linie + CStr(Cells(ræk, kol))
            Next kol
           
            Print #1, linie
            linie = ""
        Next ræk
    Close #1
   
    MsgBox ("Eksport afsluttet")
End Sub

Rem sådan ser output-filen ud
810000A2501-07-2009270288AA123450140
810001A2602-07-2009270289AA123550241
810002A2703-07-2009270290AA123650342
810003A2804-07-2009270291AA123750443
810004A2905-07-2009270292AA123850544
810005A3006-07-2009270293AA123950645
810006A3107-07-2009270294AA124050746
Avatar billede hubertus Seniormester
04. oktober 2009 - 14:08 #6
Det ser godt ud. Jeg overså desværre en detalje. I outputfilen skal den enkelte række opsplittes i 2, således at der kommer et linieskift efter leverandør, således at type/st. og antal komemr på en ny linie. Linieskiftet skal således komme efter kolonne 5. Kan du bygge det ind i koden vil det være helt perfekt.
Avatar billede supertekst Ekspert
04. oktober 2009 - 14:17 #7
Rem Version 2
Rem =========
Dim filsti As String
Dim linie As String

Dim antalRækker As Long, antalKolonner As Long
Sub eksporter()
    filsti = ActiveWorkbook.Path
   
    If Right(filsti, 1) <> "\" Then
        filsti = filsti + "\"
    End If

    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
    antalKolonner = ActiveCell.SpecialCells(xlLastCell).Column
   
    Open filsti + "eksport.txt" For Output As #1
        For ræk = 2 To antalRækker
            linie = ""
            For kol = 1 To antalKolonner
                linie = linie + CStr(Cells(ræk, kol))
                If kol = 5 Then
                    Print #1, linie
                    linie = ""
                End If
            Next kol
           
            Print #1, linie
            linie = ""
        Next ræk
    Close #1
   
    MsgBox ("Eksport afsluttet")
End Sub

Rem sådan ser output-filen ud
810000A2501-07-2009270288AA1234
50140
810001A2602-07-2009270289AA1235
50241
810002A2703-07-2009270290AA1236
50342
810003A2804-07-2009270291AA1237
50443
810004A2905-07-2009270292AA1238
50544
810005A3006-07-2009270293AA1239
50645
810006A3107-07-2009270294AA1240
50746
Avatar billede hubertus Seniormester
04. oktober 2009 - 16:09 #8
Flot - det var det som jeg søgte.

Et tillægsspørgsmål: hvis jeg vil have formateret felterne inden de skrives i filen, er det så hensigtsmæssigt at gøre det, som en del af din kode, eller skal jeg gøre det før din kode afvikles?
F.eks. skrives datoen: 01-07-2009, men i min resutatsfil skal den stå således: 01072009, og antal skal have 3 nuller foran tallet.
Avatar billede supertekst Ekspert
04. oktober 2009 - 17:30 #9
Rem Version 3
Rem =========
Dim filsti As String
Dim linie As String

Dim antalRækker As Long, antalKolonner As Long
Sub eksporter()
    filsti = ActiveWorkbook.Path
   
    If Right(filsti, 1) <> "\" Then
        filsti = filsti + "\"
    End If

    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
    antalKolonner = ActiveCell.SpecialCells(xlLastCell).Column
   
    Open filsti + "eksport.txt" For Output As #1
        For ræk = 2 To antalRækker
            linie = ""
            For kol = 1 To antalKolonner
Rem dato-kolonne
                If kol = 3 Then
                    linie = linie + Format(Cells(ræk, kol), "ddmmyyyy")
                Else
Rem antal-kolonne
                    If kol = 7 Then
                        linie = linie + Format(Cells(ræk, kol), "00#")
                    Else
                        linie = linie + CStr(Cells(ræk, kol))
                    End If
                End If
               
                If kol = 5 Then
                    Print #1, linie
                    linie = ""
                End If
            Next kol
           
            Print #1, linie
            linie = ""
        Next ræk
    Close #1
   
    MsgBox ("Eksport afsluttet")
End Sub

Rem sådan ser output-filen ud (antal rettet i 3 øverste)
810000 A2501072009270288AA1234
501004
810001 A2602072009270289AA1235
502041
810002 A2703072009270290AA1236
503142
810003 A2804072009270291AA1237
504043
810004 A2905072009270292AA1238
505044
810005 A3006072009270293AA1239
506045
810006 A3107072009270294AA1240
507046
Avatar billede hubertus Seniormester
04. oktober 2009 - 21:54 #10
Hej Supertekst - Det ser rigtigt godt ud. Jeg har dog stadig nogle småting, som jeg skal have bygget ind i koden. Kan vi fortsætte her eller skal jeg oprette et nyt spørgsmål?
Avatar billede supertekst Ekspert
04. oktober 2009 - 22:48 #11
Hej Hubertus

Jeg tror de 30 points er brugt...
Avatar billede hubertus Seniormester
05. oktober 2009 - 06:30 #12
ok, men jeg tænkte nu ikke på points, mere på at bive i tråden.
Men anyway, så vil jeg blot sige tusinde tak for hjælpen, og håber så, at du vil fortsætte i det nye spørgsmål. :0))
Avatar billede hubertus Seniormester
14. februar 2010 - 09:54 #13
Hej Supertekst

fik aldrig lukket dette spørgsmål

lægger du et svar?

og tak for hjælpen :0))
Avatar billede supertekst Ekspert
14. februar 2010 - 11:45 #14
Hej Hubertus

Spørgsmålet er lukket & selv tak
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