Just nu i M3-nätverket
Gå till innehåll

få excel hämta data från CSV automatiskt


MaxRoyale

Rekommendera Poster

Är det möjligt att få excel hämta data automatisk från en CSV fil som finns på en websida som uppdateras ett par gånger i veckan.

 

http://www.football-data.co.uk/englandm.php

 

Jag för detta manuellt nu, men håller på med flera ligor samtidigt så det tar väldigt mycket tid.(tar ner filen naturligt vis)

 

Från det här vill jag ta ut data hur Arsenal spelat hemma, borta ,HT/FT, mål , hörnor, skott på mål osv.

för att kunna jämföra lagen i mellan.

 

Kollar även  HT/FT resultat i ligan osv.

 

Förstår att det är mycket jobb med detta. Och vill inte ha steg för steg guide (kanske det första steget) :D  men jag vill och försöker lära mig själv något med det här. Men vad det är för formel och osv, skulle uppskattas.

 

Använder excel 2010

 

Kari

 

 

Länk till kommentar
Dela på andra webbplatser

Sätt upp en webbfråga, bocka i att den ska uppdateras när Excel öppnas. Det är allt som krävs.

Ivartfall om filnamnet/sökvägen till CSV-filen är konstant.

 

Sedan kanske det krävs lite formler för att formatera dina data även om Excel borde kunna köra sin text-till-kolumn-funktion automatiskt vid importen.

Länk till kommentar
Dela på andra webbplatser

Oops, det kanske inte var så enkelt som jag trodde.

 

nog faktiskt som så att man måste ta till VBA för att fixa det automatiskt. Måste nog testa lite och få återkomma en annan dag.

Länk till kommentar
Dela på andra webbplatser

Nu har jag letat och provat i 4 dagar men kommer inte på någon lösning på detta.

Men har hittat något på Youtube och en webbsida där han säger sig kunna göra det jag vill.

 

Här kommer länkar:

 

http://www.youtube.com/watch?v=kNB28PFck7s

 

http://www.myengineeringworld.net/2013/11/excel-vba-download-internet-files.html

 

Har laborerat med coden från sista länken. 

Men får det inte och funka.

 

Länk till kommentar
Dela på andra webbplatser

Plockar upp lite kod ur en gammal bok och se med ett litet tillägg fungerar den

Sub HTMLGet()
    Dim strUrl As String
    strUrl = "http://www.football-data.co.uk/mmz4281/1314/E0.csv"
    Dim objHTTP As WinHttpRequest
    Set objHTTP = New WinHttp.WinHttpRequest

    objHTTP.Open "GET", strUrl, False
    objHTTP.Send
 
    MySep objHTTP.responsetext
    Set objHTTP = Nothing
    
End Sub

Sub MySep(strData As String)

    Dim strTemp As Variant
    Dim i As Integer
    strTemp = Split(strData, Chr(10))
    Dim strSplits As Variant
    Dim totalVals As Long
    Dim innerTotals As Long
    totalVals = UBound(strTemp)
    For i = 0 To totalVals - 1
        strSplits = Split(strTemp(i), ",")
        Me.Cells(i + 1, 1).Resize(1, UBound(strSplits)).Value = strSplits
    Next i

End Sub

Tre saker

1: Du måste lägga till en referens till Microsoft WinHTTPRequest i VBA-editorn. (okej kan skriva om så att det blir en mjuk referens om du vill)

2: Del ett av koden skickar en förfrågan och hämtar filen. Kan vara precis vilken fil som helst, nu i detta fall en CSV. Allt i en variabel, dvs finns säkert någon minnesgräns...

3: Del två av koden delar CSV-filen först i rader och sedan i kolumner och skriver det till önskad cell (cell A1 på bladet koden körs ifrån ovan).

 

Dvs anpassa/uppdatera så att del ett av koden kan ta som argument exempelvis fil att hämta och var den ska skrivas. Uppdatera del två av koden så att den tar emot cell där den ska börja skriva.

Länk till kommentar
Dela på andra webbplatser

man skulle iofs kunna skriva ut raderna utan att kommaseparera och låta Text-till-Kolumner-verktyget arbeta istället, då skulle nog datum och tal formateras rätt.

Länk till kommentar
Dela på andra webbplatser

får ett kompileringsfel

egendefinierad typ har inte definierats

 

och objHTTP As WinHttpRequest  är markerad.

fast du sa redan att det behövde lägga till referens.

 

det här är helt nytt för mig har aldrig hållit på med vba så jätte bra att du förklarar lite vad det ska göra i koden. 

 

Vad gör Dim i koden, bara lite nyfiken  :unsure:

Och vad menar du med mjuk referens,

 

skulle man få Text-till-Kolumner-verktyget att göra det automatisk oxå?

Länk till kommentar
Dela på andra webbplatser

Du måste lägga till en referens till, skrev visst fel ovan, Microsoft WinHTTP Services 5.1 i VBA-editorn

post-8996-0-34723400-1385121732_thumb.png

 

Dim - definierar variabler. :-)

Aldrig programmerat förr?

 

 

Mjuk referens (sen bindning är nog korrekt ord), då slipper man lägga till referensen ovan innan kompilering. Får då skriva lite annorlunda i koden:

    Dim objHTTP As Object
    On Error Resume Next
    Set objHTTP = CreateObject("WinHTTP.WinHTTPrequest.5")  '("WinHttp.WinHttpRequest")
    If Err.Number <> 0 Then
        Set objHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
    End If
    On Error GoTo 0

Text-Till-Kolumner, ja som andra steg i koden skulle den gå att utnyttja tror jag. Dvs skriver ut raderna och sedan kör man den... ja såhär:

Sub MySep(strData As String)
    Application.ScreenUpdating = False
    Dim strTemp As Variant
    Dim i As Integer
    strTemp = Split(strData, Chr(10))
    Dim strSplits As Variant
    Dim totalVals As Long
    Dim innerTotals As Long
    totalVals = UBound(strTemp)
    With Me ' Me - det blad koden är skriven på, ändra till blad du vill att det ska hamna på.
        For i = 0 To totalVals - 1 'skriver ut raderna
            .Cells(i + 1, 1).Value = strTemp(i)
        Next i
        With .Cells(1, 1)
            .Resize(totalVals + 1).TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 4)), DecimalSeparator:=".", TrailingMinusNumbers:=True
        End With
    End With
    
    Application.ScreenUpdating = True
End Sub

Notera Me-referensen.

 

Länk till kommentar
Dela på andra webbplatser

fick fel i Dim objHTTP As Object men bytte till den första så funkar det bra.

 

en fråga, så varje gång jag öppnar den här boken så kör den vab eller

 

Nej aldrig programmerat eller nja började för typ 20 år sedan med C++ men tiden fanns inte så det rann ut i sanden, är envis och nyfiken på hur saker fungerar så det kan man komma långt med det.  :D 

 

Några bra böcker om vab att rekommendera ?

 

Förresten LETARAD  formeln kan man få fram flera kolumner med det.

min tanke med det är att få fram  rad 16 arsenal, med kolumnerna C,D,E,F osv.

och kopiera dom i ett annat blad. 

Eller går det att få automatisk till ett annat blad med annat sätt?  :P

Länk till kommentar
Dela på andra webbplatser

Fel i Dim objHTTP As Object?

 

Fast det fungerade med att sätta referens... då kanske vi inte ska rota i det även om det är lite konstigt.

 

Du menar att Excel frågar om VBA-kod varje gång du öppnar den. Du har Excel 2007?

Öppna Arkiv -> Alternativ -> Säkerhetscenter -> Inställningar -> Betrodda platser

Lägg där till den mapp/en mapp där du du har/lägger dina betrodda Excel-filer.

Ligger de i denna mapp slipper du VBA-varning.

 

Hitta värden. Jag rekommenderar dig att använda PASSA för att hitta raden du vill hämta värden från och INDEX för att hämta de värden du önskar.

ta en titt på dessa och se om du lyckas. Alltså skriv PASSA i en kolumn och använd det den hittar för flera INDEX i andra kolumner.

 

Böcker om VBA, nej tyvärr. Mycket finns på webben....

Länk till kommentar
Dela på andra webbplatser

  • 3 months later...

Hej igen!

 

Har fått ett fel meddelande i makron, kompileringsfel: förväntas: uttruck

 

det blir när jag kör kompilerar VBAProject.

 

 

 

Privet sub Workbook_open()
LoopThroughDirectory
End Sub
 
Private Sub Workbook_Open()
 
End Sub
 
 
 
Den pekar på sub i första raden.
 
Men kör jag makron så kommer inte felet upp  och den fungera som den ska.
Nu skulle jag köra samma i min nya dator så fungerar det inte och kompilerings felet dyker upp med en gång.
 
Den funkar i W 7, Office Professional Plus 2010 x86
 
Men inte alls i W 8, Office Professional Plus 2010 x64.
 
Har det med referenserna att göra?
Länk till kommentar
Dela på andra webbplatser

VBA i 64 bit version av Excel är något helt annat än VBA i 32 bit version, jag har aldrig ens försökt få igång VBA under 64 bit.

 

Läs mer här

http://msdn.microsoft.com/en-us/library/ee691831%28v=office.14%29.aspx

och här

http://stackoverflow.com/questions/4251111/how-to-make-vba-code-compatible-for-office-2010-64-bit-version-and-older-offic

exempelvis.

 

men att du tycks få den att köra när du kör det manuellt ger ju att koden fungerar även i 64 bit.

 

Testa att registrera om/reparera Excel.

http://support.microsoft.com/kb/291288/sv

Länk till kommentar
Dela på andra webbplatser

Ah,. okej, det är i x86-version det bråka, i x64 fungerar det inte alls.

 

mmh, ja, kan vara något med referenserna som gått galet. Som sagt, en omregistrering av Excel kan lösa problem som detta. Se sista länken i inlägget ovan.

 

Annars, om du tar upp VBA-editorn, menyn Verktyg -> Referenser, vilka finns förbockade där?

Länk till kommentar
Dela på andra webbplatser

Visual Basic For Applications

Microsoft Excel 14.0 Object Library

OLE Automation

Microsoft Office 14.0 Object Library

Microsoft WinHTTP Service, version 5.1

Länk till kommentar
Dela på andra webbplatser

Inget konstigt där...

Och om du skapar en helt ny arbetsbok, skapar lite kod i denna som körs automatiskt, fungerar den?

 

Typ


Private Sub Workbook_Open()
    MyTest
End Sub


Sub MyTest()
    MsgBox "Hello World"
    Application.StatusBar = "**** HELLO WORLD ****"
End Sub
Länk till kommentar
Dela på andra webbplatser

Makron sparas inte.

 

hmm

 

När jag skriver in koden och kör den då funkar den, men när jag spara den i den betrodda mappen så sparas inte koden.

Länk till kommentar
Dela på andra webbplatser

Du får stega genom koden du har för att se var den fallerar då.

 

Anar att det har att göra med API-anrop utanför egentliga Excel. Det är koden ovan, i inlägg #9 du använder eller?

 

Kanske det går att skriva om för att fungera även i 64 bit.

Fast nu är jag lite konfunderad på vad målet i denna tråd är

Att få det att fungera på nya datorn i 32 bit eller få det att fungera i 64 bit?

man kan generellt säga att 64 bit version av office är inget en privatperson, och knappt några andra, behöver.

Länk till kommentar
Dela på andra webbplatser

Det sista jag skrivit om är inlägg #17.

 

Det du har hjälp med tidigare i den här tråden, den fungerar bara när jag går och kör makron manuellt när jag öppnar den boken.

 

Det gör inget isig, det kan jag göra men antar att det skulle köras automatiskt när man öppnade excel boken eller?

 

Nu är det så att jag köpt en ny laptop som är 64 bits, och då installerade jag 64 bits Office 2010 i den. Eller går det köra 32 bits i den då?

 

För vad jag förstår så fungerar inte makron från 32 bit i 64 bit om man inte ändrar i koden. Och det blir ju fel när jag försöker öppna excel boken i laptopen (den du hjälp med i den här tråden).

Länk till kommentar
Dela på andra webbplatser

32 bit program går utmärkt att köra på Win 64. Inga problem, fullt stöd finns i Windows.

 

Makron 32 kontra 64 bit. Nja allt behöver nog inte skrivas om, jag har iofs inte testat, det är vissa saker som ändrats och inte fungerar.

Exempelvis kan jag tänka mig att API-anrop utanför Excel (som WinHTTP) kan ge problem.

 

Stoppa in några Debug.Print i koden, skriv ut procedur och rad/index. Då kan vi se, även när du öppnar boken, hur långt koden kommer. För koden startar när du öppnar en bok men den kan inte köras klart?

Länk till kommentar
Dela på andra webbplatser

Jaha men då glömmer vi 64 bit. Då gör jag en ominstallation på Office bara.

 

Alltså makron gör det jag vill, det är bara det att jag förståd det fel antagligen.

 

Jag trodde att makron skulle köra automatisk när jag öppnar boken.

Men det gör inget, det går alldeles utmärkt att jag går in och kör makron själv.

Länk till kommentar
Dela på andra webbplatser

Som sagt, felsök med Debug.print. Kanske det ger något.

Svårt att felsöka vid uppstart.

 

Om du nu vill undersöka det. Jag har inte blekaste aning om varför det bråkar.

Jo, testa att byta mellan mjuk och hård bindning till WinHTTP, kanske där det bråkar?

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...