Copy tỷ giá ngoại tệ từ website của 12 tháng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hoamattroicoi

Thành viên gắn bó
Thành viên BQT
Moderator
Tham gia
19/12/10
Bài viết
2,587
Được thích
5,774
Nghề nghiệp
Công nhân vệ sinh số liệu
Em có nhu cầu cần lấy lại toàn bộ tỷ giá của 12 tháng từ ngày 01/01/2015 đến ngày 31/12/2015 từ 2 website :

1. Vietcombank :
https://www.vietcombank.com.vn/exchangerates/default.aspx
2. Eximbank :
https://www.eximbank.com.vn/home/Static/Exchangerate.aspx

Và copy vào 2 sheet VietCombank và Eximbank tương ứng như file đính kèm. Em đang cố gắng tìm cách nào giải pháp nào phù hợp để có thể copy một cách tự động nhưng chưa tìm được nên post bài lên đây. Nếu anh, chị hoặc sư phụ nào có phương án hay thì chia sẻ để em học hỏi với nhé.

Em xin cảm ơn.

HMT.
 

File đính kèm

tôi mới xem trang VietCombank thấy truy vấn chỉ cho phép lấy từng ngày thôi à
hoamattroicoi muốn lấy cả năm chắc chỉ có nước chạy code của từng ngày rồi ... đợi đến khi xong quá . !$@!!!$@!!!$@!!
trong khả năng của mình thì chỉ làm được có vậy , nếu không có ai tham gia cách nào khả quan hơn thì tôi mới bàn tiếp

=========================================================
đây là file lấy dữ liệu của Eximbank tặng các bạn
đối với Vietcombank các bạn xem code ở các bài phía dưới
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn doveandrose,

Nếu mình chạy từng ngày thì code chạy mất khoảng bao nhiêu thời gian để lấy được hết 12 tháng, nếu nhanh hơn làm thủ công thì vẫn tốt doveandrose ạ.

HMT.
 
Upvote 0
Cảm ơn bạn doveandrose,

Nếu mình chạy từng ngày thì code chạy mất khoảng bao nhiêu thời gian để lấy được hết 12 tháng, nếu nhanh hơn làm thủ công thì vẫn tốt doveandrose ạ.

HMT.
Vấn đề này có thể liên quan đến sự thiết lập hiển thị CSDL của nhà quản trị CSDL đó, họ chỉ cho phép chọn theo ngày thôi.
 
Upvote 0
Vấn đề này có thể liên quan đến sự thiết lập hiển thị CSDL của nhà quản trị CSDL đó, họ chỉ cho phép chọn theo ngày thôi.
Em cảm ơn anh,

Em không mong chờ giải pháp hoàn hảo, chỉ mong giảm thiếu tối đa thời gian có thể thôi ạ. Em không biết làm cách nào điều khiển được cái ô nhập ngày trên website đó để mình có thể đứng ở excel gõ ngày thì trang web đó tự load tỷ giá của ngày vừa nhập sau đó mình có thể tự động copy về vị trí mình đã định vị trong file excel tỷ giá ngày đó. Nếu làm được như thế cũng đã đỡ tháo tác với 2 cửa sổ rồi ạ.

Nếu anh có giải pháp gì hay thì chia sẻ cho em học hỏi với ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn anh,

Em không mong chờ giải pháp hoàn hảo, chỉ mong giảm thiếu tối đa thời gian có thể thôi ạ. Em không biết làm cách nào điều khiển được cái ô nhập ngày trên website đó để mình có thể đứng ở excel gõ ngày thì trang web đó tự load tỷ giá của ngày vừa nhập sau đó mình có thể tự động copy về vị trí mình đã định vị trong file excel tỷ giá ngày đó. Nếu làm được như thế cũng đã đỡ tháo tác với 2 cửa sổ rồi ạ.

Nếu anh có giải pháp gì hay thì chia sẻ cho em học hỏi với ạ.

ủa ở trên bạn nói là lấy hết cả năm 2015 mừ , sao xuống đây lại chỉ lấy 1 ngày . híc !$@!!!$@!!!$@!!

bạn cùng làm với tôi nhé , ở đây có 3 Sub
1/sub hello dùng để Post Request đến trang vietcombank

Mã:
Public Sub hello()
Dim doc As Object, req As Object, r As Long, arr(1 To 100000, 1 To 6), k As Long
Dim strData As String, VIEWSTATE As String, VIEWSTATEGENERATOR As String, VIEWSTATEENCRYPTED As String
Dim tcount As Double
tcount = Timer
Set doc = CreateObject("htmlfile")
Set req = CreateObject("Msxml2.XMLHTTP")
getHiddenParam VIEWSTATE, VIEWSTATEGENERATOR, VIEWSTATEENCRYPTED


'42005  42369  :  1/1/2015 -> 31/12/2015
k = 1
For r = 42005 To 42300 Step 1
    strData = "__VIEWSTATE=" & VIEWSTATE & _
          "&__VIEWSTATEGENERATOR=" & VIEWSTATEGENERATOR & _
          "&__VIEWSTATEENCRYPTED=" & VIEWSTATEENCRYPTED & _
          "&ctl00%24Content%24BranchList=[COLOR=#ff0000][B]68[/B][/COLOR]" & _
          "&ctl00%24Content%24DateText=" & WorksheetFunction.EncodeURL(Format(r, "dd/MM/yyyy")) & _
          "&ctl00%24Content%24ViewButton=xem"
    req.Open "POST", "http://www.vietcombank.com.vn/exchangerates/default.aspx", False
    req.setRequestHeader "host", "www.vietcombank.com.vn"
    req.setRequestHeader "Content-Length", Len(strData)
    req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.send strData
    doc.body.innerHTML = req.responseText
    getdatafromResponse arr, k, doc
Next


Sheet2.Range("A2").Resize(k, 6).Value = arr
MsgBox Timer - tcount
End Sub

mã số 68 là của Hội Sở chính , các cơ sở khác thì dùng mã số khác

2/sub getHiddenParam để lấy các giá trị ẩn trong trang web để có cái mà gửi Request

Mã:
Private Sub getHiddenParam(outVIEWSTATE As String, outVIEWSTATEGENERATOR As String, outVIEWSTATEENCRYPTED As String)
Dim req As Object, doc As Object
Set req = CreateObject("Msxml2.XMLHTTP")
Set doc = CreateObject("htmlfile")
req.Open "GET", "http://www.vietcombank.com.vn/exchangerates/default.aspx", False
req.send
doc.body.innerHTML = req.responseText
outVIEWSTATE = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATE").Value)
outVIEWSTATEGENERATOR = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATEGENERATOR").Value)
outVIEWSTATEENCRYPTED = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATEENCRYPTED").Value)
End Sub

3/sub getdatafromResponse () dùng để xử lý giá trị nhận về từ Server

Mã:
Private Sub getdatafromResponse(arr, k As Long, doc As Object)
Dim tds As Object, lenTds As Long, r As Long, table As Object, dateCreated As String


Set table = doc.getElementById("ctl00_Content_ExrateView")
dateCreated = table.parentElement.NextSibling.innerText
dateCreated = Mid(dateCreated, InStr(dateCreated, "lúc") + 4, 10)
'MsgBox dateCreated
Set tds = table.getElementsByTagName("td")
lenTds = tds.Length


Do While r + 4 < lenTds
    arr(k, 1) = "'" & dateCreated
    arr(k, 2) = tds.Item(r).innerText
    arr(k, 3) = tds.Item(r + 1).innerText
    arr(k, 4) = tds.Item(r + 2).innerText
    arr(k, 5) = tds.Item(r + 3).innerText
    arr(k, 6) = tds.Item(r + 4).innerText
    r = r + 5: k = k + 1
Loop


End Sub

máy của mình lấy hết cả năm thì hết 2 phút
lưu ý : 1 số ngày , 1 số cơ sở không có dữ liệu
hàm WorksheetFunction.EncodeURL nghe đồn chỉ có từ đời excel 2013 trở lên
bạn có thể vui lòng chỉnh sửa lại theo ý bạn để cộng đồng có tài liệu tham khảo nhé , chúc vui
 
Upvote 0
Msgbox là số Giây đúng không bạn "Chim Hồng"? Thấy chạy xong nó báo 65... Vậy là máy mình chạy hơn 1 phút...--=0--=0--=0
Vậy là tuyệt vời rồi!

---------Thử chỉnh ngày lấy tới tận 31/12/2015. Chạy lại thấy...còn có 45 giây, rồi 32 giây....... Chả hiểu chỉnh nhiều hơn lại chạy nhanh hơn...:)
(P/s: trong code bạn ở trên mới để tới ngày 23/10/2015)

thực nghiệm cho thấy truy vấn đến CSDL (MSSQL,MySQL,..) lần sau sẽ nhanh hơn lần trước , lý do tại sao thì tôi không biết , chỉ có các nhà thông thái giải thích , tôi chỉ biết thực nghiệm cho thấy như vậy .
 
Upvote 0
@@@ doveandrose : cảm ơn bạn rất nhiều.

Không phải ý kiến của mình không nhất quán vì nếu lấy được tỷ giá của cả 12 tháng thì giải pháp quá tuyệt vời rồi.
 
Upvote 0
Bạn doveandrose cho mình hỏi : Với ngân hàng Eximbank thì sao ta? Hình như cấu trúc trang web khác nhau thì mình không xài chung code được phải không?

Nếu có thể bạn giúp mình chạy code của Eximbank để mình học hỏi nhé.

Cảm ơn bạn nhiều.
 
Upvote 0
Bạn doveandrose cho mình hỏi : Với ngân hàng Eximbank thì sao ta? Hình như cấu trúc trang web khác nhau thì mình không xài chung code được phải không?

Nếu có thể bạn giúp mình chạy code của Eximbank để mình học hỏi nhé.

Cảm ơn bạn nhiều.
Có một cách khác tự động lấy về Excel mà không cần phải dùng Code hay Excel đâu, không những vậy mà chính xác 1000%, hê hê, có điều code của anh doveandrose siêu quá, nên em rút bớt còn 100% !
 
Lần chỉnh sửa cuối:
Upvote 0
Có một cách khác tự động lấy về Excel mà không cần phải dùng Code hay Excel đâu, không những vậy mà chính xác 1000%, hê hê, có điều code của anh doveandrose siêu quá, nên em rút bớt còn 100% !
Đừng bảo mình là gọi điện xin ngân hàng Vietcombank và Eximbank cung cấp cho nhé. hihi.
 
Upvote 0
hê hê, thấy code của anh doveandrose đỉnh quá nên không dám bàn thêm, chỉnh code của anh ấy xíu là lấy Eximbank khỏe
Mình nghĩ code của người đẹp doveandrose chạy tốt nhưng mình chưa test được vì gia đình vẫn xài đồ cổ 2010 bạn à, đang vận động hành lang nhờ người test hộ. Buồn hết chỗ nói....hix
 
Upvote 0
Mình nghĩ code của người đẹp doveandrose chạy tốt nhưng mình chưa test được vì gia đình vẫn xài đồ cổ 2010 bạn à, đang vận động hành lang nhờ người test hộ. Buồn hết chỗ nói....hix
Tại sao, 2010 chạy bình thường, chắc chưa chọn Tool rồi, vào VBA chọn tool chọn References, chọn MS ...(14.0 hoặc, 16.0 ) Object Library, MS HTML Object Library, MS Interner Controls
rồi chạy thôi
 
Upvote 0
Mình nghĩ code của người đẹp doveandrose chạy tốt nhưng mình chưa test được vì gia đình vẫn xài đồ cổ 2010 bạn à, đang vận động hành lang nhờ người test hộ. Buồn hết chỗ nói....hix

excel 2010 ? lấy cái này về chạy thay cho sub hello , không chắc ăn nhưng cứ thử

Mã:
Public Sub helloHMTC()
Dim doc As Object, req As Object, r As Long, arr(1 To 100000, 1 To 6), k As Long
Dim strData As String, tcount As Double
tcount = Timer
Set doc = CreateObject("htmlfile")
Set req = CreateObject("Msxml2.XMLHTTP")


'42005  42369
k = 1
For r = 42005 To 42369 Step 1
    strData = "__VIEWSTATE=&__VIEWSTATEGENERATOR=&__VIEWSTATEENCRYPTED=" & _
          "&ctl00%24Content%24BranchList=68" & _
          "&ctl00%24Content%24DateText=" & Format(r, "dd%2FMM%2Fyyyy") & _
          "&ctl00%24Content%24ViewButton=xem"
    
    req.Open "POST", "http://www.vietcombank.com.vn/exchangerates/default.aspx", False
    req.setRequestHeader "host", "www.vietcombank.com.vn"
    req.setRequestHeader "Content-Length", Len(strData)
    req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.send strData
    doc.body.innerHTML = req.responseText
    getdatafromResponse arr, k, doc
Next


Sheet2.Range("A2").Resize(k, 6).Value = arr
MsgBox Timer - tcount
End Sub
 
Upvote 0
excel 2010 ? lấy cái này về chạy thay cho sub hello , không chắc ăn nhưng cứ thử
Anh doveandrose giỏi vậy, giúp em lấy dữ liệu trang web này được không anh? chỉ cần lấy một hàng duy nhất thôi là em mừng lắm rồi, mò mãi không ra
 
Lần chỉnh sửa cuối:
Upvote 0
hê hê, thấy code của anh doveandrose đỉnh quá nên không dám bàn thêm, chỉnh code của anh ấy xíu là lấy Eximbank khỏe

tôi chưa nhìn ra được chỉnh xíu là chỉnh làm sao đấy bạn . Xin bạn giúp tôi chỉnh xíu để lấy được dữ liệu của Eximbank hoặc nếu không cần dùng code như bạn nói thì quá hay , tôi đang ngoáy lỗ tai và rửa mắt chờ ý kiến của bạn .
 
Upvote 0
Anh doveandrose giỏi vậy, giúp em lấy dữ liệu trang web này được không anh? chỉ cần lấy một hàng duy nhất thôi là em mừng lắm rồi, mò mãi không ra

đây không phải là topic của bạn , nên những câu tương tự như này là vi phạm nội quy , bạn có quyền mở chủ đề mới để hỏi .
 
Upvote 0
tôi chưa nhìn ra được chỉnh xíu là chỉnh làm sao đấy bạn . Xin bạn giúp tôi chỉnh xíu để lấy được dữ liệu của Eximbank hoặc nếu không cần dùng code như bạn nói thì quá hay , tôi đang ngoáy lỗ tai và rửa mắt chờ ý kiến của bạn .
Vâng cái chỉnh thì em chưa chỉnh được ngay, còn lấy dữ liệu em dùng một ứng dụng bên thứ 3 để lấy dữ liệu về dạng Text, save .csv rồi vào Excel xử lí, còn Code của a em nói đỉnh vì lấy trực tiếp vào excel mà ko cần ứng dụng nào mà rất nhanh, em cần học hỏi thêm anh doveandrose nhiều
 
Upvote 0

File đính kèm

  • Error.JPG
    Error.JPG
    19.4 KB · Đọc: 111
Upvote 0
Bạn doveandrose cho mình hỏi : Với ngân hàng Eximbank thì sao ta? Hình như cấu trúc trang web khác nhau thì mình không xài chung code được phải không?

Nếu có thể bạn giúp mình chạy code của Eximbank để mình học hỏi nhé.

Cảm ơn bạn nhiều.

để mai được không bạn ơi ? giờ chưa có ý tưởng gì hết , cùng lắm là qua tết sẽ có bài giải thôi mà --=0--=0--=0
 
Upvote 0

File đính kèm

  • Image strData.JPG
    Image strData.JPG
    24 KB · Đọc: 107
Upvote 0
Hình của strData đây, bạn xem dùm mình nhé.

Cảm ơn bạn.

híc , ca này thì chắc bác sỹ chỉ có nước ... trả về !$@!!!$@!!
hình ảnh của excel 2010 của mình nè , vẫn lấy dữ liệu bình thường

99f1af55a59783b58d0a2e7fa2b2dcd3.png



thôi thì hoamattroicoi cài excel 2013 đi --=0--=0
 
Upvote 0
híc , ca này thì chắc bác sỹ chỉ có nước ... trả về !$@!!!$@!!
hình ảnh của excel 2010 của mình nè , vẫn lấy dữ liệu bình thường

thôi thì hoamattroicoi cài excel 2013 đi --=0--=0
Cảm ơn doveandrose đã dành thời gian quý báu để giúp mình, có lẽ phải cài Office 2013 trước tết thôi. hihihi

Còn vụ Eximbank, nếu doveandrose có thời gian và ý tưởng gì thì giúp mình tiếp nhé.

Cảm ơn bạn rất nhiều.

Chúc bạn nhiều niềm vui trong cuộc sống.

HMT.
 
Upvote 0
Xin chào bạn doveandrose !
Tôi xin lỗi tôi không có đủ khả năng để bàn về code nên không có ý gì cả nhưng may mắn hơn bạn hoamattroicoi là tôi có đủ điều kiện ( 1 máy 2010 và 1 máy 2013) để test code.
Tôi đã test kết quả đều vẫn bị lỗi giống như bạn hoamattroicoi miêu tả ở trên.
Không biết là có nguyên nhân nào khác nữa không mong bạn tìm hiểu thêm ạ.

1.jpg
2.jpg


2.jpg
3.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
bạn sửa dòng báo lỗi thành

Mã:
[B]req.send (strData)[/B]

đã kiểm tra trên máy excel 2007 với win XP , cứ tiếp tục hi vọng , hi hi

Wow, code chạy tuyệt vời rồi bạn doveandrose ơi. Trời ơi, làm mình sáng nay bắn mail đi khắp nơi nhờ test code hộ. huhuhu.

Cảm ơn bạn rất nhiều.

À quên, máy tính mình sau khi chạy code bị hiện cái này, không biết bị sao nữa hihihi.
 

File đính kèm

  • Thank you.JPG
    Thank you.JPG
    59.1 KB · Đọc: 108
Upvote 0
Wow, code chạy tuyệt vời rồi bạn doveandrose ơi. Trời ơi, làm mình sáng nay bắn mail đi khắp nơi nhờ test code hộ. huhuhu.

Cảm ơn bạn rất nhiều.

À quên, máy tính mình sau khi chạy code bị hiện cái này, không biết bị sao nữa hihihi.

rồi xong cái đó là virus đấy , coi chừng hư ỗ cứng =))
 
Upvote 0
Anh doveandrose nhà ta đã giúp đỡ thì giúp đỡ cho trót đi, còn cái Eximbank nữa kìa anh doveandrose, để người ta 1/2 hạnh phúc 1/2 nản lòng thì tội, cũng để mọi người học hỏi thêm nữa chứ anh doveandrose, hình như lấy DL từ Web này phải thêm một vòng lặp nữa để lấy hết "Bảng số:..." , phải tạo thêm một outVIEWPAGE (ddlQuoteCount) phải ko anh
 
Lần chỉnh sửa cuối:
Upvote 0
Anh doveandrose nhà ta đã giúp đỡ thì giúp đỡ cho trót đi, còn cái Eximbank nữa kìa anh doveandrose, để người ta 1/2 hạnh phúc 1/2 nản lòng thì tội, cũng để mọi người học hỏi thêm nữa chứ anh doveandrose, hình như lấy DL từ Web này phải thêm một vòng lặp nữa để lấy hết "Bảng số:..." , phải tạo thêm một outVIEWPAGE (ddlQuoteCount) phải ko anh

bạn sốt sắng như vậy thì bạn cứ vào giúp người ta đi ? thớt lập ra đâu phải dành riêng cho tôi trả lời đâu chứ ?
sao bạn phải đi khóc mướn dùm người khác vậy ? có thấy mệt không ?
tôi quá biết chủ thớt này chả bao giờ làm trò spam hối thúc
và chủ thớt này cũng quá biết tôi ghét nhất trò đó , khi nào tôi thích thì tôi làm
nếu mục đích bạn vào diễn đàn chỉ có vậy thì tôi không cản
nhưng bạn cứ tiếp tục làm thế này thì người thiệt thòi là ai chắc bạn cũng hiểu ?
 
Upvote 0
Anh doveandrose nhà ta đã giúp đỡ thì giúp đỡ cho trót đi, còn cái Eximbank nữa kìa anh doveandrose, để người ta 1/2 hạnh phúc 1/2 nản lòng thì tội
Ồ, dù sao cũng cảm ơn bạn, thực sự thì bản thân mình cũng không thích cái trò "hối thúc" và đặt deadline cho người giúp :D :D :D

Hạnh phúc trọn vẹn là phải biết chờ đợi bạn à =))))). Mình đã đánh dấu theo dõi chủ đề này và mình sẽ đợi bạn ấy, tuy nhiên bạn ấy có muốn viết tiếp không là quyền của bạn ấy, hihihihihi. Bạn ấy đẹp mà, bạn ấy có quyền =)) =)) =))
 
Upvote 0
Đánh vật với mớ chữ rốt cuộc cũng làm ra cái này
Mã:
Function ex(ngay, bang_so)Dim doc As Object, req As Object, r As Long, arr(1 To 100000, 1 To 6), k As Long
Dim strData As String, VIEWSTATE As String, VIEWSTATEGENERATOR As String, VIEWSTATEENCRYPTED As String
Dim tcount As Double
tcount = Timer
Set doc = CreateObject("htmlfile")
Set req = CreateObject("Msxml2.XMLHTTP")
strData = _
"__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=%2FwEPDwULLTExOTYyMTE2MjgPZBYCAgMPZBYOAgMPEGQPFn1mAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI%2FAkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwWfRBlBQQxMDAwZxAFCUNOIFRwLkhDTQUEMjAwMGcQBQxDTiBIw6AgTuG7mWkFBDEwMDFnEAUOQ04gxJDDoCBO4bq1bmcFBDEwMDJnEAUNQ04gQ%2BG6p24gVGjGoQUEMTAwM2cQBQ5DTiBDaOG7oyBM4bubbgUEMTAwNGcQBQ1DTiBIw7JhIELDrG5oBQQxMDA3ZxAFDENOIFF14bqtbiAxMAUEMTAxMmcQBQxDTiBRdeG6rW4gMTEFBDEwMTVnEAUMQ04gTmhhIFRyYW5nBQQxMjAwZxAFFENOIEJ1w7RuIE3DqiBUaHXhu5l0BQQxMjAxZxAFDUNOIMSQw6AgTOG6oXQFBDEyMDJnEAUPUEdEIELhuqNvIEzhu5ljBQQxMjAzZxAFDVBHRCBDaGkgTMSDbmcFBDEyMDRnEAUSUEdEIMSQ4bupYyBUcuG7jW5nBQQxMjA1ZxAFDlBHRCBCdcO0biBI4buTBQQxMjA2ZxAFDlBHRCBMw6ogRHXhuqluBQQxMjA3ZxAFGVBHRCBOZ3V54buFbiBU4bqldCBUaMOgbmgFBDEyMDhnEAUSUEdEI" & _
"FBoYW4gQ2h1IFRyaW5oBQQxMjA5ZxAFD0NOIFTDom4gxJDhu4tuaAUEMTQwMGcQBQxDTiBTw6BpIEfDsm4FBDE0MDFnEAULQ04gUXXhuq1uIDQFBDE0MDJnEAULQ04gUXXhuq1uIDcFBDE0MDNnEAUOQ04gQ%2BG7mW5nIEjDsmEFBDE0MDRnEAUTUEdEIFBo4bqhbSBWxINuIEhhaQUEMTQwNWcQBRRQR0QgVsO1IFRow6BuaCBUcmFuZwUEMTQwNmcQBQxQR0QgQ%2BG7pyBDaGkFBDE0MDdnEAUOUEdEIEFuIFPGsMahbmcFBDE0MDhnEAURUEdEIE5ndXnhu4VuIFPGoW4FBDE0MDlnEAUZUEdEIE5ndXnhu4VuIFRo4buLIFRo4bqtcAUEMTQxMGcQBQ5QR0QgUGjDuiBYdcOibgUEMTQxMWcQBQ1QR0QgUGjDuiBN4bu5BQQxNDEyZxAFDENOIFTDonkgxJDDtAUEMTUwMGcQBQtDTiBN4bu5IFRobwUEMTUwMWcQBQtDTiBBbiBHaWFuZwUEMTUwMmcQBQpDTiBMb25nIEFuBQQxNTAzZxAFDkNOIELhuqFjIExpw6p1BQQxNTA0ZxAFDkNOIEtpw6puIEdpYW5nBQQxNTA1ZxAFEFBHRCBDaMOidSDEkOG7kWMFBDE1MDZnEAUOUEdEIFTDom4gQ2jDonUFBDE1MDdnEAUOUEdEIEPDoWkgUsSDbmcFBDE1MDhnEAUQUEdEIFRo4buRdCBO4buRdAUEMTUwOWcQBRBDTiBIw7luZyBWxrDGoW5nBQQxNjAwZxAFEENOIFF14bqjbmcgTmfDo2kFBDE2MDFnEAUHQ04gVmluaAUEMTYwMmcQBQ9DTiBI4bqjaSBQaMOybmcFBDE2MDNnEAUIQ04gSHXhur8FBDE2MDRnEAUPUEdEIENo4bujIEPhu5NuBQQxNjA1ZxAFD1BHRCBI4bqjaSBDaMOidQUEMTYwNmcQBQ1DTiBMw6FuZyBI4bqhB" & _
"QQxNzAwZxAFDUNOIExvbmcgQmnDqm4FBDE3MDFnEAURQ04gSGFpIELDoCBUcsawbmcFBDE3MDJnEAUOQ04gxJDhu5FuZyDEkGEFBDE3MDNnEAUPQ04gQ%2BG6p3UgR2nhuqV5BQQxNzA0ZxAFDVBHRCBUw6J5IEjhu5MFBDE3MDVnEAUYUEdEIE5ndXnhu4VuIFRow6FpIEjhu41jBQQxNzA2ZxAFD1BHRCBIw6BuZyBCw7RuZwUEMTcwN2cQBRhQR0QgTmd1eeG7hW4gUGhvbmcgU%2BG6r2MFBDE3MDhnEAUQUEdEIFZp4buHdCBIxrBuZwUEMTcwOWcQBRBQR0QgxJDhu5NuZyBUw6JtBQQxNzEwZxAFFlBHRCBUcuG6p24gxJDEg25nIE5pbmgFBDE3MTFnEAUNUEdEIFTDonkgU8ahbgUEMTcxMmcQBRdQR0QgTmd1eeG7hW4gQ2jDrSBUaGFuaAUEMTcxNWcQBRhQR0QgTMO9IFRoxrDhu51uZyBLaeG7h3QFBDE3MTZnEAUQUEdEIFh1w6JuIERp4buHdQUEMTcxN2cQBQ9QR0QgQsOgIFRSaeG7h3UFBDE3MThnEAUPUEdEIE3hu7kgxJDDrG5oBQQxNzE5ZxAFDlBHRCBIw6AgxJDDtG5nBQQxNzIwZxAFDVBHRCBLaW0gTGnDqm4FBDE3MjFnEAUQUEdEIEPhu61hIMSQw7RuZwUEMTcyMmcQBQ5QR0QgVHJ1bmcgSMOyYQUEMTcyM2cQBQ9QR0QgVGjEg25nIExvbmcFBDE3MjRnEAUOUEdEIFRydW5nIFnDqm4FBDE3MjVnEAUOUEdEIEjDoG5nIFRoYW4FBDE3MjZnEAUOUEdEIELhuqFjaCBNYWkFBDE3MjdnEAUPUEdEIE5ndXnhu4VuIER1BQQxNzI4ZxAFEVBHRCDEkOG7k25nIFh1w6JuBQQxNzI5ZxAFDVBHRCBMw7IgxJDDumMFBDE3MzBnEAUQQ04gQsOsbmggRMawxqFuZ" & _
"wUEMTgwMGcQBQ5DTiDEkOG7k25nIE5haQUEMTgwMWcQBQ9DTiBUaOG7pyDEkOG7qWMFBDE4MDJnEAUMQ04gQsOgIFLhu4thBQQxODAzZxAFD1BHRCBMb25nIEtow6FuaAUEMTgwNGcQBRFDTiBCw6xuaCBQaMaw4bubYwUEMTgwNWcQBRBQR0QgSOG7k25nIELDoG5nBQQxODA2ZxAFDVBHRCBLaW0gQmnDqm4FBDE4MDdnEAUNUEdEIEFuIMSQw7RuZwUEMTgwOGcQBQxQR0QgUXXhuq1uIDIFBDE4MDlnEAURUEdEIEzDqiBWxINuIE5pbmgFBDE4MTBnEAUPUEdEIFRy4bqjbmcgQm9tBQQxODExZxAFDlBHRCBHaWEgS2nhu4dtBQQxODEyZxAFD1BHRCBMb25nIFRow6BuaAUEMTgxNGcQBQ9QR0QgVMOibiBUaeG6v24FBDE4MTVnEAUOUEdEIEJpw6puIEjDsmEFBDE4MTZnEAUPQ04gUXXhuqNuZyBOaW5oBQQxOTAwZxAFDUNOIFF1w6NuZyBOYW0FBDE5MDFnEAUOUEdEIE3Ds25nIEPDoWkFBDE5MDJnEAUQUEdEIELhur9uIFRow6BuaAUEMjAwMWcQBQ1QR0QgVGhhbmggxJBhBQQyMDAyZxAFDUNOIELDrG5oIFBow7oFBDIxMDBnEAUSQ04gUGjDuiBN4bu5IEjGsG5nBQQyMTAxZxAFE0NOIFTDom4gU8ahbiBOaOG6pXQFBDIxMDJnEAUNQ04gQsOsbmggVMOibgUEMjEwM2cQBQlDTiBRdWFuIDMFBDIxMDRnEAUNUEdEIEzDqiBM4bujaQUEMjEwNWcQBQ5QR0QgVHJ1bmcgU8ahbgUEMjEwNmcQBQ1QR0QgTWluaCBLaGFpBQQyMTA3ZxAFFFBHRCBUcsawxqFuZyDEkOG7i25oBQQyMTA4ZxAFFFBHRCBCw7lpIFRo4buLIFh1w6JuBQQyMTA5ZxAFDVBHRCBUYW8gxJDDo" & _
"G4FBDIxMTBnEAUPUEdEIFbEg24gVGjDoW5oBQQyMTExZxAFDlBHRCBIw6BuZyBYYW5oBQQyMTEyZxAFDFBHRCBRdeG6rW4gNgUEMjIwMGcQBQxQR0QgUXXhuq1uIDgFBDIyMDFnEAUNUEdEIEfDsiBW4bqlcAUEMjIwMmcQBRJQR0QgSOG7kyBWxINuIEh1w6oFBDIyMDNnEAURUEdEIEzDqiBWxINuIFPhu7kFBDIyMDRnEAUNUEdEIEvhu7MgSMOyYQUEMjIwNWcQBRNQR0QgUGhhbiBYw61jaCBMb25nBQQyMjA2ZxAFGlBHRCBC4bq%2FbiBDaMawxqFuZyBExrDGoW5nBQQyMjA3ZxAFElBHRCBWw7UgVsSDbiBU4bqnbgUEMjIwOGcQBRJQR0QgVHLGsOG7nW5nIFPGoW4FBDIyMDlnEAULUEdEIMSQYSBLYW8FBDIyMTBnEAUYUEdEIE5ndXnhu4VuIEPDtG5nIFRy4bupBQQyMjExZxAFElBHRCBUaOG6o28gxJBp4buBbgUEMjIxMmcWAWZkAgUPD2QWAh4Hb25jbGljawUTcmV0dXJuIGZuU3VibWl0MSgpO2QCBw9kFgZmDw8WAh4EVGV4dAUKMTMvMDEvMjAxNmRkAgIPFgIeB09uQ2xpY2sFIk9uQ2FsQ29udHJvbDFDbGljaygpO3JldHVybiBmYWxzZTtkAgQPD2QWAh4Fc3R5bGUFIURJU1BMQVk6IG5vbmU7IFBPU0lUSU9OOiBhYnNvbHV0ZRYEAgEPFgIfAgUlQ2xvc2VDYWxDb250cm9sMUNsaWNrKCk7cmV0dXJuIGZhbHNlO2QCAw88KwAKAQAPFgIeAlNEFgEGAEDseqwb0whkZAIJDxBkEBUdAjI5AjI4AjI3AjI2AjI1AjI0AjIzAjIyAjIxAjIwAjE5AjE4AjE3AjE2AjE1AjE0AjEzAjEyAjExAjEwATkBOAE3ATYBNQE0ATMBMgExFR0CMjkCMjgCMjcCMjYCMjU" & _
"CMjQCMjMCMjICMjECMjACMTkCMTgCMTcCMTYCMTUCMTQCMTMCMTICMTECMTABOQE4ATcBNgE1ATQBMwEyATEUKwMdZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dkZAILDw8WAh4HVmlzaWJsZWhkZAIND2QWAmYPZBYCZg9kFgYCAQ8PFgIfAWVkZAIDDw8WAh8BBQIxMWRkAgUPDxYCHwEFEzMwLzAxLzIwMTYgMTI6MjY6MTJkZAIPDxYCHgtfIUl0ZW1Db3VudAIPFh4CAQ9kFggCAQ8PFgIfAQUZxJDDtC1sYSBN4bu5IChVU0QgNTAtMTAwKWRkAgMPDxYCHwEFBjIyLDE1MGRkAgUPDxYCHwEFBjIyLDE3MGRkAgcPDxYCHwEFBjIyLDI0MGRkAgIPZBYIAgEPDxYCHwEFF8SQw7QtbGEgTeG7uSAoVVNEIDUtMjApZGQCAw8PFgIfAQUGMjIsMTQwZGQCBQ8PFgIfAQUGMjIsMTcwZGQCBw8PFgIfAQUGMjIsMjQwZGQCAw9kFggCAQ8PFgIfAQUcxJDDtC1sYSBN4bu5IChExrDhu5tpIDUgVVNEKWRkAgMPDxYCHwEFBjIyLDEzMGRkAgUPDxYCHwEFBjIyLDE3MGRkAgcPDxYCHwEFBjIyLDI0MGRkAgQPZBYIAgEPDxYCHwEFCkLhuqNuZyBBbmhkZAIDDw8WAh8BBQYzMSwzOTNkZAIFDw8WAh8BBQYzMSw0ODdkZAIHDw8WAh8BBQYzMSw3OTBkZAIFD2QWCAIBDw8WAh8BBRTEkMO0LWxhIEjhu5NuZyBLw7RuZ2RkAgMPDxYCHwEFBTIsNTAwZGQCBQ8PFgIfAQUFMiw4NDFkZAIHDw8WAh8BBQUyLDg2OGRkAgYPZBYIAgEPDxYCHwEFEEZyYW5jIFRo4buleSBTxKlkZAIDDw8WAh8BBQYyMSw1NDhkZAIFDw8WAh8BBQYyMSw2MTNkZAIHDw8WAh8BBQYyMSw4MjFkZAI" & _
"HD2QWCAIBDw8WAh8BBQtZw6puIE5o4bqtdGRkAgMPDxYCHwEFBjE4Mi4wOGRkAgUPDxYCHwEFBjE4Mi42M2RkAgcPDxYCHwEFBjE4NC4zOWRkAggPZBYIAgEPDxYCHwEFC8OQw7QtbGEgw5pjZGQCAw8PFgIfAQUGMTUsNjA3ZGQCBQ8PFgIfAQUGMTUsNjU0ZGQCBw8PFgIfAQUGMTUsODA1ZGQCCQ9kFggCAQ8PFgIfAQUOw5DDtC1sYSBDYW5hZGFkZAIDDw8WAh8BBQYxNSw3NzRkZAIFDw8WAh8BBQYxNSw4MjFkZAIHDw8WAh8BBQYxNSw5NzRkZAIKD2QWCAIBDw8WAh8BBRHDkMO0LWxhIFNpbmdhcG9yZWRkAgMPDxYCHwEFBjE1LDQ3N2RkAgUPDxYCHwEFBjE1LDUyM2RkAgcPDxYCHwEFBjE1LDY3M2RkAgsPZBYIAgEPDxYCHwEFDMSQ4buTbmcgRXVyb2RkAgMPDxYCHwEFBjIzLDg2OWRkAgUPDxYCHwEFBjIzLDk0MWRkAgcPDxYCHwEFBjI0LDE3MWRkAgwPZBYIAgEPDxYCHwEFE8OQw7QtbGEgTmV3IFplYWxhbmRkZAIDDw8WAh8BBQYxNCwyMjhkZAIFDw8WAh8BBQYxNCwyOTlkZAIHDw8WAh8BBQYxNCw0NTFkZAIND2QWCAIBDw8WAh8BBQ1CYXQgVGjDoWkgTGFuZGQCAw8PFgIfAQUDNjA0ZGQCBQ8PFgIfAQUDNjE5ZGQCBw8PFgIfAQUDNjMwZGQCDg9kFggCAQ8PFgIfAQUKS3JvbmUgTmF1eWRkAgMPDxYCHwEFAS1kZAIFDw8WAh8BBQUyLDU0MGRkAgcPDxYCHwEFBTIsNTgwZGQCDw9kFggCAQ8PFgIfAQUcTmjDom4gRMOibiBU4buHIFRydW5nIFF14buRY2RkAgMPDxYCHwEFAS1kZAIFDw8WAh8BBQUzLDM0NGRkAgcPDxYCHwEFBTMsNDIxZGQYAQU" & _
"eX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDEltYWdlQnV0dG9uMWzDLId6q8saG7NbAU5ytW3%2BF9zZW1dSuZtUS1Hbllls&__VIEWSTATEGENERATOR=0F3EB817&__EVENTVALIDATION=%2FwEdAMsB7mjWZqvSFijQylYdBu3EehmMsIWY7eTvzbdZBT5OBwoPPQMAd0p8aMuHxQ9x8l3i6g%2F%2FgkX5u8kNLY5sDhKqzHVpLq8gpu7jBuEhgs%2F1hE%2BYfhAfNxdnSWDHs7GzUCftTV9ALjwesx%2Ffkgobjeso81IeyJxq6Sn3tz%2BhvPWJmn55beNRktHxnII4DkDedXkuHX56C1YvFxkbGnX8LkxV6J8lagrMYgNdipqRWrlVNz907o4p6zFnEQ0suG8jUgPohbxOA%2BYbPa1dc6hk2jgosDMacLDyJiTSbnE%2FkcrYxDMHA4j8c53BE9ovykiR9ORoJhtx09WhvNF%2FeOqy%2FG0XbYq%2Byy91Q7yYoZp6gcwu%2BcRb%2FUZktw9W40DL8M51%2BfFtWku49M7cJA1ZMB2h9SMVEBFZwLDPSYamJvh6hcUmAtjnaGrtvkuZmu9cgq6%2BSqiHKmr2os8PN%2Bzmny8vunykEGtEg8Uh5Nc0XgUyKx5HzGoRS834Y5k1MHENOtC%2Fegdg1sAIO0RQE6Mbp295ff%2Bgc0bMza7P%2FK4XLTR19guNvNsmxNoQVDplULzZWWIvoKhn0fLoEcHs%2F1XnVLOGgAuthB46UP4Chj6IvyRZSXZ%2F0bJMNSnAtQy6hLYi0Zb1YuqNtcmLBDRpNOAXogSA7RQDHbl2AQSsFm68ukqTm1uPiFw91HdK1hrDghEPuzYUGKiY31MDnsfSBa2LQ2XkZG0phcZA0Razmcs94DWT2XrcS4KsU6UZOUkTUmzvrHQloI1Z%2ByZYDY%2Ftlcj8oXJfF7zs9ciZJZ9x74EfMgVm" & _
"sKaTJUf%2BLoTYlbEgiN%2BqL3tP%2BT4zOwfx4yPXZ24KHoUeNiQ4NmpkNsJ0z1YeA3fE6utY6PqoXUqV7%2FEf5%2F0TLHr7yJPdcdxFtzzFGggEskpXPxSOu0L%2B6S2K8e8EyrEpuMxPVQZOoJu7T1rHFiumoZY1GkSwxVVw2R1RcTY4hI%2FqszwBYehQPEL4FxG7c0y8Q%2F7EpwlJ8BsM%2Fpo2uJGWT8Poc5xoXtQ44ktCZ%2B6Zda%2FF8wCzrhyX%2B%2FNyGIFf46ug7mDA%2F40RU9aH%2F0TsWIHKIBZbAC1O0s9X8pECCWNj3AmITydh9fA%2BvVUQHVDV76Pjdn1WRa156DHY7Gl243bkd2anv1MdAbHX4tmqwd0bE4uAP9jdfSxXRU5rHZ9cN1HyUhMUjMmv93GolJw5%2B55dERx1VV7CszSQhDVLK%2BzoYffOsYW5P9bbMP8ho8cI76i0rpxIY3W%2BAqBXIrwpMThozmgvebZRhi3kqmyhINmywrseroaKS3RZ1OpezvioJfl9O8wwkqgqjWcnYNScnSytoI1Sadc2t8mbHAHPKb7VDo0eME5%2Fc0D4EphCcXNE6oGNjTCkAEVzd5DJaWVx4STip6uKyywM1tGPfQnND3gs5JMtDXcERM7ge%2FQUnr1GtZ%2BXzGQAOqp3Qq1keZV%2BfJAQGPJSwnmARTlVUPre2SggSibiWd1VkRYhPJA8RYqEK3gV9Mn7XgVZ0xczMhNN%2Be%2BwmN47UYhvacQuGpmnR%2B8JxrlkLCIkL6OuTp9JXrWHlv6lzuaE4CtIi%2F05NULIKxgMBflmJalDeNYC1OGkWU%2ByL2OT%2Buk9BDgIw4ISVgGhbVe4Kb%2Ba%2B16DYaKPONuWfsJazLk9BnpMaozxe3%2BP5mjfYV0NnT2UZG6nVWYEe60mi2a2tZ2aB1cJX5deWlzCgJ2S5%2FDRBdwH6n4KfWkF1firEARRtjFD5w5ZL4" & _
"rijt8IYj5Hr7Q8pJ%2B0tE4Qz5jpArmhxnOikrpFVl3WoWCG2K56aqbS9V%2FoJws72yeyAtjC64W%2FtLlJoZxogNETJrD1iHVk%2BXSbuO79crTX6pnv17l8inJZ2D3GlojJUOUcmcw%2FdqUWQieW0tBL6bfBcUzkqRwJhq4TE8bhKc975GXbXYjW3Q57TU7IjAISAQC1%2B0AGhBmVKnwbeHPtIDxA3q66FNyb1zoA%2B6V5AMzRShlWx4KMaEGAOOWBA5DSdWN8Qprr%2BR4OPMna2YqnU4r%2BYjgoEpwB578CYjRbWVpDaE3RiP0yXf5if3QOlCngOzPliXlQIbNqMzzvSSM1di%2FQkjhBbrF5TwpJ9O12HqxF7Go6QgPJaQlb5qARi1ankwgjbeBrMvKakBKon1K5yzqNOiDs3da6058v67UMhOu1rsbyTb9Mj2VgFc9Qdvof%2B8tV%2Fl1OcRn5fjucdwOc21RRDEmTlmxQ9M74NtOGuzKHHvOdnCKo1WBw4gA5FBk%2F2maNwHf4%2FwF08ukL1oqtSHuPYaj38rbNJMKvyWYtt7UHzS30eSYnrDWVDjQyUwsjvhlt20WfjMST3Ua5LRsGHXr84%2B%2BR8dNAfRd6NpJLZu4rzN2KFOA8fafZg2FqbuEgJ7R8qURIVh3qsWcJnshjJKqHJaY9MhtaxpfQXCZCJDKske0MJ7a1dYsSlo4cciD5inWx5elZHIyMhEWVYDiaOV2yefloecSVD34uHBrhcPEdFbzGw5wyUrCSWbz2TL0WxHY5XbqyBvtbP1Jlv5UUzDigXBgnO6qsd2ajyhYjWleRw%2B09Nzol4jigRJJGVcKnLyM4qZXqLk25W5rX5lbDRgZq8NUrcRzQxU%2FEAHurTrJVHdy%2BVdBDqYl0%2FfHrHDCBTyKoGU%2FB6mo1SS24QCEfwbLItbTDjsKRcj09jQd%2FqQtsZyPSYB7AlTNliqPHzqOhzVOMx%2BfGfwPq" & _
"Gv7fmDDpkAKvHlFmeWUpJ6tT4i4qu0QnuS41PpcDp8XocHnFRUCBWvy1%2FmbUE3f5nymxdW9vMyI0VtDAKKK0u5ULVsUOHDHN4qZE2J%2FmJX8zjtxEPt6K8289j3sYMbL84cZz2nYGsOu0ufMTLrnqAJYSHZx%2BzsM074qj06wbXtoK7C%2FOYwYYVQEDWJ%2FGrEbFZI6FA4YxeuEi%2B6e04g321iQFsGa6AiXBBBxwAVZ7toh4Zp4OdYu%2BxI0Z4zDK%2FX%2F7RiF50li7bR27fDrtsuqy3XO3Q74Oy8h2FP9Jssd2AS1Un7t2p0hJw%2FuxkpMtJPz6sipoqnIlMFFryro0hwfKWlqjS9rWndLsEU6zRNft2eQJgwLDgy9a%2F2296E5UVZzYcJmXd6SWHIJxFMMWIZwSllCRk12muRK8kj8gCHUd2KZCv75mRZz8aC6xCPdPTVlnpPgFlhD4%2BMIjNkKu%2BdX6px7KYsiUJj9cWK9Z3XjJRB6YrR52c9mz1iGovqsnL787hlM06C4Qx3vzOtOPBu5aPQxKmrXpmLkuDKTO%2Brolls60rhf9lSh4knbfGUrm190edWTGVb1%2FYCnpo2GlsBbqM0lQcPdrcXQg5XOzT4%2BWbbUJ1d9VcoSIL5MNjwEqzZPMU86BT5Vmg%2F%2FlZplQrp8eFG4cMUF%2FueigOKAZSIGfXQkx80A0EFHZlL7owG0WG0fDnnJ8ugIXpgKu8gpT2HGvM4L6MJOBTlsRsAnj%2BhQdWdZCzC%2B5f1afFNBE0icuv8bae26IOX9ueTNN1CRwubamEP2tZERivsRAMKtQqhApTRGbYY7siQjIy0h0Wx9NkUAyjapRc0kaXBVhNJq%2F8CA%2BckrAu6bG2tHY0dx28f%2Fx7i%2B0w3FpnqXlwZgI3H9QzBGt3xiFWLM0I1kWg9krVcfqiQkSZY6tWxSlZuy8U4Tljy7pNhGTecufDTpnbc%2FB0tcSqCTa" & _
"ML%2FkEcxFdN0%2Fudp3Xe4Bo6KRwSfsi7DuyhSawOc%2B30zlupSyOT1ueUbzy4zggYDwsAIfNkggK0SxOdLA9W50fM0Gy2ttnNRX1jRNPeW%2Fu31gDFU7GCnLL%2BSipD1vDOdb6zP8evclM1Z2KtXOuJqJmmtIpr7HD7Pe7347aU8WmwOOe47bG9dR42CoMoPMKCyYOnrUueuYhZSSJlrG0Yh4xavwFCXcKn%2BFUZSiyHL0cNC2ieSFmrv8GgAgVQshqqvufKXicnvagTZ3ncK8RcSIGZ63LOFXLFySuULc4fhesbcaYU1iQYnJeZeZMNW68RKoYtkE6tza%2B45pKy5o5zQSaV4fhLv57o2r4FRIaImxr0RbB5Zig7YcMq0zBOyh5zWJHSEdYagbKqBowUkC46IpQg161Kab6oy1%2BiDDiE43SMzF2RUbIJ5pc%2FQrpYDoQ5pSzIdGv%2BGV5UIn5EZ1vaMbu5LX2v%2F9rNLQSvkxufikRLvMXuPve30xUHk84%2B84acWLnEDUKEDM%2Blxu4PMFe08PSU07pB3NOc6J%2FRHePh5TrhuZaaCUKreVHmFc7s6XUfsC5Y6m8nkBvQZWx%2FDuo5e774KpGa6AVV8sTJRO%2B%2BWvBkzYOGp%2BlcUueFiDnJVr%2BbCP5Zs1JWpk%2FYAMSgwY6oes4yimQlFD3r5IL9B5%2FbhVZSOrng%3D%3D&dtNoticeday1=&ddlBranch=1000&ImageButton1.x=40&ImageButton1.y=13&CalControl1%24TextBox1=" & ngay & "&ddlQuoteCount=" & bang_so


req.Open "POST", "https://eximbank.com.vn/WebsiteExrate/ExchangeRate_vn_2012.aspx", False
req.setRequestHeader "Content-Length", Len(strData)
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
req.send (strData)
Dim t
t = req.responseText
t = Mid(t, InStr(2999, t, "<table id=""tb1"" width=""690"" border=""0"" cellpadding=""0"" cellspacing=""0"">"))
t = Left(t, InStr(2999, t, "date_hieuluc") + 333)
t = Left(t, InStrRev(t, "</table>") + 8)
ex = t
End Function


Sub teo()
    Dim t
    t = ex("21/01/2016", 22)
    Debug.Print Left(t, 999) & vbCrLf & Right(t, 999)
End Sub
Vô tình lại phát hiện ra là code hờ tờ mờ lờ của mấy chú ai ty ngân hàng không ngờ còn lủng củng vậy... Ôi sao mà đắng cái lòng :.,
 
Lần chỉnh sửa cuối:
Upvote 0
Đánh vật với mớ chữ rốt cuộc cũng làm ra cái này
Mã:
Function ex(ngay, bang_so)Dim doc As Object, req As Object, r As Long, arr(1 To 100000, 1 To 6), k As Long
Dim strData As String, VIEWSTATE As String, VIEWSTATEGENERATOR As String, VIEWSTATEENCRYPTED As String
Dim tcount As Double
tcount = Timer
Set doc = CreateObject("htmlfile")
Set req = CreateObject("Msxml2.XMLHTTP")
strData = _
"__EVENTTARGET=
 
Lần chỉnh sửa cuối:
Upvote 0
Làm bác đánh vật cũng là thành công của IT bank rùi,

IT bank là trông mấy cái máy tính, còn mấy cái sercurity thì thuê ngoài bác ah,
Ý tôi là cách mấy ổng lên code hờ tờ mờ lờ (HTML) cơ, nói nôm na là lên giao diện web ấy. Cách họ dùng 10 năm về trước còn thịnh chứ sau này xu hướng không còn code web kiểu đó nữa. HTML lủng củng thì chỉ làm tốn thêm băng thông vô ích và đánh vật mấy tay muốn bắt dữ liệu còn cái mớ loằng ngoằn ở trên thì nó thuộc về form rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Đánh vật với mớ chữ rốt cuộc cũng làm ra cái này
Vô tình lại phát hiện ra là code hờ tờ mờ lờ của mấy chú ai ty ngân hàng không ngờ còn lủng củng vậy... Ôi sao mà đắng cái lòng :.,

anh ơi em chép về thấy toàn ra dữ liệu bảng 22 của ngày 13/1/2016 chứ đâu phải của ngày 21/1/2016
anh kiểm tra lại giúp
 
Upvote 0
ủa ở trên bạn nói là lấy hết cả năm 2015 mừ , sao xuống đây lại chỉ lấy 1 ngày . híc !$@!!!$@!!!$@!!

bạn cùng làm với tôi nhé , ở đây có 3 Sub
1/sub hello dùng để Post Request đến trang vietcombank

Mã:
Public Sub hello()
Dim doc As Object, req As Object, r As Long, arr(1 To 100000, 1 To 6), k As Long
Dim strData As String, VIEWSTATE As String, VIEWSTATEGENERATOR As String, VIEWSTATEENCRYPTED As String
Dim tcount As Double
tcount = Timer
Set doc = CreateObject("htmlfile")
Set req = CreateObject("Msxml2.XMLHTTP")
getHiddenParam VIEWSTATE, VIEWSTATEGENERATOR, VIEWSTATEENCRYPTED


'42005  42369  :  1/1/2015 -> 31/12/2015
k = 1
For r = 42005 To 42300 Step 1
    strData = "__VIEWSTATE=" & VIEWSTATE & _
          "&__VIEWSTATEGENERATOR=" & VIEWSTATEGENERATOR & _
          "&__VIEWSTATEENCRYPTED=" & VIEWSTATEENCRYPTED & _
          "&ctl00%24Content%24BranchList=[COLOR=#ff0000][B]68[/B][/COLOR]" & _
          "&ctl00%24Content%24DateText=" & WorksheetFunction.EncodeURL(Format(r, "dd/MM/yyyy")) & _
          "&ctl00%24Content%24ViewButton=xem"
    req.Open "POST", "http://www.vietcombank.com.vn/exchangerates/default.aspx", False
    req.setRequestHeader "host", "www.vietcombank.com.vn"
    req.setRequestHeader "Content-Length", Len(strData)
    req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    req.send strData
    doc.body.innerHTML = req.responseText
    getdatafromResponse arr, k, doc
Next


Sheet2.Range("A2").Resize(k, 6).Value = arr
MsgBox Timer - tcount
End Sub

mã số 68 là của Hội Sở chính , các cơ sở khác thì dùng mã số khác

2/sub getHiddenParam để lấy các giá trị ẩn trong trang web để có cái mà gửi Request

Mã:
Private Sub getHiddenParam(outVIEWSTATE As String, outVIEWSTATEGENERATOR As String, outVIEWSTATEENCRYPTED As String)
Dim req As Object, doc As Object
Set req = CreateObject("Msxml2.XMLHTTP")
Set doc = CreateObject("htmlfile")
req.Open "GET", "http://www.vietcombank.com.vn/exchangerates/default.aspx", False
req.send
doc.body.innerHTML = req.responseText
outVIEWSTATE = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATE").Value)
outVIEWSTATEGENERATOR = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATEGENERATOR").Value)
outVIEWSTATEENCRYPTED = WorksheetFunction.EncodeURL(doc.getElementById("__VIEWSTATEENCRYPTED").Value)
End Sub

3/sub getdatafromResponse () dùng để xử lý giá trị nhận về từ Server

Mã:
Private Sub getdatafromResponse(arr, k As Long, doc As Object)
Dim tds As Object, lenTds As Long, r As Long, table As Object, dateCreated As String


Set table = doc.getElementById("ctl00_Content_ExrateView")
dateCreated = table.parentElement.NextSibling.innerText
dateCreated = Mid(dateCreated, InStr(dateCreated, "lúc") + 4, 10)
'MsgBox dateCreated
Set tds = table.getElementsByTagName("td")
lenTds = tds.Length


Do While r + 4 < lenTds
    arr(k, 1) = "'" & dateCreated
    arr(k, 2) = tds.Item(r).innerText
    arr(k, 3) = tds.Item(r + 1).innerText
    arr(k, 4) = tds.Item(r + 2).innerText
    arr(k, 5) = tds.Item(r + 3).innerText
    arr(k, 6) = tds.Item(r + 4).innerText
    r = r + 5: k = k + 1
Loop


End Sub

máy của mình lấy hết cả năm thì hết 2 phút
lưu ý : 1 số ngày , 1 số cơ sở không có dữ liệu
hàm WorksheetFunction.EncodeURL nghe đồn chỉ có từ đời excel 2013 trở lên
bạn có thể vui lòng chỉnh sửa lại theo ý bạn để cộng đồng có tài liệu tham khảo nhé , chúc vui
Bạn có thể gửi file được không? Mình không tải được
 
Upvote 0
cùng lắm là qua tết sẽ có bài giải thôi mà --=0--=0--=0

Cảm ơn doveandrose đã sửa bài #2 bổ sung code lấy tỷ giá cho ngân hàng Eximbank. Nếu bạn nào có nhu cầu cần load tỷ giá thì ứng dụng code của bài #2 nhé.

Chúc doveandrose luôn vui và chân thành cảm ơn sự giúp đỡ của bạn.
 
Upvote 0
sorry nếu có phạm lỗi gì vì mình cũng chỉ mới tìm thấy diễn đàn , do chưa biết nhiều về VBA (chỉ biết đến Alt-F11) nên mình đọc thread này mà chưa hiểu gì cả. Mục đích mình muốn tạo một macro để khi chạy thì tự động lấy được tỷ giá USD bán ra của Vietcombank vào ngày hôm đó gán vào ô A1 chẳng hạn. Các bác trong forum nào có thể giúp dùm mình với.
Sorry mình không mở topic riêng vì gà quá mà lại thấy thread này có mục đích/yêu cầu rất gần với yêu cầu của mình rồi. Mong cả nhà giúp đỡ thêm.
 
Upvote 0
Cho e hỏi ngu cái:
Em chạy file getExim.xlsb rồi nhưng nó cứ báo lỗi này
1535440499439.png
1535441270753.png

Còn vụ lấy data của VCB thì không rõ phải copy code vào đâu đây ạ.

================
Sau khi mò và add như mem minahnh0011 đã hướng dẫn thì e đã chạy được file lấy dữ liệu của exim
1535443933265.png
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã xài test nhưng cảm giác không ổn lắm, có 1 số lỗi vặt
1. Thỉnh thoảng "RUN" bị lỗi, em vào phần Macro debug thì nó cứ trỏ vào "req.send" trong phần Module2.
2. cái data lỗi bên cột M có lỗi về kiểu hiển thị ngày tháng
1535450489227.png

Vẫn đang tiếp tục ngâm cứu nhưng năng lực có hạn, hix muốn trích lấy cái phần Đô la không thôi mà sao khó quá. Để vào Excel rồi lọc ra bảng khác thì không muốn vì thế thì khó ứng dụng cái mã này để nhúng vô các form (cần có database riêng, database phải mở và update hàng ngày...)
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom