Ylikerroin.com
Suomen suurin vedonlyöntisivusto
Tänään on 24.01.2018, 12:15

Kaikki ajat ovat UTC + 2 tuntia



Aloita uusi ketju Vastaa viestiin  [ 11 viestiä ] 
Kirjoittaja Viesti
 Viestin otsikko: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 16:20 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Pistetään tähän S.Mäenalan ketjujen rinnalle tällainen koodipätkäketju. Koska aivan ilmiselvästi VBA-koodaajien määrä palstalla tulee S.Mäenalan kurssin johdosta kasvamaan, niin tällekin ketjulle saattaa, varsinkin tulevaisuudessa, olla käyttöä. Itse kuulun joukkoon joka oppii esimerkin avulla ihan kohtuullisesti ja oletan, että niin tekee moni muukin, joka SM:n kurssille osallistuu. Olen yrityksen ja erehdyksen kautta, tietämättä mitään koodaamisesta, kaivanut netistä koodin pätkiä ja pistänyt parhaat talteen ja saanut aikaan ihmeellisiä "ohjelmakokonaisuuksia". Käytettäneen tässä ketjussa seuraavaa koodia:

1. vain VBA-koodeja tähän ketjuun
2. ei makronauhoituksella tehtyjä koodeja, koska ne kaikki pystyy tekemään itsekin
3. koodi "code"-tägiin
4. perään koodin selväkielinen selostus

Pidemmittä viivyttelemättä (seuraavissa viesteissä):
4

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...


Viimeksi muokannut lammpa-1 päivämäärä 10.10.2014, 16:24, muokattu yhteensä 1 kerran
Ylös
  Profiili Seuranta
 
10.10.2014 16:49 <S.Mäenala> Tätä juuri on modulaarinen ohjelmointi! Itsellänikin suuri..
10.10.2014 16:50 <S.Mäenala> moduulikirjasto, josta testattuja koodeja on mukava poimia.
10.10.2014 16:54 <S.Mäenala> Tuon allaolevan tapaisia jokainen kurssilainen naputtelee..
10.10.2014 16:54 <S.Mäenala> tuota pikaa.. ;)
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 16:21 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Koodi:
Sub ConvertTextToDate()

Range("tähän haluttu solu").Select

Dim Current_Date As Date
Dim Date_String As String

    Date_String = ActiveCell.Value
    Current_Date = CDate(Date_String)
    ActiveCell.Value = Current_Date

End Sub


Muuttaa halutun solun tekstimuodossa olevan päivämäärän Excelin ymmärtämään päivämäärämuotoon.
2

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 16:29 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Koodi:
Sub LastUsedCellColumn()

        Range("A:A" & Cells.Rows.Count).End(xlUp).Select

End Sub


Valitsee A-sarakkeen viimeisen solun jossa tietoa. Toimii myös sarakkeessa, jossa tyhjiä soluja välissä.
2

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 16:37 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Usein jotain koodin pätkää pitää kierrättää syystä tai toisesta:

Koodi:
For i = 1 to rows.count

"koodinpätkä tähän"

next i


Ylläoleva esimerkki kierrättää kaikki rivit, eli +65k vanhoissa versioissa ja +1M uusissa versioissa.

Koodi:
For i = 1 to 30

"koodinpätkä tähän"

next i


Tämä taas kierrättä vain 30 kertaa (eikä riveillä ole mitään tekemistä asian kanssa).
2

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 16:41 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Koodi:
Dim FindString As String
Dim Rng As Range
                   
                    FindString = "tähän se merkkijono jota etsitään"
                        If Trim(FindString) <> "" Then
                            With Sheets("Sheet1").Range("tähän se alue, jolta merkkijonoa etsitään")
                                Set Rng = .Find(What:=FindString, _
                                    After:=.Cells(.Cells.Count), _
                                    LookIn:=xlValues, _
                                    Lookat:=xlWhole, _
                                    SearchOrder:=xlByRows, _
                                    SearchDirection:=xlNext, _
                                    MatchCase:=False)
                                If Not Rng Is Nothing Then
                                    'Application.Goto Rng, True
                                    Rng.Activate
                                Else
                                End If
                            End With
                        End If


Hakee halutulta solualueelta haluttua merkkijonoa ja aktivoi solun löydettyään sen.
3

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 17:06 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Internet Exploreria voi myös käskyttää VBA:lla (itse asiassa käytännössä kaikkia Microsoftin ohjelmia voi käskyttää VBA:lla):

Koodi:
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")

    With IE
        .Visible = False
        .Navigate ActiveCell.Offset(x,y).Hyperlinks(1).Address
        Do Until .ReadyState = 4: DoEvents: Loop 'wait until loaded
    End With

IE.Quit
IE.Quit


X = aktiivisesta solusta X kpl pystysuunnassa poikkeava solu
Y = aktiivisesta solusta Y kpl sivuttaissuunnassa poikkeava solu

Käskee IE:a surffaamaan ko solussa olevan Hyperlinkin takana olevaan osoitteeseen ja odottaa että sivu on kokonaan ladattu. (Sitten voi käskeä IE:a tekemään jotain muuta....)

Muita tapoja käskeä IE:a surffamaan osoitteeseen:

Koodi:
Set IE = CreateObject("InternetExplorer.Application")

            With IE
                .Visible = False
                .Navigate ActiveCell.Offset(x,y)
                    Do Until .ReadyState = 4: DoEvents: Loop
                                         
            End With

IE.Quit
IE.Quit


Käskee IE:a surffaamaan osoitteeseen, joka on tekstimuodossa x-solua alhaalla ja y-solua oikealla aktiivisesta solusta. Miinusmerkillä saa luonnollisesti muutettua surffaussolua ylös tai vasemmalle....

Koodi:
Set IE = CreateObject("InternetExplorer.Application")

            With IE
                .Visible = False
                .Navigate "www.ylikerroin.com"
                    Do Until .ReadyState = 4: DoEvents: Loop
                                         
            End With

IE.Quit
IE.Quit


Sitten voi tietty käskyttää IE:a surffaamaan johonkin kiinteään osoitteeseen, kuten yllä....

"IE.Quit"-käsky tavataan laittaa aina kahteen kertaan, koska tunnetusti MS-ohjelmat eivät koskaan tee sitä mitä käsketään :mrgreen: , eikä IE-objektia haluta jättää taustalle kuluttamaan muistia...
3

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...


Viimeksi muokannut lammpa-1 päivämäärä 10.10.2014, 17:14, muokattu yhteensä 1 kerran
Ylös
  Profiili Seuranta
 
10.10.2014 17:18 <lammpa-1> näissä esimerkeissä IE pyörii vain taustalla
10.10.2014 17:19 <lammpa-1> jos haluaa, että IE näkyy, niin
10.10.2014 17:19 <lammpa-1> .visible = True
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 17:11 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Kun on käskenyt IE:a surffaamaan johonkin osoitteeseen, niin voi käskyttää IE:n valisemaan koko sivun ja kopioimaan sen:
Koodi:
IE.ExecWB 17, 0 ' valitsee koko sivun
IE.ExecWB 12, 2 ' kopioi valinnan
2

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 10.10.2014, 23:52 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Kun IE on saatu VBA:lla auki, on joskus tarvetta "klikata" jotakin linkkiä avatulla sivulla. No normaaleiden linkkien pinpauttelu ei pitäisi olla ongelma, mutta javascriptillä tehtyjen välilehtien ja/tai nappuloiden painelu voi aiheuttaa päänvaivaa. Näin se käy ja niin se on....

Koodi:
For Each obj In ie.document.all
    If InStr(obj.innerHTML, "tähän nappulassa tai välilehdessä oleva teksti") > 0 Then
        obj.Click
        obj.FireEvent ("onclick")
    End If
Next
3

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...


Viimeksi muokannut lammpa-1 päivämäärä 11.10.2014, 07:48, muokattu yhteensä 1 kerran
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 11.10.2014, 00:02 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
IE on siitä *askamainen, että se ilmoittaa olevansa valmis (sivu ladattu), vaikkei se oikeasti olekaan... siksi useimmiten, kun käyttää tuossa ylempänä olevaa koodia IE:n avaamiseen ja sieltä tiedon tonkimiseen, niin ei saa muuta kuin harmaita hiuksia, koska VBA kaivaa sivun itselleen HTML-dokumenttina ja vaikka periaatteessa sivun lataus on valmis, ei HTML-dokumentti olekaan vielä latautunut -> VBA kaivaa tyhjää.... siksipä useimmiten kannattaa käyttää tällaista koodia:
Koodi:
Set IE = CreateObject("InternetExplorer.Application")

            With IE
                .Visible = False
                .Navigate "www.ylikerroin.com"
                    Do Until .ReadyState = 4: DoEvents: Loop
                    Application.Wait (Now + TimeValue("0:00:02"))                   
            End With

IE.Quit
IE.Quit

Eli ensin käsketään IE jollekin sivulle ja sitten käsketään odottaa, että sivun lataus on valmis.... ja sitten käsketään odottaa vielä 2 sekuntia, että VBA saa alkaa tonkimaan tietoa. Joillain sivuilla tuota lisäviivästystä ei tarvita, joillain riittää sekunti jotkut tarvii enemmän....
3

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 11.10.2014, 00:21 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Joillain webbisivuilla on *ittumaisesti "piilotettu" taulukot siten, että niitä ei saakaan IE:n kautta kaivettua. Silloin voidaan mennä pyytämään webbiserveriltä lupaa tonkia suoraan HTML-koodia:

Koodi:
Sub GetOneTable()

Dim Document As Object
Dim StatementTable As HTMLTable

Set Document = CreateObject("HTMLFile")

    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://www.betexplorer.com/soccer/england/conference-premier/", False
        .send
            Do: DoEvents: Loop Until .readyState = 4
            Document.body.innerHTML = .responseText
        .abort
    End With

Set StatementTable = Document.getElementById("league-summary-next")

With StatementTable
    For r = 0 To .Rows.Length - 1
        For c = 0 To .Rows(r).Cells.Length - 1

            Sheets("Sheet1").Cells(r + 1, c + 1).Value = .Rows(r).Cells(c).innerText
        Next c
    Next r
End With

End Sub


Toi hässäkkä jossa on r- ja c- kirjaimia "parseroi" eli jaottelee haetun taulukkomuotoisen datan Excelissäkin taulukkomuotoon.
4

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
 Viestin otsikko: Re: Excel-koodinpätkiä vedonlyöjälle
ViestiLähetetty: 11.10.2014, 07:43 
Avatar
Status: JäsenLiittynyt: 20.01.2007, 11:16Viestit: 2186
Pisteitä: 873
Kassa: +96.12 yks. Palautus%: 111.49% Panosten ka: 2.56 yks. Vetoja: 327
Koodi:
Dim MyRange As Range
             
                For Each MyRange In ActiveSheet.UsedRange
                    If 0 < InStr(MyRange, Chr(10)) Then
                    MyRange = Replace(MyRange, Chr(10), "")
                    End If
                Next
                For Each MyRange In ActiveSheet.UsedRange
                    If 0 < InStr(MyRange, Chr(13)) Then
                    MyRange = Replace(MyRange, Chr(13), "")
                    End If
                Next
               

Joskus nuo netissä olevat taulukot saattavat sisältää p*skamaisia merkkejä, jotka "sekoittavat" excelin. Nuo Chr(10) ja Chr(13) ovat mm sellaisia. Taitavat olla jotain Unixin rivinvaihtoja tms. Joka tapauksessa nämä merkit aiheuttavat sen, että solussa oleva teksti rivittyy solun sisällä ja sitten on vaikea päästä käsiksi muuhun kuin ekalla rivilla olevaan dataan. Tällä koodin pätkällä nuo "rivinvaihdot" poistetaan, jolloin kaikki solussa oleva data rivittyy ekalle riville ja on normaalisti manipuloitavissa.
3

_________________
Panokseni ovat 0-10 yksikköä. 10 yksikköä = 2% kassasta.
You bet your money and in the worst case you can only lose.... bet your ass and you might really get hurt...
Ylös
  Profiili Seuranta
 
11.10.2014 09:10 <Henkka> Kuuden tunnin unet ja koodailu jatkukoon :D
11.10.2014 10:04 <lammpa-1> jep :)
11.10.2014 10:49 <Pontus> Koodari nukkuu vain vartin pätkissä
13.10.2014 17:17 <mikko> Nää pitää nyt sisäistää.
Näytä viestit ajalta:  Järjestä  
Aloita uusi ketju Vastaa viestiin  [ 11 viestiä ] 

Kaikki ajat ovat UTC + 2 tuntia


Paikallaolijat

Käyttäjiä lukemassa tätä aluetta: Ei rekisteröityneitä käyttäjiä ja 4 vierailijaa


Et voi kirjoittaa uusia viestejä
Et voi vastata viestiketjuihin
Et voi muokata omia viestejäsi
Et voi poistaa omia viestejäsi
Et voi lähettää liitetiedostoja.

Hyppää:  


Powered by phpBB © 2008 phpBB Group | Käännös, Lurttinen, www.phpbbsuomi.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye