Avatar billede rabitjosph Juniormester
16. juni 2007 - 08:26 Der er 13 kommentarer og
1 løsning

Gem fil

Kan det lade sig gøre at gemme en fil i VBA

Jeg har et varekartotek på nettet, hvor at jeg ønsker at gå hver varenummer på min harddisk.

For hver varenummer som er en www.adresse.billed1, www.adresse.billed 2 osv. skal mit VBA program gemme dem som en HTML fil på hardisk.

Kan det i det hele taget lade sig gøre i VBA ?

På forhånd Thx
Avatar billede kjulius Novice
17. juni 2007 - 19:42 #1
Dit spørgsmål er lidt kryptisk, men som jeg har forstået det, så har du nogen sider på en web-server, som du gerne vil hente og gemme på din hard-disk.

Du kan bruge APIet URLDownloadToFile til at hente en fil på en webserver og gemme den på harddisken.

Se evt. http://www.vb-helper.com/howto_download_url_to_file.html
Avatar billede rabitjosph Juniormester
17. juni 2007 - 20:34 #2
Hej

Jeg bruger excel makro hvor finder nogle www adresser som jeg ønsker at gemme,
så med min makro skal jeg kontrollere explore eller jeg kan hente billedere ind i excel

Hvordan kan jeg få en makro til det i excel ?
Avatar billede kjulius Novice
17. juni 2007 - 22:09 #3
Jeg er stadig ikke helt klar over hvad du ønsker, så jeg vil gætte mig lidt frem. Du skriver i dit spørgsmål, at du ønsker at gemme det som html. Så skulle man jo formode, at det er en html side, du ønsker at hente og gemme på harddisken. Men nu skriver du, at det faktisk er nogle billeder, du ønsker at hente ind i excel. Eller skriver du kun det, fordi du vil bruge excels vba makroer til at udføre jobbet med at hente dine billeder på webserveren og så gemme dem på harddisken (altså at billederne ikke skal lagres i et excel regneark som indlejrede billeder)?

I min tidligere kommentar gik jeg ud fra, at du ønskede at hente enten et html-dokument (som jo kun indeholder html-instruktioner, som så godt nok kan være referencer (links) til billed-filer), eller du havde linket til billedet og det var det du ønskede hentet og gemt i en mappe på harddisken.

Så kan du bruge det omtalte API (det er sådan set ligeglad med hvad der skal hentes (du kan hente både html sider og billeder, bare det kender hele stien til objektet). Hvis du derimod kun har linket til html-dokumentet (som linker til de billeder, der vises af browseren), er du nødt til at parse dette dokument og identificere de evt. links til billeder dette html dokument indeholder. Først herefter kan du vha. APIet hente billederne enkeltvis. I så fald vil det derfor være en 3-delt proces: 1) hente html-dokumentet/siden 2) parse siden og finde en link til et billede 3) hente billedet - og gentage processen fra punkt 2 indtil der ikke er flere billeder at hente.

Der findes programmer, som kan hente et helt web-site, inklusive billeder mv., men de fungerer bedst på udynamiske sites (altså ikke på asp/php/jsp mv., som opbygger siderne dynamisk på baggrund af brugerinput). Så længe der er tale om statiske sider fungerer sådanne programmer virkelig fint. De går under forskellige betegnelser som "Site Grabber", "Website Grabber", "Web Grabber", "Site Ripper" o.lign. Der findes virkelig mange af den slags programmer. Måske er det bare sådan et program du har brug for? Prøv evt. at google lidt omkring det emne. Søg evt. også på nogle af de store download sites som www.download.com, www.tucows.com og www.freshmeat.com
Avatar billede rabitjosph Juniormester
18. juni 2007 - 19:48 #4
Hej

Mange tak for din tålmodighed, men jeg har en makro som finder nogle sider på nettet, jeg ønsker at gemme disse sider (der er også billede på disse sider), men
her komme så mit problem.

Hvordan kan jeg få makro til at gemme disse sider som en mht fil ?

En anden mulighed var at min makro kunne styre explore ?

Håber dette hjalp lidt ?
Avatar billede kjulius Novice
19. juni 2007 - 22:20 #5
Det er kun til dels muligt at kontrollere IE fra et andet program. Det er godt nok et COM objekt, som kan styres som andre af disse objekter. Men man møder hurtigt en mur, hvor man bliver nødt til at sende key-strokes til browseren, og det er som bekendt ikke den mest stabile måde at styre et andet program på. Med SendKeys kommandoen kan man godt nok emulere, at man bruger tastaturet, men det betyder også at det altid er det program som ligger "øverst" (eller har fokus, om du vil), som modtager disse tegn. Dermed skal der ikke meget til for at bringe det hele på vildveje. Oveni er der timingproblemet. Det vil ofte være nødvendigt at lægge en pause ind mellem de forskellige keyboardkommandoer.

Men jeg har forsøgt at emulere den situation du omtaler, og har fået nedenstående rutine til at virke (for det meste). Du bliver sikkert nødt til at eksperimentere med længden på pauserne (sleep-funktionen) da de kan være afhængig af hvor hurtig din computer er, og hvad du ellers har kørende, som kan forstyrre.

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub HentOgGemSide(Websti, HdSti)
    Dim IE As InternetExplorer
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate2 Websti ' Hent din webside...
    While IE.Busy: Wend
   
    Sleep 500
    'Send en tegnstreng til browseren for at gemme siden...
    SendKeys "%Fm", True 'Vis "Gem som..." billedet
    Sleep 1000
    SendKeys HdSti, True 'Angiv sti og filnavn html siden skal gemmes under
    Sleep 500
    SendKeys "{TAB}{DOWN}{UP}", True 'Vælg den øverste af mulighederne i Filtype (Webside, fuldstændig)
    Sleep 500
    SendKeys "%G", True 'Tryk på Gem
    Sleep 3000 ' Giv browseren tid til at gemme (3 sek. er normalt nok)...

    IE.Quit
    Set IE = Nothing
End Sub

Vær opmærksom på, at du skal have sat et flueben ud for "Microsoft Internet Controls" under referencer. Hvis du af en eller anden grund ikke kan finde det under dine referencer (jeg kunne f.eks. ikke finde den), så klik på "Browse" knappen og prøv om du kan finde ieframe.dll filen i din system32 mappe. Når du vælger denne dll fil dukker "Microsoft Internet Controls" op i listen. Tjek den af og tryk på OK. Nu skulle du være kørende...
Avatar billede rabitjosph Juniormester
22. juni 2007 - 17:16 #6
Er der en der kan hjælpe med hvad jeg skal skrive som sti og navn eks. vis

SendKeys HdSti, True 'Angiv sti og filnavn html siden skal gemmes under

Jeg har lavet denne linie men det virker ikke
SendKeys HdSt = "C:\fjols\", True 'Angiv sti og filnavn html siden skal gemmes under

Thx
Avatar billede rabitjosph Juniormester
23. juni 2007 - 07:42 #7
Hej

Nu er jeg kommet så langt at jeg har fået sat flueben ud for "Microsoft Internet Controls" under referencer ved brug af trl+t, så er det i orden.

SendKeys HdSt = "C:\fjols\", True 'Angiv sti og filnavn html siden skal gemmes under
Når makro udføre denne linie, kan jeg ikke se at der sker noget ?, jeg kan ikke finde en fil på C drev der hedder fjols.

Stadig ingen der kan give en hint til hvad jeg laver fejl ?
Avatar billede rabitjosph Juniormester
23. juni 2007 - 09:31 #8
Hej igen

Nu er jeg kommet noget længere, det viser sig at man ikke kan køre
makroen med F8, den skal afspilles i et hug, og så virker den næsten

Der er lige denne linie der giver False, hvorfor ?
SendKeys HdSt = "fjols", True 'Angiv sti og filnavn html siden skal gemmes under

Den gemmer filen som False på mit skrivebord.

Hvordan skriver jeg sti og filnavn i koden ?

God weekend til alle
Avatar billede kjulius Novice
23. juni 2007 - 11:27 #9
Hvis du skriver SendKeys HdSt = Fjols, så beder du den i virkeligheden om at sende svaret på om (HdSt = "Fjols"). Hvis de to strenge er ens vil den skrive True ellers vil den skrive False.
Du kan enten i forvejen assigne en værdi til variablen HdSt, f.eks. HdSt = "Fjols.htm" og så skrive SendKeys HdSt
eller du kan skrive SendKeys "Fjols.htm" direkte.
Avatar billede rabitjosph Juniormester
23. juni 2007 - 12:59 #10
Lige en sidste ting

SendKeys HdSt, True 'Angiv sti og filnavn html siden skal gemmes under

Hvordan ser det ud hvis min sti er sådan

C:Dokumenter/biler/Fjols.htm
Avatar billede kjulius Novice
23. juni 2007 - 21:19 #11
Jeg kan se to ting, som kan give problemer:

1) C:Dokumenter...
Hvis du skal angive en hel sti, bør du altid starte med en backslash straks efter C: - på den måde sikrer du dig, at stien starter fra roden. Instruktionen C: vil bare skifte til C-drevet (til den mappe, som den normalt står på eller den mappe der blev brugt sidst. Hvis der så ikke er en mappe der hedder Dokumenter her, vil det kunne give problemer.

2) Under windows bør du til forskel fra en web-url bruge en backslash i stedet for en forwardslash, altså \ i stedet for /.
Avatar billede kjulius Novice
23. juni 2007 - 21:31 #12
Måske også en 3. ting:

Den normale Dokumenter-mappe ligger ikke i roden, men under dit brugernavn:

C:\Documents and Settings\kjulius\Dokumenter
eller
C:\Documents and Settings\All Users\Dokumenter

Det er måske ikke umiddelbart indlysende, fordi Dokumenter ligger som en mappe umoddelbart under Denne Computer, men her er tale om en link til disse underliggende mapper.

Men du kan selvfølgelig oprette en mappe som hedder Dokumenter andre steder også...
Avatar billede rabitjosph Juniormester
24. juni 2007 - 06:29 #13
Mange

Thx kjulius
Avatar billede kjulius Novice
24. juni 2007 - 12:12 #14
De nada! :-)
(spansk for "Ingen årsag!")
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
Kurser inden for grundlæggende programmering

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