Tra cứu mã số thuế cá nhân về Excel

khanhho

Thành viên mới
Xin chào mọi người,

Hiện tại em đang muốn làm một file tra cứu mã số thuế cá nhân từ web của cục thuế về file excel, tuy nhiên phần viết code lấy dữ liệu html e ngâm cứu mãi mà vẫn chưa thẩm thấu được. Em chỉ mới add được web browser vào Userform.

Em muốn thực hiện là mở Userform lên sẽ load web cục thuế vào (cái này đã làm được), phần mã số CMND sẽ lấy lần lượt từ range của sheet vào textbox của Userform, người tra cứu chỉ cần nhập mã captcha vào textbox2 và bấm nút thì code sẽ thực hiện gán CMND và mã captcha vào các trường thông tin tương ứng trên website cục thuế sau đó sẽ trả về dữ liệu vừa tìm được về lại excel.

Mục đích để rút gọn thời gian copy qua lại giữa web và excel khi tổng hợp số liệu làm quyết toán thuế cho NLĐ.

Xin nhờ mọi người xem thử và giúp em nếu được ạ.

Xin cám ơn mọi người!

Link google drive của file ạ:
 

thanhphong

Thành viên mới
Mục đích thì viết dễ hiểu rồi.
Nêu thêm cụ thể cách làm bình thường thì bạn truy cập trang web nào, link là gì.
Bạn tham khảo cách diễn đạt ở đây:
 

tuhocvba

Administrator
Thành viên BQT
Bạn tham khảo topic này và tự giải quyết nhé.
 

khanhho

Thành viên mới
Mục đích thì viết dễ hiểu rồi.
Nêu thêm cụ thể cách làm bình thường thì bạn truy cập trang web nào, link là gì.
Bạn tham khảo cách diễn đạt ở đây:
Dạ trong file của em đã có add sẵn trang web vào rồi đó anh ( )

Anh xem giúp em hình ảnh các trường nhập liệu và lấy dữ liệu từ web trong hình thử nhé.

 

Euler

Biên Tập Viên
@khanhho Mình thấy cái mã xác nhận đó thì khá là khó khi dùng VBA lấy mã HTML !
Bạn ấy đã nói rồi:
người tra cứu chỉ cần nhập mã captcha vào textbox2 và bấm nút thì code sẽ thực hiện gán CMND và mã captcha vào các trường thông tin tương ứng trên website cục thuế sau đó sẽ trả về dữ liệu vừa tìm được về lại excel.
Người dùng phải nhìn và nhập mã capcha, sau đó macro mới thực thi được. Ý tưởng của bạn ấy như vậy, về lý thuyết là làm được.
Kiến thức bạn cần có để thực hiện:
Bạn chú ý cách post ảnh lên diễn đàn:
Chúc bạn thành công. Chú ý các bài hỏi đáp trợ giúp thì cần post đúng nơi.
 

khanhho

Thành viên mới
Em cũng có xem qua bài ĐIỀU KHIỂN IE BẰNG VBA trên diễn đàn rồi, nhưng em chưa áp dụng được. Khi em run code thử thì nó ko lấy được dữ liệu gì cả. Em đã search Class "content tablecontent" và thấy nó là chuỗi duy nhất rồi, nhưng không có dữ liệu trả về.
Em cũng chưa biết cách để đưa dữ liệu từ excel vào điều kiện tìm kiếm trên web, rồi điều khiển nút bấm "Tìm Kiếm" trên web sau đó trả dữ liệu về excel.

Em đang ko biết cách xử lý như thế nào với quy trình như này:
1. Mở link bằng IE ( theo em hiểu thì lúc này oBrowser.ReadyState = READYSTATE_COMPLETE rồi)
2. Lấy dữ liệu mã số thuế và captcha từ Userform.Textbox gán vào điều kiện tìm kiếm trên web.
3. Điều khiển nút bấm "Tìm kiếm" trên web để trang web load dữ liệu và trả về kết quả
4. Lấy dữ liệu kết quả trả về từ web về excel

Mọi người có thể chỉ hướng viết code giúp em được không ạ?
Em cám ơn ạ!
 

thanhphong

Thành viên mới
Vận nội công lần 1: 1h
1. điều kiện để chạy.
Tôi thấy bạn đang để thư viện Microsoft Internet Controls, vì vậy cần phải thêm thư viện:
Microsoft HTML Object Library.

2. Xây dựng code để test.
View code Html thấy vùng này:
Mã:
<td class="content tabContent" valign="top" style="padding-top:30px">
Vì vậy tôi test code như sau xem sao, mục đích là lôi cổ mã html ở vùng mà chúng ta đang quan tâm ra đã.
Nếu không lôi được ra là coi như câu chuyện kết thúc.

Kết quả là lôi ra được. Tạm thế đã.
ở code này tôi cho ghi ra ô J1.

Mã:
Sub tuhocvba()
    Dim oHTML_Element   As IHTMLElement
    Dim HTMLDoc         As HTMLDocument
    Dim s               As String
    
    Set objIE = CreateObject("InternetExplorer.Application")
   
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    objIE.Visible = True
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
   

    Set HTMLDoc = objIE.Document
    
    For Each oHTML_Element In HTMLDoc.GetElementsByClassName("content tabContent")
        s = oHTML_Element.innerHTML 'l?y ph?n text n?m trong th? class = kanjirighttb
        Exit For
    Next
    ThisWorkbook.Sheets(1).Cells(1, 10) = s

End Sub
 

thanhphong

Thành viên mới
Vận công lần 2: 1h.
Kỳ lạ là không thể dùng được GetElementbyID. Đây là điều đáng tiếc, bởi ID được định nghĩa duy nhất.
Nếu dựa vào class name thì có sự trùng lặp. Nhưng đây lại là cách duy nhất mà tôi thấy hiệu quả.
Vậy tôi sẽ đi theo hướng sử dụng classname, và từ từ giải quyết việc trùng lặp.
class name thì rõ rồi: tôi sẽ dùng "ms-input".
Lần 1, đó chính là CMTND, lần 3 chính là mã capcha. Vậy giả sử tôi đã có hai thông tin này là, tôi muốn nhập vào hai ô đó.
Code sau sẽ thực hiện điền tự động hai thông số này vào web.
Mã:
Sub tuhocvba2()
    Dim oHTML_Element
    Dim HTMLDoc         As HTMLDocument
    Dim cnt             As Integer
    Const cmtnd         As String = "123456"
    Const macapcha      As String = "ABCDEF"
    
    Set objIE = CreateObject("InternetExplorer.Application")
  
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    objIE.Visible = True
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
  

    Set HTMLDoc = objIE.Document
    cnt = 0
    For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
                cnt = cnt + 1
                If cnt = 1 Then
                    oHTML_Element.innerText = cmtnd 'nhap chung minh thu
                ElseIf cnt = 3 Then
                    oHTML_Element.innerText = macapcha 'ma capcha
                    Exit For
                End If
                
    Next

End Sub
 

sieutocviet3

Thành viên mới
Tôi xin hỗ trợ tiếp nhé.
Ở bài viết #12, code đã nhập được mã cmnd và mã capcha vào rồi.
Bây giờ tôi sẽ code phần click vào nút Tìm kiếm.
Mã:
Sub tuhocvba3()
    Dim oHTML_Element
    Dim HTMLDoc         As HTMLDocument
    Dim cnt             As Integer
    Const cmtnd         As String = "123456"
    Const macapcha      As String = "ABCDEF"
    
    Set objIE = CreateObject("InternetExplorer.Application")
  
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    objIE.Visible = True
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
  

    Set HTMLDoc = objIE.Document
    cnt = 0
    For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
                cnt = cnt + 1
                If cnt = 1 Then
                    oHTML_Element.innerText = cmtnd 'nhap chung minh thu
                ElseIf cnt = 3 Then
                    oHTML_Element.innerText = macapcha 'ma capcha
                    Exit For
                End If
                
    Next
  
    For Each oHTML_Element In HTMLDoc.getElementsByName("ctl00$ctl12$g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6$ctl50")
        oHTML_Element.Click
        Exit For
    Next
End Sub
Kết quả là nút bấm đã được ấn. Bằng chứng là trên web hiện dòng chữ "Mã xác nhận không đúng. Yêu cầu nhập lại!".
Như vậy về cơ bản là yêu cầu của @khanhho đã được giải quyết xong. Bây giờ phải xem lại thiết kế, xem như vậy là tốt hay chưa?

UserForm hiện lên, load web, macro điền cmnd. Người tự tay điền capcha. Người dùng ấn nút tìm kiếm trên UserForm. Macro tự ấn vào nút tìm kiếm trên web, và lấy thông tin.

=> Thiết kế này đã tốt hay chưa?
 

khanhho

Thành viên mới
Tôi xin hỗ trợ tiếp nhé.
Ở bài viết #12, code đã nhập được mã cmnd và mã capcha vào rồi.
Bây giờ tôi sẽ code phần click vào nút Tìm kiếm.
Mã:
Sub tuhocvba3()
    Dim oHTML_Element
    Dim HTMLDoc         As HTMLDocument
    Dim cnt             As Integer
    Const cmtnd         As String = "123456"
    Const macapcha      As String = "ABCDEF"
   
    Set objIE = CreateObject("InternetExplorer.Application")
 
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    objIE.Visible = True
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
 

    Set HTMLDoc = objIE.Document
    cnt = 0
    For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
                cnt = cnt + 1
                If cnt = 1 Then
                    oHTML_Element.innerText = cmtnd 'nhap chung minh thu
                ElseIf cnt = 3 Then
                    oHTML_Element.innerText = macapcha 'ma capcha
                    Exit For
                End If
               
    Next
 
    For Each oHTML_Element In HTMLDoc.getElementsByName("ctl00$ctl12$g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6$ctl50")
        oHTML_Element.Click
        Exit For
    Next
End Sub
Kết quả là nút bấm đã được ấn. Bằng chứng là trên web hiện dòng chữ "Mã xác nhận không đúng. Yêu cầu nhập lại!".
Như vậy về cơ bản là yêu cầu của @khanhho đã được giải quyết xong. Bây giờ phải xem lại thiết kế, xem như vậy là tốt hay chưa?

UserForm hiện lên, load web, macro điền cmnd. Người tự tay điền capcha. Người dùng ấn nút tìm kiếm trên UserForm. Macro tự ấn vào nút tìm kiếm trên web, và lấy thông tin.

=> Thiết kế này đã tốt hay chưa?
Em nghĩ ko có cách nào mà nhập captcha một lần và lặp qua danh sách mã CMND để trả về các mã số thuế tương ứng được. Nếu mà chỉ cần nhập captcha một lần và tìm lần lượt từng mã CMND được gán vào mảng thì quá tốt ạ.
 

sieutocviet3

Thành viên mới
Em nghĩ ko có cách nào mà nhập captcha một lần và lặp qua danh sách mã CMND để trả về các mã số thuế tương ứng được. Nếu mà chỉ cần nhập captcha một lần và tìm lần lượt từng mã CMND được gán vào mảng thì quá tốt ạ.
Làm gì có chuyện nhập capcha một lần.
Hiện tại tôi đang test, thì nhập và click trên userform của bạn thì OK. Demo chạy từng dòng lệnh. Tuy nhiên như bạn đã biết, tốc độ của macro nhanh hơn vạn lần tốc độ xử lý của web. Nếu cho chạy thả cửa thì web gần như ko kịp hiển thị cho bạn nhìn => đồng nghĩa không lấy được dữ liệu. Do đó phải cân nhắc tính toán sử dụng sleep. Cái này lại phụ thuộc vào tốc độ mạng của từng người. Của bạn khác, của tôi khác.
Code này tôi chả thấy lợi cái gì, thời gian không lợi, người thì vẫn phải nhập capcha, vẫn tay chân.
Xem lại thiết kế để cho đỡ phiền hà người code ấy.
List cmnd => macro load list ấy ra nhập thẳng vào web. Người dùng tự nhập capcha và ấn tìm kiếm , lưu web vào một folder. (tôi chẳng thấy thao tác ấn tìm kiếm trên web và trên userform khác gì nhau).
Sau đó macro tổng hợp tất cả các file html mà bạn lưu ban nãy trong thư mục thành list họ tên...
 

khanhho

Thành viên mới
Làm gì có chuyện nhập capcha một lần.
Hiện tại tôi đang test, thì nhập và click trên userform của bạn thì OK. Demo chạy từng dòng lệnh. Tuy nhiên như bạn đã biết, tốc độ của macro nhanh hơn vạn lần tốc độ xử lý của web. Nếu cho chạy thả cửa thì web gần như ko kịp hiển thị cho bạn nhìn => đồng nghĩa không lấy được dữ liệu. Do đó phải cân nhắc tính toán sử dụng sleep. Cái này lại phụ thuộc vào tốc độ mạng của từng người. Của bạn khác, của tôi khác.
Code này tôi chả thấy lợi cái gì, thời gian không lợi, người thì vẫn phải nhập capcha, vẫn tay chân.
Xem lại thiết kế để cho đỡ phiền hà người code ấy.
List cmnd => macro load list ấy ra nhập thẳng vào web. Người dùng tự nhập capcha và ấn tìm kiếm , lưu web vào một folder. (tôi chẳng thấy thao tác ấn tìm kiếm trên web và trên userform khác gì nhau).
Sau đó macro tổng hợp tất cả các file html mà bạn lưu ban nãy trong thư mục thành list họ tên...
Như bình thường thì mình vừa phải gõ CMND, vừa phải gõ captcha sau đó tìm kiếm, copy tên (để đối chiếu lại, vì có những trường hợp sai tên), copy mst, dán vào excel. Nên em muốn rút ngắn thời gian nhập liệu CMND (vì đã có sẵn Employee master list từ nhân sự), rút ngắn được thao tác copy dán kết quả tìm được về excel.
Nếu anh có phương án nào khả dĩ hơn thì giúp em với ạ. Hic Hic
Em cám ơn ạ!
 

khanhho

Thành viên mới
tôi chẳng thấy thao tác ấn tìm kiếm trên web và trên userform khác gì nhau
Vì em muốn gán sẵn khi ấn tìm kiếm trên userform thì nó sẽ ấn tìm kiếm trên web và sẽ điền tiếp tục số CMND liền kề bên dưới vào textbox ạ.
 

sieutocviet3

Thành viên mới
Đó là ý tưởng thiết kế của bạn thôi. Bạn làm thế này gây phiền hà cực kỳ lớn cho người code.
Vấn đề gặp phải: Là sau khi ấn tìm kiếm (code VBA ấn nhé) thì cái web trên UserForm nó không hiển thị được dù đã cho wait 1s, 2s (chờ cho web load hoàn toàn).
Khi tôi chạy từng dòng lệnh thì nhìn thấy nó ghi được vào các ô trên web của bạn và ấn tìm kiếm. Tuy nhiên mã xác nhận sai, do đó web load ra là mã xác nhận không đúng.

Tóm lại:
Không đưa được mã xác nhận đúng vào web. Thời điểm nhập mã thì chắc chắn đúng, nhưng mã đó được web load từ khi nào thì chịu. Chỉ biết khi web nó xác nhận thì nó báo sai.

Không làm cho web hiển thị trung thực với thực tế đang diễn ra (đã truyền mã cmnd và mã capcha, nhưng chỉ thấy web biến mất không để lại dấu tích gì).

Tôi không chắc việc sử dụng web trên US là tốt. Tôi nghĩ bạn vẫn có thể cho load web bình thường, sau đó macro hiện ô inbox để bạn nhập mã capcha vào đó. Nhập xong ấn OK thì macro vẫn tiếp tục được. Tóm lại, không nên đút cái web vào US. Tôi cũng chưa thấy ai làm như vậy cả.
 

bvtvba

Thành viên mới
Làm thế nào để hiển thị trạng thái của web trên UserForm là vấn đề không đơn giản đâu.
Không chỉ là web, chúng ta biết rằng ngay với các đối tượng khác trên UserForm dù trên code đã thay đổi trạng thái, tuy nhiên trên UserForm lại không thể hiện điều đó.
Vì vậy mới có lệnh DoEvents để làm mới lại US. Tuy nhiên đây lại là sự kết hợp giữa web nhúng vào US, thì là việc khó.
Bạn chủ topic dùng F8 chạy từng dòng lệnh thì thấy OK. Nhưng khi cho chạy một mạch là chả còn thấy gì nữa.

Code này mục đích là để đút thông tin cmnd và mã capcha vào cái web trên US của bạn nhé.
Code trên UserForm sửa lại như sau:
Mã:
Private Sub CommandButton1_Click()
  Dim cmnd      As String
  Dim macapcha  As String
  cmnd = Me.TextBox1.Text 'tuhocvba.net
  macapcha = Me.TextBox2.Text 'tuhocvba.net
  If cmnd <> "" Then
    Me.WebBrowser1.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    Me.WebBrowser1.Refresh
    ActiveCell.Offset(1, 0).Activate
    Me.TextBox1.Value = ActiveCell.Value
    Me.TextBox2.SetFocus
    Set objIE = Me.WebBrowser1
  End If
 
 
  Call tuhocvba3(cmnd, macapcha)
  Do While Me.WebBrowser1.Busy = True Or Me.WebBrowser1.ReadyState <> 4
    DoEvents
  Loop
 
End Sub

Private Sub UserForm_Initialize()
    
Sheet1.Range("A2").Activate
Set objIE = Me.WebBrowser1
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
Do While objIE.Busy = True Or objIE.ReadyState <> 4
    DoEvents
Loop
Me.TextBox1.Value = ActiveCell.Value

End Sub
Code trên Modúle:
Mã:
Public objIE  As InternetExplorer
Sub show_form()
  Sheet1.Range("A2").Activate
  UserForm1.Show
End Sub


Sub tuhocvba3(ByVal cmnd As String, ByVal macapcha As String)
    Dim oHTML_Element   As IHTMLElement
    Dim HTMLDoc         As HTMLDocument
    Dim cnt             As Integer
 
    
  

    Set HTMLDoc = UserForm1.WebBrowser1.Document 'objIE.Document
    cnt = 0
    For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
                cnt = cnt + 1
                If cnt = 1 Then
                    oHTML_Element.innerText = cmnd 'nhap chung minh thu
                    Application.Wait Now() + TimeSerial(0, 0, 1)
                ElseIf cnt = 3 Then
                    oHTML_Element.innerText = macapcha 'ma capcha
                    Application.Wait Now() + TimeSerial(0, 0, 1)
                    Exit For
                End If
                
    Next
    
    Application.Wait Now() + TimeSerial(0, 0, 2) '1s
    For Each oHTML_Element In HTMLDoc.getElementsByName("ctl00$ctl12$g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6$ctl50")
        oHTML_Element.Click
        Exit For
    Next
    Application.Wait Now() + TimeSerial(0, 0, 1) '1s
  
End Sub
 

khanhho

Thành viên mới
Đó là ý tưởng thiết kế của bạn thôi. Bạn làm thế này gây phiền hà cực kỳ lớn cho người code.
Vấn đề gặp phải: Là sau khi ấn tìm kiếm (code VBA ấn nhé) thì cái web trên UserForm nó không hiển thị được dù đã cho wait 1s, 2s (chờ cho web load hoàn toàn).
Khi tôi chạy từng dòng lệnh thì nhìn thấy nó ghi được vào các ô trên web của bạn và ấn tìm kiếm. Tuy nhiên mã xác nhận sai, do đó web load ra là mã xác nhận không đúng.

Tóm lại:
Không đưa được mã xác nhận đúng vào web. Thời điểm nhập mã thì chắc chắn đúng, nhưng mã đó được web load từ khi nào thì chịu. Chỉ biết khi web nó xác nhận thì nó báo sai.

Không làm cho web hiển thị trung thực với thực tế đang diễn ra (đã truyền mã cmnd và mã capcha, nhưng chỉ thấy web biến mất không để lại dấu tích gì).

Tôi không chắc việc sử dụng web trên US là tốt. Tôi nghĩ bạn vẫn có thể cho load web bình thường, sau đó macro hiện ô inbox để bạn nhập mã capcha vào đó. Nhập xong ấn OK thì macro vẫn tiếp tục được. Tóm lại, không nên đút cái web vào US. Tôi cũng chưa thấy ai làm như vậy cả.
Dạ vậy anh giúp em dùng inputbox cũng được ạ. em cám ơn anh.
 

thanhphong

Thành viên mới
Phải xem lại thiết kế thật. Bỏ cái UserForm đi, không cần.
Ngoài ra, nếu list có 1000 người, cứ chạy như thế này, máy chạy-> người dùng nhập capcha -> máy chạy ...
Đang chạy giữa chừng, muốn đi vệ sinh thì pause như thế nào?
Cần thiết kế lại.
 

khanhho

Thành viên mới
Phải xem lại thiết kế thật. Bỏ cái UserForm đi, không cần.
Ngoài ra, nếu list có 1000 người, cứ chạy như thế này, máy chạy-> người dùng nhập capcha -> máy chạy ...
Đang chạy giữa chừng, muốn đi vệ sinh thì pause như thế nào?
Cần thiết kế lại.
Dạ vâng, mọi người xem có cách nào hay thì cứ thực hiện thôi ạ. Vì ban đầu e cũng chưa hiểu được cách thức hoạt động của việc lấy dữ liệu từ HTML nên em mới thiết kế như thế ạ.
 

Euler

Biên Tập Viên
Dự án này không phù hợp khi dùng VBA. Cái công dùng VBA không giảm thiểu được chút thời gian nào so với làm bằng tay bởi cái mã capcha không hề dễ nhìn. Đến người nhìn còn toét mắt ra. Khi đưa vào VBA phải xử lý nhập sai capcha thì sao. Do đó, tôi nghĩ làm bằng tay thì tốt hơn.
Ở code này, tôi không dùng gì tới UserForm mà dùng inputBox hiện ra để bạn nhập Capcha. Tuy nhiên, cũng không thể bắt được dữ liệu.
(Các dòng code 58-68)
Link download:
Mã:
Option Explicit
Public objIE    As Object

Sub tuhocvba4()
    Dim oHTML_Element
    Dim HTMLDoc         As HTMLDocument
    Dim cnt             As Integer
    Dim Name            As Variant
    Dim macapcha        As String
    Dim i               As Long
    Dim rend            As Long
    Dim cmtnd           As String
    Const rstart        As Long = 6
    rend = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    If rend < rstart Then
        MsgBox "Khong tim thay du lieu CMND tren cot A"
        Exit Sub
    End If
    
    Set objIE = CreateObject("InternetExplorer.Application")
 
    objIE.Navigate "http://tncnonline.com.vn/Pages/TracuuMST.aspx"
    objIE.Visible = True
    Do While objIE.Busy = True Or objIE.ReadyState <> 4
        DoEvents
    Loop
 
    For i = rstart To rend Step 1
        cmtnd = ThisWorkbook.Sheets(1).Cells(i, 1)
          Set HTMLDoc = objIE.Document
          cnt = 0
          Name = Application.InputBox(Prompt:="Name Level 0:", Title:="Where User", Default:="NhapMaCapCha", Type:=2)  'Type:=2 la kieu ky tu Text
          If VarType(Name) = vbBoolean Then
              MsgBox "Chuong trinh ket thuc."
              Exit Sub      ' An nut Cancel nen thoat chuong trinh
          End If
          macapcha = CStr(Name)
          For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
                      cnt = cnt + 1
                      If cnt = 1 Then
                          oHTML_Element.innerText = cmtnd 'nhap chung minh thu
                      ElseIf cnt = 3 Then
                          oHTML_Element.innerText = macapcha 'ma capcha
                          Exit For
                      End If
                      
          Next
        
          For Each oHTML_Element In HTMLDoc.getElementsByName("ctl00$ctl12$g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6$ctl50")
              oHTML_Element.Click
              DoEvents
              Exit For
          Next
          Application.Wait Now() + TimeSerial(0, 0, 1) 'Doi 1s
          'Ma so thue
          'id: id="ctl00_ctl12_g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6_txtMST"
          'Name: Name = ctl00$ctl12$g_e4936da3_53dd_4c77_b76a_b09e9bbed3f6$txtMST
          Set HTMLDoc = objIE.Document
          cnt = 0
          For Each oHTML_Element In HTMLDoc.getElementsByClassName("ms-input")
              cnt = cnt + 1
              MsgBox cnt & Chr(10) & oHTML_Element.Value
              If cnt = 4 Then
                ThisWorkbook.Sheets(1).Cells(i, 2) = oHTML_Element.Value 'Ma so thue
                Exit For
              End If
              
          Next
    Next i
    
End Sub
Tóm lại, dự án bạn đưa ra là không khả thi so với điều kiện thực tế. Thời gian không giảm thiểu nhiều, công sức code lại lớn, gặp nhiều trở ngại.
Vậy, góp ý là bạn nên dừng dự án này lại. Không phải ý tưởng nào đưa ra cũng thực tế, và khi nhìn thấy tính khả thi không cao thì nên dừng.
 
Top