Print side | Luk vindue

Åbne text-filer i Excel via hyperlink

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=3067
Udskrevet den: 30.Nov.2024 kl. 11:03


Emne: Åbne text-filer i Excel via hyperlink
Besked fra: uffsch
Emne: Åbne text-filer i Excel via hyperlink
Posteringsdato: 13.Jun.2017 kl. 22:58

Hej

Jeg har i vedhæftede fil (Data.XLSM) lavet en makro (makro1) der skal åbne en text-fil i Excel (ACM.ST.TXT). Indholdet i text-filen skal kopieres over i Data-filen – indsættes i kolonne M til V. Herefter er der nogle beregninger og kolonne M til V skal igen slettes.

Sagen er den, at Data-filen skal hente data fra 1200 andre text-filer (1200 forskellige filnavne der ligger i mappen C:\Min mappe\) ved at køre i loop. Jeg tænker derfor at en løsningsmulighed er, at makroen åbner text-filen via et hyperlink fra en bestemt celle i Data-filen (celle K1) og for hver gang der køres et loop bliver der indsat et nyt filnavn i J1 der giver et nyt Hyperlink i K1.

Jeg har også forsøgt at lave et hyperlink på denne måde, men der er noget galt.

Workbooks.OpenText Filename:=Hyperlink("C:\Min mappe\" & H1 & ".TXT", H1)

Findes der en løsning på det?

Udfordring nr. 2:

En anden udfordring jeg har, er at få lukket text-filen igen. Data-filen og text-filen er åben og det er Data-filen der er den aktive fil. Navnet på text-filen er forskellig for hver gang der køres et loop, så hvordan får jeg den lukket eller aktiveret så jeg kan få makroen til at lukke den?

Håber der er nogen der er skarpe i den slags.

På forhånd tak.

Mvh Uffe

uploads/1988/.xlsm - uploads/1988/Data.xlsm

uploads/1988/ACM_2017-06-13_23-01-20.ST_2017-06-13_23-01-20.txt" rel="nofollow - uploads/1988/ACM_2017-06-13_23-01-20.ST_2017-06-13_23-01-20.txt




Svar:
Besked fra: EXCELGAARD
Posteringsdato: 14.Jun.2017 kl. 08:51
Det fremgår ikke, hvilke beregninger, som skal benyttes på de indlæste data, men, hvis det drejer sig om simple sammenlægninger/sammentælling, vil jeg foreslå en anden tilgang, der både løser alle dine problemer, men også er 1000 gange hurtigere: Lad VBA indlæse filerne (i en variabel), foretage beregningerne, og afslutte med at indlægge resultat(erne) i en eller flere celler.

Det kræver godt nok lidt mere fodarbejde, at få det lavet, men vil være ufatteligt meget mere brugbart bagefter...


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: uffsch
Posteringsdato: 14.Jun.2017 kl. 09:27
Hej Excelgaard

Tak for dit svar.

Jeg kender dog ikke til den metode du foreslår.

Der sker beregninger i 31 kolonner og 500 rækker, så der er flere tusinde celler med beregninger. Beregningerne bruges SUM, SUM.HVIS, HVIS(OG), MIN, MAKS ud over plus, minus, multipl. og divison.

Er din ide stadig gangbar?

Mvh Uffe



Besked fra: EXCELGAARD
Posteringsdato: 14.Jun.2017 kl. 12:11
Ja, min ide burde umiddelbart være gangbar, men med det forbehold, at jeg ikke kender dit præcise ønske/opstilling/problem.

Men, jeg tror osse, at det kræver lidt mere VBA kendskab, end du virker til, at have (no offence Smile)

Metoden kan kort oplistes som:

  1. Gennemløb tekst filerne med FileSystemObject
  2. Indlæs indholdet af tekst filen ind i en variable
  3. Udtræk det ønskede tal fra tekst variablen (kriterie?)
  4. Foretag dine beregninger i andre (midlertidige) variabler
  5. ...næste fil...
  6. Når gennemløbet af alle filer er overstået, skriv de midlertidige (nu, endelige) resultater til de ønskede celler.

Da der kun skrives til selve regnearket en eneste gang, nemlig, når slut resultatet skal indlægges, så bør det gå lynende hurtigt.



-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: uffsch
Posteringsdato: 14.Jun.2017 kl. 12:30
Du har helt ret mht mit niveau - jeg kan optage en makro og klippe lidt sammen med stumper jeg kan google mig frem til Smile

Din foreslåede løsningsmetode - som helt sikkert er mere optimal - går derfor også lidt hen over hovedet på mig Confused

Jeg kan dog nemt leve med at beregningen på de 1200 filer tager en del tid, så hvis du har et tip til hvordan jeg kan få et "dynamisk" hyperlink til at fungere, vil jeg blive super-glad 

Mvh Uffe





Besked fra: EXCELGAARD
Posteringsdato: 15.Jun.2017 kl. 12:30
Jeg ville gerne hjælpe, men kan allerede nu regne ud, at dette bliver en opgave med en masse skriven frem og tilbage før vi endelig rammer det rigtige - ingen kritik - det er set utallige gange før i dette forum - sådan er det bare ind i mellem Smile

Men, sagen er, at jeg har sindsygt travlt i disse uger, og ikke lige kan se, at jeg skulle kunne finde tid...
...måske en anden vil tage over?


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: uffsch
Posteringsdato: 15.Jun.2017 kl. 13:20
Tak for din tilbagemelding og ærligheden - sådan skal DET bare være Thumbs Up 

Hvis en anden har gode ideer, så skriv endelig.

Mit problem "vil ikke gå væk" så jeg vil gerne sætte en lille belønning på højkant Tongue




Besked fra: uffsch
Posteringsdato: 15.Jun.2017 kl. 23:39
Jeg er 99% sikker på at jeg nu har fundet en løsning. 

Jeg lægger den herind imorgen når den er oppe at køre (hvis nogen skulle have interesse)





Besked fra: uffsch
Posteringsdato: 16.Jun.2017 kl. 10:42
Jeg har nu fundet en løsning der kører ganske hurtigt.

I celle A10 i filen Data.xlsm indsættes stien på den tabulator-separerede text-fil som skal åbnes og kopieres over i Data.xlsm.

Nedenstående kode er ikke hele makroen, men de uddrag der udfører de funktioner jeg har efterlyst i mit indlæg.

Dim txtName As String

txtName = Range("A10").Value

Workbooks.OpenText Filename:= _

txtName, Origin:=437, _

StartRow:=1, DataType:=xlDelimited, TrailingMinusNumbers:=True

    Columns("A:F").Select

    Selection.Copy

    Windows("Data.xlsm").Activate

    Columns("M:M").Select

    ActiveSheet.Paste

    Range("L1").Select

Application.CutCopyMode = False

Dim WB As Workbook

For Each WB In Workbooks

     If Not (WB Is ActiveWorkbook) Then WB.Close

Next

Mvh Uffe



Print side | Luk vindue