Å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 )
Metoden kan kort oplistes som:
- Gennemløb tekst filerne med FileSystemObject
- Indlæs indholdet af tekst filen ind i en variable
- Udtræk det ønskede tal fra tekst variablen (kriterie?)
- Foretag dine beregninger i andre (midlertidige) variabler
- ...næste fil...
- 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
Din foreslåede løsningsmetode - som helt sikkert er mere optimal - går derfor også lidt hen over hovedet på mig
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
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
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
|
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
|
|