Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

makro ignore when empty

[es] :: Office :: Excel :: makro ignore when empty

[ Pregleda: 2171 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ramzesIV

Član broj: 263681
Poruke: 149
*.univie.teleweb.at.



+6 Profil

icon makro ignore when empty10.08.2011. u 17:53 - pre 154 meseci
sta da dodam u makro, tako u slucaju da nema trece kolone da ignorise gresku i da downloaduje podatke iz prve dve kolone.

u mom slucaju radi se o koloni O

on izgleda ovako: i sta god da napisem, stalno mi javlja gresku.


Code:
If WinHttpReq.Status = 200 Then
        Lines = Split(response, "" & Chr(10) & "")
        heads = Split(Lines(0), ",")
        
        DataSheet.Range("M1").Value = heads(0)
        DataSheet.Range("N1").Value = heads(1)
        If index_bm > -1 Then
            DataSheet.Range("O1").Value = heads(2)
        End If
        For i = 1 To UBound(Lines)
            If Lines(i) <> "" Then
                s = Split(Lines(i), ",")
                d = DateValue(s(0))
                
                DataSheet.Range("M" & (i + 1)).Value = d
                DataSheet.Range("N" & (i + 1)).Value = s(1)
            
                If index_bm > -1 Then
                    DataSheet.Range("O" & (i + 1)).Value = s(2)
                    DataSheet.Range("O" & (i + 1)).NumberFormat = "0.00%"
                End If
                DataSheet.Range("M" & (i + 1)).NumberFormat = "m/d/yyyy"
                DataSheet.Range("N" & (i + 1)).NumberFormat = "0.00%"
            End If
        Next i
    Else
        MsgBox "Fund series download failed."
    End If
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
194.106.170.*

Sajt: www.gowi.rs


+109 Profil

icon Re: makro ignore when empty11.08.2011. u 14:04 - pre 154 meseci
Nisi navela kakva greška se javlja. Ovaj kod ja ne mogu kod sebe da reprodukujem pa mogu samo napamet da pričam. Nisam siguran kako je deklarisan niz s

U postojećem if uslovu proveri UBOUND(s) pa samo ako je veće od 1 obavi uspis u kolonu O.
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

ramzesIV

Član broj: 263681
Poruke: 149
*.univie.teleweb.at.



+6 Profil

icon Re: makro ignore when empty11.08.2011. u 14:52 - pre 154 meseci
kod u potpunosti izgleda ovako:

ovaj makro treba da vraca rezultat u 3 kolone. u prvoj su datumi (kolona M), a u drugoj (to je idn i kolona N) i trecoj (bm i kolona O) podaci.
postoji slucaj kad nema trece kolone, ja hocu da u slucaju kad nema trece kolone, ignorise to i downloaduje prvu i drugu kolonu.
sta god pokusam, samo mi se pojavi msgbox.
-postoji li mogucnost, da kad napisem npr startdate 01.01.2011, a lista postoji tek od 01.03.2011, da u ovom periodu ispise neki broj (npr 100) i onda od 01.03.2011 da nastavi sa podacima koji su vec dostupni. nesto kao if empty, ne da javlja kao gresku vec da upise 100.





Code:
Function find_index(list, item)
    For i = 0 To UBound(list)
        If list(i) = item Then
            find_index = i
            Exit Function
        End If
    Next i
    find_index = -1
End Function

Sub GetFundPlusBM()
    Dim QuerySheet As Worksheet
    Dim DataSheet As Worksheet
    Dim EndDate As Date
    Dim StartDate As Date
    Dim Symbol As String
    Dim qurl As String
    Dim d As Date
    

   Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
    
    Set DataSheet = ActiveSheet
  
    StartDate = DataSheet.Range("B2").Value
    EndDate = DataSheet.Range("B3").Value
    Symbol = DataSheet.Range("B8").Value
        
    'construct the URL for the query
    qurl = "http://pmtest:8090/xmlrpc/seri...ance_series_csv?show_bm=1&" & "fund_idn=" & Symbol
    qurl = qurl & "&startdate=" & Format(StartDate, "yyyymmdd")
    qurl = qurl & "&enddate=" & Format(EndDate, "yyyymmdd")
    
    DataSheet.Range("A13").Value = qurl
    DataSheet.Range("M:O") = Clear
    
    
    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", qurl, False
    WinHttpReq.Send
    
    response = WinHttpReq.responseText
    On Error Resume Next
    
    If WinHttpReq.Status = 200 Then
        Lines = Split(response, "" & Chr(10) & "")
        heads = Split(Lines(0), ",")
        
        DataSheet.Range("M1").Value = heads(0)
        DataSheet.Range("N1").Value = heads(1)
        If index_bm > -1 Then
            DataSheet.Range("O1").Value = heads(2)
        End If
        For i = 1 To UBound(Lines)
            If Lines(i) <> "" Then
                s = Split(Lines(i), ",")
                d = DateValue(s(0))
                
                DataSheet.Range("M" & (i + 1)).Value = d
                DataSheet.Range("N" & (i + 1)).Value = s(1)
            
                If index_bm > -1 Then
                    DataSheet.Range("O" & (i + 1)).Value = s(2)
                    DataSheet.Range("O" & (i + 1)).NumberFormat = "0.00%"
                End If
                DataSheet.Range("M" & (i + 1)).NumberFormat = "m/d/yyyy"
                DataSheet.Range("N" & (i + 1)).NumberFormat = "0.00%"
            End If
        Next i
    Else
        MsgBox "Fund series download failed."
    End If
    
    Range("A1").Select
End Sub
Prikačeni fajlovi
 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
194.106.170.*

Sajt: www.gowi.rs


+109 Profil

icon Re: makro ignore when empty11.08.2011. u 16:00 - pre 154 meseci
Nisam uspeo da startujem makro iz tvoje radne sveske. Pretpostaljam da treba dodati neke reference ali nemam sad vremena da trazim to.

Da li si probala ovo što sam naveo gore i šta se dešava?

-Funkcija find_index ti se nigde ne zove
-Promenljiva index_bm nije deklarisana i nigde se ne menja tako da je uvek 0 tako da postojeći if nema nikakve svrhe


Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

ramzesIV

Član broj: 263681
Poruke: 149
*.univie.teleweb.at.



+6 Profil

icon Re: makro ignore when empty12.08.2011. u 13:32 - pre 154 meseci
Code:
Function find_index(list, item)
    For i = 0 To UBound(list)
        If list(i) = item Then
            find_index = i
            Exit Function
        End If
    Next i
    find_index = -1
End Function

Sub GetFundPlusBM()
    Dim QuerySheet As Worksheet
    Dim DataSheet As Worksheet
    Dim EndDate As Date
    Dim StartDate As Date
    Dim Symbol As String
    Dim qurl As String
    Dim d As Date
    Dim index_bm As String
     
    

    Application.DisplayAlerts = True
    Application.Calculation = xlCalculationAutomatic
    
    Set DataSheet = ActiveSheet
  
    StartDate = DataSheet.Range("B2").Value
    EndDate = DataSheet.Range("B3").Value
    Symbol = DataSheet.Range("B8").Value
   index_bm = 1
        
    'construct the URL for the query
    qurl = "http://pmtest:8090/xmlrpc/series/rpc_fund_performance_series_csv?"
    qurl = qurl & "show_bm=" & index_bm & "&fund_idn=" & Symbol
    qurl = qurl & "&startdate=" & Format(StartDate, "yyyymmdd")
    qurl = qurl & "&enddate=" & Format(EndDate, "yyyymmdd")
    
    DataSheet.Range("A13").Value = qurl
    DataSheet.Range("M:O") = Clear
    
    
    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", qurl, False
    WinHttpReq.Send
    
    response = WinHttpReq.responseText
    On Error Resume Next
    
    If WinHttpReq.Status = 200 Then
        Lines = Split(response, "" & Chr(10) & "")
        heads = Split(Lines(0), ",")
        
        index_date = find_index(heads, "date")
        index_fund = find_index(heads, "perf")
        index_bm = find_index(heads, "bm")
        
        DataSheet.Range("M1").Value = "Date"
        DataSheet.Range("N1").Value = "Fonds"
    If index_bm > 0 Then
            DataSheet.Range("O1").Value = "BM"
                 
        End If 
        
        For i = 1 To UBound(Lines)
            If Lines(i) <> "" Then
                s = Split(Lines(i), ",")
                d = DateValue(s(index_date))
                
                DataSheet.Range("M" & (i + 1)).Value = d
                DataSheet.Range("N" & (i + 1)).Value = s(index_fund)
            
                If index_bm > 0 Then
                    DataSheet.Range("O" & (i + 1)).Value = s(index_bm)
                    DataSheet.Range("O" & (i + 1)).NumberFormat = "0.00%"
                         
              End If
                DataSheet.Range("M" & (i + 1)).NumberFormat = "m/d/yyyy"
                DataSheet.Range("N" & (i + 1)).NumberFormat = "0.00%"
            End If
    Next i
    Else
        MsgBox "Fund series download failed."
    End If
    
    Range("A1").Select
End Sub



opet ne radi. sad sam uvela funkciju find_index (nadam se dobro),

mislim da je problem u samom URL jer tu stoji stalno bm=1

kad postoji kolona O (tj "BM") onda je bm=1 i onda radi makro, a kad ne postoji kolona O (onda javlja kao gresku, tj. MsgBox "Fund series download failed.")

kako da napisem, da kad bm nije =1 onda da ignorise. i da vraca samo prve dve kolone.

index_bm = 1
qurl = qurl & "show_bm=" & index_bm & "&fund_idn=" & Symbol

If index_bm > 0 Then
DataSheet.Range("O1").Value = "BM"

End If

i

 
Odgovor na temu

ramzesIV

Član broj: 263681
Poruke: 149
*.univie.teleweb.at.



+6 Profil

icon Re: makro ignore when empty12.08.2011. u 14:38 - pre 154 meseci
i jos jedno pitanje imam:

ovo je makro samo za jedan depo. moze li se dodati kod, tako da kad imam vise depoa, automatski izlista sve depoe. npr ako imam basket od 2 depoa, to bi bilo, prva kolona datum, pa dve kolone prvi depo, i dve kolone drugi depo.

 
Odgovor na temu

Jpeca
Predrag Jovanović
poslovni analitičar
Gowi
Pančevo

Moderator
Član broj: 25683
Poruke: 2268
194.106.170.*

Sajt: www.gowi.rs


+109 Profil

icon Re: makro ignore when empty15.08.2011. u 07:13 - pre 154 meseci
Adresa koja se poziva http://pmtest:8090/ nije javno dostupna i ja zato ne mogu da joj pristupim i da analiziram problem koji imaš.
Izmena koju si izvršila čini mi se uredu.

Ono što bi dalje trebalo proveriti je šta dobiješ nakon send. Postavi breakpoint na liniju
response = WinHttpReq.responseText
i tako zaustavi izvršavnje (detaljnije o debagovanjau http://www.cpearson.com/excel/Debug.htm).

U immediate window proveri
Da li je status = 200
Proveri šta imaš u response

Zavisno od rezultata vidi da ako je npr. response prazan ili sadrži neki karakterističan tekst, to možeš iskoristiti da ponovo pozoveš open/send ali sa drugim url (bm?).



[Ovu poruku je menjao Jpeca dana 15.08.2011. u 08:23 GMT+1]
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
 
Odgovor na temu

ramzesIV

Član broj: 263681
Poruke: 149
*.univie.teleweb.at.



+6 Profil

icon Re: makro ignore when empty16.08.2011. u 12:28 - pre 154 meseci
Jpeca, hvala na pomoci i na ideji. problem je resen jer, kolega koji je napravio "http://pmtest:8090/" nije napisao relaciju da ako nema trece kolone da ignorise excel. to njemu za web stranicu nije bilo potrebno. a ja izgubih 10 dana i nerviranja zbog toga.

moze li se u ovaj kod dodati da ako imam listu, recimo od 10 symbol-a, "&fund_idn=" & Symbol" da downloaduje celu tu listu.
mislila sam da napisem nesto kao for j = j+1; j= Symbol





 
Odgovor na temu

[es] :: Office :: Excel :: makro ignore when empty

[ Pregleda: 2171 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.