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é.
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
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 ạ.
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
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...
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 .
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% !
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% !
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
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
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
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 .
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
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 ạ.
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
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 ?
Ồ, 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
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 =)) =)) =))
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
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=
Ý 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.
Đá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
ủ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
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.
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.
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
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...)