Sử dụng hàm Istext trong VBA như nào?

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Em xin được hỏi trong VBA sử dụng hàm Istext như nào ạh?

Xin cám ơn
 
Đoạn code dưới em sai ở đâu?

PHP:
Sub test()
If Not Intersect([F3:F20000], Target) Is Nothing Then
   If Target <> "" And VAT_check(Target) = False Then
         
            MsgBox "Wrong Tax code" & Chr(13) & "Please key correctly"
   End If
 End If


End Sub

Trong module em đã có Function VAT_check
Xin chỉ giúp em lỗi đoạn code trên (nó báo lỗi ở Target )
 
Lần chỉnh sửa cuối:
Upvote 0
Trước tiên bạn phải khẳng định là hàm tự tạo của bạn là OK trong mọi trường hợp chưa đã; Bằng không bạn đưa cái hàm đó lên để mọi người chiêm ngưỡng, được chăng?

( Hình như bạn còn chép thiếu 1 End If hay 1 cái gì đó để thay cho cụm từ này thì phải :-= )
 
Upvote 0
Hàm Mst là em thảm khảo trên GPE (của OVERACC) thôi
Nó báo lỗi sau và dừng tại Target --> VAT_Check(target)
Lỗi " compile error, Byref argument type mismatch"
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
 Function VAT_check(mst1 As String) As Boolean
Dim mst As String
Dim skt As Integer
If Len(mst1) < 10 Then
VAT_check = False
Else

mst = Mid(mst1, 1, 10)
If IsNumeric(mst) Then
msttext = Format(mst, "0000000000")
Else
msttext = mst
End If
skt = CDbl(Mid(msttext, 1, 1)) * 31
skt = skt + CDbl(Mid(msttext, 2, 1)) * 29
skt = skt + CDbl(Mid(msttext, 3, 1)) * 23
skt = skt + CDbl(Mid(msttext, 4, 1)) * 19
skt = skt + CDbl(Mid(msttext, 5, 1)) * 17
skt = skt + CDbl(Mid(msttext, 6, 1)) * 13
skt = skt + CDbl(Mid(msttext, 7, 1)) * 7
skt = skt + CDbl(Mid(msttext, 8, 1)) * 5
skt = skt + CDbl(Mid(msttext, 9, 1)) * 3
VAT_check = (CDbl(Mid(msttext, 10)) = 10 - skt Mod 11)
End If
End Function
Hàm check_VAT là em thảm khảo của anh Bình (Ác)
Còn công nhận là em chỉ copy một đoạn code bị lỗi này ra thôi, nhưng về mặt code em thấy đủ rồi chứ
code đang chạy và dừng tại chữ target này VAT_check(ByVal Target)


Hi
Bạn xem lại chứ tôi thấy UDF này báo lổi đấy!
--------------
Ah... tìm ra rồi ---> Chưa khai báo biến msttext
.....................
Nói thêm:Cái Target trong Sub Test của bạn chả có ý nghĩa gì cả (lý ra phải là ActiveCell)
Bạn cho tôi một MST nào hợp lệ, tôi kiểm tra lại code xem!
 
Lần chỉnh sửa cuối:
Upvote 0
mst 0102117575
-----
Em nghĩ VAT_check không sao đâu?

Em nghĩ do lúc đầu sub em khai báo byval as Range (nên khi gặp MST là kiển String nên bị lỗi)

Mình làm sao để sửa lỗi này đây

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.DisplayAlerts = False   

 If Not Intersect([F3:F20000], Target) Is Nothing Then
      If Target <> "" And VAT_check(Target) = False Then         
            'MsgBox "Wrong Tax code" & Chr(13) & "Please key correctly" '
      End If
 End If
Application.DisplayAlerts = True
End Sub

'---------------------------------------------------'

Function VAT_check(mst1 As String) As Boolean
 Dim mst As String
 Dim skt As Integer
 If Len(mst1) < 10 Then
    VAT_check = False
 Else

    mst = Mid(mst1, 1, 10)
    If IsNumeric(mst) Then
           msttext = Format(mst, "0000000000")
    Else
           msttext = mst
    End If
    skt = CDbl(Mid(msttext, 1, 1)) * 31
    skt = skt + CDbl(Mid(msttext, 2, 1)) * 29
    skt = skt + CDbl(Mid(msttext, 3, 1)) * 23
    skt = skt + CDbl(Mid(msttext, 4, 1)) * 19
    skt = skt + CDbl(Mid(msttext, 5, 1)) * 17
    skt = skt + CDbl(Mid(msttext, 6, 1)) * 13
    skt = skt + CDbl(Mid(msttext, 7, 1)) * 7
    skt = skt + CDbl(Mid(msttext, 8, 1)) * 5
    skt = skt + CDbl(Mid(msttext, 9, 1)) * 3
    VAT_check = (CDbl(Mid(msttext, 10)) = 10 - skt Mod 11)
 End If
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em thử sửa thành
If Not Intersect([F3:F20000], Target) Is Nothing Then
If Target <> "" And VAT_check(Range("F:" & Target.Row)) = False Then

MsgBox "Wrong Tax code" & Chr(13) & "Please key correctly"
End If
End If

nhưng cũng không được
 
Upvote 0
Em thử làm như sau:
trong Module1 là hàm VAT_check
Mã:
Function VAT_check(mst1 As String) As Boolean
Dim mst As String
Dim skt As Integer
[COLOR=red]Dim msttext[/COLOR]
If Len(mst1) < 10 Then
    VAT_check = False
Else
    mst = Mid(mst1, 1, 10)
    If IsNumeric(mst) Then
        msttext = Format(mst, "0000000000")
    Else
        msttext = mst
    End If
    skt = CDbl(Mid(msttext, 1, 1)) * 31
    skt = skt + CDbl(Mid(msttext, 2, 1)) * 29
    skt = skt + CDbl(Mid(msttext, 3, 1)) * 23
    skt = skt + CDbl(Mid(msttext, 4, 1)) * 19
    skt = skt + CDbl(Mid(msttext, 5, 1)) * 17
    skt = skt + CDbl(Mid(msttext, 6, 1)) * 13
    skt = skt + CDbl(Mid(msttext, 7, 1)) * 7
    skt = skt + CDbl(Mid(msttext, 8, 1)) * 5
    skt = skt + CDbl(Mid(msttext, 9, 1)) * 3
    VAT_check = (CDbl(Mid(msttext, 10)) = 10 - skt Mod 11)
End If
End Function
Trong VBA, nhấn đúp chuột vào 1 sheet nào đó, rồi thêm đoạn code sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.DisplayAlerts = False
    
 If Not Intersect([F3:F20000], Target) Is Nothing Then
   If Target <> "" And VAT_check(Target.Text) = False Then
        MsgBox "Wrong Tax code" & Chr(13) & "Please key correctly"
   End If
 End If
Application.DisplayAlerts = True
End Sub
Thử thay đổi giá trị trong vùng F3:F20000 xem sao?
 
Upvote 0
Cám ơn Anh nhiều
Thì ra là Target.text
 
Upvote 0
Web KT

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

Back
Top Bottom