TaxCodeVN v2.3 - Ứng dụng Tra cứu Mã Số Thuế nhanh chóng

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,101
Được thích
2,993
Giới tính
Nam
***Dự án đã được cập nhật trở lại***
Vì thời đại thay đổi, công nghệ phát triển, mọi thứ cần nhanh chóng.




Hôm nay tôi sẽ chia sẻ với các bạn ứng dụng Excel dùng để tra mã số thuế của cá nhân nếu các bạn đã có Danh sách Chứng Minh Thư hoặc Số Căn Cước hoặc tra cứu mã số thuế đồng thời tra cứu chi nhánh công ty, người đại diện nhiều công ty, ... được viết hoàn toàn bằng VBA. Với ứng dụng này việc tra cứu Mã Số Thuế của các bạn trở nên dễ dàng hơn, thay vì phải nhập từng đơn vị của danh sách lên một Website nào đó để tìm kiếm rồi thao tác tay sao chép vào Trang tính thì sẽ rất tốn kém thời gian. Và như vậy công việc của các bạn sẽ trở nên hiệu quả hơn.


Ứng dụng sử dụng phương pháp bất đồng bộ của thư viện XMLHTTP nên việc thực hiện lấy dữ liệu rất nhanh. Mà không mất nhiều thời gian chờ đợi.


Kho lưu trữ Github của tôi:

---------------------------------------------------
Liên hệ hỗ trợ:
Messenger: https://m.me/he.sanbi hoặc tìm /he.sanbi
Zalo: 0384170514

---------------------------------------------------
Các bạn có thể tham khảo thêm:
+ Dữ liệu thời tiết nhanh chóng từ Excel:
+ Ứng dụng gửi tin nhắn Zalo từ Excel:


---------------------------------------------------
Nếu các bạn quan tâm các bản cập nhật tương lại hãy nhấn nút Theo dõi trên đầu bài viết.

---------------------------------------------------
Các bài viết của tôi tại tag #sanbi udf
 

File đính kèm

  • TaxCodeVN_v2.3.xlsm
    675.5 KB · Đọc: 64
Lần chỉnh sửa cuối:
Chính xác là vậy. Bạn nào viết ứng dụng bán hàng, xuất hoá đơn sẽ thấy nó cần thiết như thế nào.
Tôi cũng đã làm một cái bên Access cũng dùng IE chứ không dùng được XMLHTTPRequest vì trang masothue.vn bảo mật cao, chưa biết cách nào khác.
Thay vì lên web, gõ thông tin rồi copy/paste thì mình tích hợp nó vô ứng dụng luôn. Khi cần thì gõ MST, lấy thông tin về, kiểm tra và gán thẳng vô Hoá đơn luôn, khỏi qua công đọan copy/paste thủ công.
chính xác là nó đấy ... thiết kế cái Form hóa đơn theo chuẩn nữa xong lấy về gán nó vào là xong
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Chính xác là vậy. Bạn nào viết ứng dụng bán hàng, xuất hoá đơn sẽ thấy nó cần thiết như thế nào.
Tôi cũng đã làm một cái bên Access cũng dùng IE chứ không dùng được XMLHTTPRequest vì trang masothue.vn bảo mật cao, chưa biết cách nào khác.
Thay vì lên web, gõ thông tin rồi copy/paste thì mình tích hợp nó vô ứng dụng luôn. Khi cần thì gõ MST, lấy thông tin về, kiểm tra và gán thẳng vô Hoá đơn luôn, khỏi qua công đọan copy/paste thủ công.
Tôi thấy trang masothue.vn bảo mật đâu có cao đâu bạn, dùng request bình thường vẫn được mà, không biết có hiểu nhầm ý bạn không?

Mã:
Dim url As String, arr
Dim hreq As Object, html As Object, tken As String, str
Set hreq = CreateObject("winhttp.winhttprequest.5.1")
Set html = CreateObject("htmlfile")
arr = [a1:a15]
With hreq
On Error Resume Next
For i = 1 To UBound(arr)
    .Open "POST", "https://masothue.vn/Ajax/Search", True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    .Send "q=" & arr(i, 1) ''=auto&token=" & tken
    .WaitForResponse
    url = t_ken(.ResponseText, 2)
    .Open "GET", "https://masothue.vn" & url, False
    .Send
    html.body.innerhtml = .ResponseText
    If Err.Number Then
        Err.Clear
    Else
        Cells(i, "B") = html.getelementsbytagname("H1")(0).innertext
    End If
Next
End With
End Sub
Function t_ken(ByVal str As String, ByVal n As Long)
With CreateObject("vbscript.regexp")
    If n = 1 Then
        .Pattern = "^.*\'([^']+)\'}$"
    Else
        .Pattern = "^.*(\/\d+[^\/]+)\'}$"
    End If
    t_ken = .Replace(Replace(str, """", "'"), "$1")
End With
End Function
Có trang này mới gọi là bảo mật cao: http://danhba.hanoi.edu.vn/
 
Upvote 0
Tôi thấy trang masothue.vn bảo mật đâu có cao đâu bạn, dùng request bình thường vẫn được mà, không biết có hiểu nhầm ý bạn không?

Mã:
Dim url As String, arr
Function t_ken(ByVal str As String, ByVal n As Long)
With CreateObject("vbscript.regexp")
    If n = 1 Then
        .Pattern = "^.*\'([^']+)\'}$"
    Else
        .Pattern = "^.*(\/\d+[^\/]+)\'}$"
    End If
    t_ken = .Replace(Replace(str, """", "'"), "$1")
End With
End Function
Có trang này mới gọi là bảo mật cao: http://danhba.hanoi.edu.vn/

Vậy là do tôi trình chưa tới với lại web thì không rành lắm chỉ có chuyện cần mới ngâm cứu tới nó do đó làm không ra vụ token này. :)
Trang masothue.vn nếu nhập MST công ty không có chi nhánh thì url nó trả về khác, nếu có chi nhánh thì url có MST + token
Bạn có thể giải thích cho tôi về cái hàm lấy token này không, cơ chế hoạt động của nó? n=1, =2 và pattern của nó.
Cảm ơn bạn nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy là do tôi trình chưa tới với lại web thì không rành lắm chỉ có chuyện mới cần nên làm không ra vụ token này. :)
Cảm ơn bạn nhé. Để tôi ngâm cứu xem.
Nó không cần token đâu bạn, mới đầu tôi cũng nghĩ có đòi token nên mới viết thêm đoạn tìm token nhưng không cần thiết.
Tham số đầu vào của POST
1598461649176.png
chỉ cần"q=365626228" là đủ.
 
Upvote 0
Vậy là do tôi trình chưa tới với lại web thì không rành lắm chỉ có chuyện cần mới ngâm cứu tới nó do đó làm không ra vụ token này. :)
Trang masothue.vn nếu nhập MST công ty không có chi nhánh thì url nó trả về khác, nếu có chi nhánh thì url có MST + token
Bạn có thể giải thích cho tôi về cái hàm lấy token này không, cơ chế hoạt động của nó? n=1, =2 và pattern của nó.
Cảm ơn bạn nhé.
1. Nếu công ty có nhiều chi nhánh thì khi nhập công ty nó trả kết quả ra nhiều chi nhánh, ví dụ search vinamilk thì nó ra url="https://masothue.vn/Search/?q=vinamilk&type=auto&token=8dWR2CXs0w", như tôi nói cái token của nó không quan trong nên bạn thay chỗ màu đỏ bằng gì cũng được vẫn ra kết quả đúng, chỗ này tùy biến lại chút chắc được.
2. Cái hàm lấy token đó là dò từ kết quả trả về của POST+"q=xxxxxxxx", nếu q là một chuỗi chính xác thì nó sẽ trả kết quả {"success":1,"type":"ch\u1ee9ng minh th\u01b0","typeId":3,"url":"\/8537325582-dang-thi-mong-nhi"}, lấy đoạn màu đỏ GET thì sẽ lấy được thông tin cần lấy
Còn nếu thông tin không chính xác như bạn nói thì có thể nó là công ty có nhiều chi nhánh (get lại đoạn url ở số 1 lấy toàn bộ chi nhánh) hoặc không đúng.
 
Upvote 0
Tôi thấy trang masothue.vn bảo mật đâu có cao đâu bạn, dùng request bình thường vẫn được mà, không biết có hiểu nhầm ý bạn không?

Mã:
Dim url As String, arr
Dim hreq As Object, html As Object, tken As String, str
Set hreq = CreateObject("winhttp.winhttprequest.5.1")
Set html = CreateObject("htmlfile")
arr = [a1:a15]
With hreq
On Error Resume Next
For i = 1 To UBound(arr)
    .Open "POST", "https://masothue.vn/Ajax/Search", True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    .Send "q=" & arr(i, 1) ''=auto&token=" & tken
    .WaitForResponse
    url = t_ken(.ResponseText, 2)
    .Open "GET", "https://masothue.vn" & url, False
    .Send
    html.body.innerhtml = .ResponseText
    If Err.Number Then
        Err.Clear
    Else
        Cells(i, "B") = html.getelementsbytagname("H1")(0).innertext
    End If
Next
End With
End Sub
Function t_ken(ByVal str As String, ByVal n As Long)
With CreateObject("vbscript.regexp")
    If n = 1 Then
        .Pattern = "^.*\'([^']+)\'}$"
    Else
        .Pattern = "^.*(\/\d+[^\/]+)\'}$"
    End If
    t_ken = .Replace(Replace(str, """", "'"), "$1")
End With
End Function
Có trang này mới gọi là bảo mật cao: http://danhba.hanoi.edu.vn/

Bạn thử tải file ở #42 xem tốc độ thế nào.

Cái Api trang này tôi đã viết từ ngày đầu tiên, nhưng sai lầm khiến tôi phải chuyển hướng, đó là do https:// nhưng tôi chỉ viết http://
Làm cho Ajax Search không phản hồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Dim url As String, arr
...
arr = [a1:a15]
With hreq
On Error Resume Next
For i = 1 To UBound(arr)
    .Open "POST", "https://masothue.vn/Ajax/Search", True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    .Send "q=0312332096" '& arr(i, 1) ''=auto&token=" & tken
    .WaitForResponse
   ,,,
End Function

Bạn cho hỏi thêm là: khi tôi bỏ "Resume next" thì nó báo lỗi như hình bên dưới, lỗi dòng .WaitForResponse, còn nếu vẫn để thì nó không tra ra kết quả.
Nguyên nhân do đâu hay tôi làm sai chỗ nào? Tôi cũng có click chọn/bỏ chọn SSL3 thử trong Internet Option cũng không được.

Screen Shot 2020-08-27 at 8.05.02 AM.png
 
Upvote 0
Bạn thử tải file ở #42 xem tốc độ thế nào.

Cái Api trang này tôi đã viết từ ngày đầu tiên, nhưng sai lầm khiến tôi phải chuyển hướng, đó là do https:// nhưng tôi chỉ viết http://
Làm cho Ajax Search không phản hồi.
Tôi thấy cái Asyn nhanh, cả Asyn và Normal đều dùng các object request, nếu bạn đã xác định cái nào nhanh nhất thì nên giữ cái đó thôi, và tôi nghĩ bạn nên làm thêm tùy chọn là Công ty kết quả trả là tất cả các chi nhánh ví dụ như vinamilk.
Bài đã được tự động gộp:

Bạn cho hỏi thêm là: khi tôi bỏ "Resume next" thì nó báo lỗi như hình bên dưới, lỗi dòng .WaitForResponse, còn nếu vẫn để thì nó không tra ra kết quả.
Nguyên nhân do đâu hay tôi làm sai chỗ nào? Tôi cũng có click chọn/bỏ chọn SSL3 thử trong Internet Option cũng không được.

View attachment 244191
Cái mã 03123322096 không có bạn ạ, tôi dùng On error để dễ loại những thằng không tìm được, chứ kết quả trả về nó có thông báo trạng thái.
1598492881511.png
 
Upvote 0
@ongke0711 @kelacloi @n0thing1988 @bactu @leba207 @Kiều Mạnh @
@DOTEXCEL2010 @huuduy.duy @Hai Lúa Miền Tây @Ba mười ba @bigbabol89 @tueyennhi @khanhly94 @xuongrongdat

Cập nhật file mới gồm 4 cách lấy dữ liệu là IE , cache, bất đồng bộ và đơn giản
Bất đồng bộ là nhanh nhất trong tất cả

Đồng thời gộp Tra cứu Kê Khai Hải Quan vào file

Tải file từ Github:
Hi anh,
- Async và Normal bị lỗi này và debug lần lượt ở "Call returnVal.Work.Final(returnVal)" và ": url = RE.Execute(.ResponseText)(0).submatches(0)"
1598492515118.png
- IE và Cache thì không ra hết, em tra 7 cái ra được 1 cái ( mặc dù em tra tay thì ra )
 
Upvote 0
Sao file MST không đính kèm vào mail được nhỉ? Nó báo virus. Bình thường file xlsm chứa macro em vẫn đính lèm bình thường mà nhỉ?
1598495680540.png
 
Upvote 0
Cái mã 03123322096 không có bạn ạ, tôi dùng On error để dễ loại những thằng không tìm được, chứ kết quả trả về nó có thông báo trạng thái.
View attachment 244195

Bạn gõ dư số 2 rồi: 0312332096
Cả file của Hesanbi, máy tôi chạy cũng không phản ứng gì ngoại trừ cái dùng IE.
Windows 7 32, office 2013, có cài msEdge chromium.
 
Upvote 0
Ứng dụng cực đỉnh... Đa tạ chủ thớt giúp bọn đàn em tiết kiệm được khối thời gian trong công việc nhân sự và bán hành...
 
Upvote 0
Bạn gõ dư số 2 rồi: 0312332096
Cả file của Hesanbi, máy tôi chạy cũng không phản ứng gì ngoại trừ cái dùng IE.
Windows 7 32, office 2013, có cài msEdge chromium.
Cái mã này đang có chi nhánh bạn ạ, code tôi và Hasanbi viết nếu kết quả trả về chỉ có một kết quả thôi, nếu bạn muốn trả kết quả nhiều như vậy tôi sẽ chỉnh lại code
1598496328172.png
 
Upvote 0
Em tra, thì bị lỗi này

1.png2.png
 
Upvote 0
Bạn cho hỏi thêm là: khi tôi bỏ "Resume next" thì nó báo lỗi như hình bên dưới, lỗi dòng .WaitForResponse, còn nếu vẫn để thì nó không tra ra kết quả.
Nguyên nhân do đâu hay tôi làm sai chỗ nào? Tôi cũng có click chọn/bỏ chọn SSL3 thử trong Internet Option cũng không được.
LoiTLS.png


Cuối cùng cũng tìm ra cái lỗi như hình trên và cách khắc phục nó. Chia sẻ lại cho các bạn nào mà máy tính cũng gặp trường hợp như tôi bị - Chạy WihttpRequest không phản ứng gì hết làm cứ tưởng code bị sai cái gì đó.
Trường hợp này xảy ra ở Windows 7 SP1, do chưa Enable TSL 1.1 và 1.2 cho WinHTTP.

Các bạn làm theo hướng dẫn trong link bên dưới để thiết lập lại trong Registry hoặc xem file PDF tôi đã download về.
Link: https://support.microsoft.com/en-us...and-tls-1-2-as-default-secure-protocols-in-wi
Bài đã được tự động gộp:

Cái mã này đang có chi nhánh bạn ạ, code tôi và Hasanbi viết nếu kết quả trả về chỉ có một kết quả thôi, nếu bạn muốn trả kết quả nhiều như vậy tôi sẽ chỉnh lại code
View attachment 244197

Tôi dùng IE thì xử lý theo hướng:
- Nếu MST không có chi nhánh thì đi thẳng vô trang chi tiết để lấy thông tin.
- Nếu MST có chi nhánh thì lấy cái href link của cty mẹ (dòng đầu tiên) và đi tiếp vào trang chi tiết của nó lấy thông tin luôn. Không cần nghiệp vụ liệt kê các cty chi nhánh.
Nếu được bạn sửa giùm code dùng WinhttpRequest, để tôi tham khảo cách làm nhé, bỏ cách dùng IE luôn.
Cảm ơn nhiều.
 

File đính kèm

  • Update to enable TLS 1.1 and TLS 1.2 as default secure protocols in WinHTTP in Windows.pdf
    77 KB · Đọc: 45
Lần chỉnh sửa cuối:
Upvote 0
Cuối cùng cũng tìm ra cái lỗi như hình trên và cách khắc phục nó. Chia sẻ lại cho các bạn nào mà máy tính cũng gặp trường hợp như tôi bị - Chạy WihttpRequest không phản ứng gì hết làm cứ tưởng code bị sai cái gì đó.
Trường hợp này xảy ra ở Windows 7 SP1, do chưa Enable TSL 1.1 và 1.2 cho WinHTTP.

Các bạn làm theo hướng dẫn trong link bên dưới để thiết lập lại trong Registry hoặc xem file PDF tôi đã download về.
Link: https://support.microsoft.com/en-us...and-tls-1-2-as-default-secure-protocols-in-wi
Bài đã được tự động gộp:



Tôi dùng IE thì xử lý theo hướng:
- Nếu MST không có chi nhánh thì đi thẳng vô trang chi tiết để lấy thông tin.
- Nếu MST có chi nhánh thì lấy cái href link của cty mẹ (dòng đầu tiên) và đi tiếp vào trang chi tiết của nó lấy thông tin luôn. Không cần nghiệp vụ liệt kê các cty chi nhánh.
Nếu được bạn sửa giùm code dùng WinhttpRequest, để tôi tham khảo cách làm nhé, bỏ cách dùng IE luôn.
Cảm ơn nhiều.
Tôi code tạm như vầy, bạn có thể tùy biến lại code
Mã:
Sub a()
Dim url As String, arr
Dim hreq As Object, html As Object, tken As String, str, url2_part1, url2_part2
Dim tagdiv
Set hreq = CreateObject("winhttp.winhttprequest.5.1")
Set html = CreateObject("htmlfile")
arr = [a1:a15]
url2_part1 = "https://masothue.vn/Search/?q="
url2_part2 = "&type=auto&token=gpe"
With hreq
On Error Resume Next
For i = 1 To UBound(arr)
    .Open "POST", "https://masothue.vn/Ajax/Search", True
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    .Send "q=" & arr(i, 1) ''=auto&token=" & tken
    .WaitForResponse
    html.body.innerhtml = .ResponseText
        url = "https://masothue.vn" & t_ken(.ResponseText, 2)
        .Open "GET", url, False
        .Send
        html.body.innerhtml = .ResponseText
        If Err.Number Then
            Err.Clear
            url = url2_part1 & arr(i, 1) & url2_part2
            .Open "GET", url, False
            .Send
            html.body.innerhtml = .ResponseText
            For Each tagdiv In html.getelementsbytagname("div")
                If tagdiv.classname = "tax-listing" Then
                    Cells(i, "B") = tagdiv.innertext
                    Exit For
                End If
            Next
        Else
            Cells(i, "B") = html.getelementsbytagname("H1")(0).innertext
        End If
Next
End With
End Sub
Function t_ken(ByVal str As String, ByVal n As Long)
With CreateObject("vbscript.regexp")
    If n = 1 Then
        .Pattern = "^.*'typeId':(\d+).*$"
    Else
        .Pattern = "^.*(\/\d+[^\/]+)\'}$"
    End If
    t_ken = .Replace(Replace(str, """", "'"), "$1")
End With
End Function
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Nâng cấp ứng dụng cập nhật mã số Thuế.
Phương pháp lấy dữ liệu XMLHTTP bất đồng bộ rất nhanh.
Tra cứu mã số thuế đồng thời tra cứu chi nhánh công ty, người đại diện nhiều công ty, ...


Cập nhật tại Github:


@ongke0711 @kelacloi @n0thing1988 @bactu @leba207 @Kiều Mạnh
@DOTEXCEL2010 @huuduy.duy @Hai Lúa Miền Tây @Ba mười ba @bigbabol89 @tueyennhi @khanhly94 @xuongrongdat
Xin chào Hesanbi
mình down bài 58 về. Bấm nút để lấy MST về thì nó chuyển sang chữ "Đợi". Và đợi lâu quá chưa ra kết quả.
1598519166649.png
Bạn có thể hướng dẫn qua là dùng bản IE bao nhiêu không? Hoặc phải mở IE lên sẵn rồi mới bấm nút hay gì?
Mình chỉ mở file lên và điền CMND thì đợi lâu như thế kia.
 
Upvote 0
Xin chào Hesanbi
mình down bài 58 về. Bấm nút để lấy MST về thì nó chuyển sang chữ "Đợi". Và đợi lâu quá chưa ra kết quả.
View attachment 244251
Bạn có thể hướng dẫn qua là dùng bản IE bao nhiêu không? Hoặc phải mở IE lên sẵn rồi mới bấm nút hay gì?
Mình chỉ mở file lên và điền CMND thì đợi lâu như thế kia.
Đợi chờ là hạnh phúc nha bạn, bấm rồi đi cafe hay ăn gì đó rồi vào thử xem như thế nào.
 
Upvote 0
Web KT

Group

DIỄN ĐÀN GIẢI PHÁP EXCEL
Back
Top Bottom