Hoàn thiện chương trình đổi số điện thoại Cố định, di động theo mã mới

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
719
Được thích
97
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Dear các anh chị!
Em chắp vá và xào nấu Sub chuyển đổi số điện thoại theo mã mới đã chạy tốt trên mã di động, tuy nhiên động vào mã Cố định không theo quy tắc nào cả nên code chạy không đúng
Lý do làm việc này vì em có danh sách gần 1000 khách hàng cần theo dõi, tuy nhiên số điện thoại lung tung hết và không được cập nhật nhiều khi không nhớ mã cũ đổi sang mã mới là gì lại phải Google tra ạ
Em nhờ anh chị xem và hoàn thiện, sửa lỗi giúp em. Cái này chắc cũng có anh chị em nào cần ạ
Em cám ơn
Mã:
Sub Format_ParenWrapper()
        '<EhHeader>
        On Error GoTo ParenWrapper_Err
        '</EhHeader>
    Dim cell As Range
    Dim key As String
    Dim flag As Boolean
    flag = False

    For Each cell In Selection
        If IsError(cell) = False Then

            If Len(RemoveNonNumeric(CStr(cell))) = 10 Or Len(RemoveNonNumeric(CStr(cell))) = 11 Then
                 cell = Paren(cell.Value)
            Else
                 flag = True
            End If
        End If
    Next cell

    If flag = True Then
        MsgBox "So Dien thoai sai dinh dang"
    End If
        '<EhFooter>
        Exit Sub

ParenWrapper_Err:
        MsgBox Err.Description & vbCrLf & _
               "in excelphone.Phone.ParenWrapper " & _
               "at line " & Erl, _
               vbExclamation + vbOKOnly, "Application Error"
        Resume Next
        '</EhFooter>
End Sub

Function Paren(s As String) As String
        '<EhHeader>
        On Error GoTo Paren_Err
        '</EhHeader>
    Dim stripped As String
    Dim s1, s2, s3 As String
    Dim s4 As String
    stripped = RemoveNonNumeric(s)
    If Len(CStr(stripped)) = 10 Then
        s1 = VBA.Mid(stripped, 1, 3)
        If s1 = "064" Then
            s1 = "0254"
        ElseIf s1 = "254" Then
            s1 = "0254"
        ElseIf VBA.Left(s1, 2) = "64" Then
            s1 = "0254"
        End If
        s2 = VBA.Mid(stripped, 4, 3)
        s3 = VBA.Mid(stripped, 7, 4)
        Paren = "(" & s1 & ") " & s2 & "-" & s3
    ElseIf Len(CStr(stripped)) = 11 Then
        stripped = Convert11to10(stripped)
        s1 = VBA.Mid(stripped, 1, 3)
        s2 = VBA.Mid(stripped, 4, 3)
        s3 = VBA.Mid(stripped, 7, 4)
        Paren = "(" & s1 & ") " & s2 & "-" & s3
    Else
        Paren = s
    End If
        '<EhFooter>
        Exit Function

Paren_Err:
        MsgBox Err.Description & vbCrLf & _
               "in excelphone.Phone.Paren " & _
               "at line " & Erl, _
               vbExclamation + vbOKOnly, "Application Error"
        Resume Next
        '</EhFooter>
End Function
Function RemoveNonNumeric(s As String)
' ns-97' becomes 'ns-'
    RemoveNonNumeric = StringSieve(s, "0123456789", True)
End Function
Function StringSieve(ByVal Text As String, ByVal Filter As String, Optional ByVal ReturnFilterItems As Boolean = True) As String
        '<EhHeader>
        On Error GoTo StringSieve_Err
        '</EhHeader>
    Dim intCharPos  As Integer
    Dim strChar     As String
    StringSieve = ""
    For intCharPos = 1 To Len(Text)
       strChar = VBA.Mid$(Text, intCharPos, 1)
       If ReturnFilterItems Then
           If InStr(Filter, strChar) <> 0 Then
            StringSieve = StringSieve & strChar
           End If
       Else
           If InStr(Filter, strChar) = 0 Then
                StringSieve = StringSieve & strChar
           End If
       End If
    Next
        '<EhFooter>
        Exit Function

StringSieve_Err:
        MsgBox Err.Description & vbCrLf & _
               "in excelphone.Phone.StringSieve " & _
               "at line " & Erl, _
               vbExclamation + vbOKOnly, "Application Error"
        Resume Next
        '</EhFooter>
End Function
Function Convert11to10(s As String) As String
        '<EhHeader>
        On Error GoTo Dash_Err
        '</EhHeader>
    Dim stripped As String
    Dim s1, s2, s3 As String
    Dim s4 As String
    stripped = RemoveNonNumeric(s)
    If Len(CStr(stripped)) = 10 Then
        s1 = VBA.Mid(stripped, 1, 3)
        s2 = VBA.Mid(stripped, 4, 8)
        If s1 = "064" Then
            s1 = "0254"
        ElseIf s1 = "254" Then
            s1 = "0254"
        ElseIf VBA.Left(s1, 2) = "64" Then
            s1 = "0254"
        End If
        Convert11to10 = s1 & s2
    ElseIf Len(CStr(stripped)) = 11 Then
        s1 = VBA.Mid(stripped, 1, 4)
        s2 = VBA.Mid(stripped, 5, 8)
        If s1 = "0169" Then
            s1 = "039"
        ElseIf s1 = "0168" Then
            s1 = "038"
        ElseIf s1 = "0167" Then
            s1 = "037"
        ElseIf s1 = "0166" Then
            s1 = "036"
        ElseIf s1 = "0165" Then
            s1 = "035"
        ElseIf s1 = "0164" Then
            s1 = "034"
        ElseIf s1 = "0163" Then
            s1 = "033"
        ElseIf s1 = "0162" Then
            s1 = "032"
        ElseIf s1 = "0120" Then
            s1 = "070"
        ElseIf s1 = "0121" Then
            s1 = "079"
        ElseIf s1 = "0122" Then
            s1 = "077"
        ElseIf s1 = "0126" Then
            s1 = "076"
        ElseIf s1 = "0128" Then
            s1 = "078"
        ElseIf s1 = "0123" Then
            s1 = "083"
        ElseIf s1 = "0124" Then
            s1 = "084"
        ElseIf s1 = "0125" Then
            s1 = "085"
        ElseIf s1 = "0127" Then
            s1 = "081"
        ElseIf s1 = "0129" Then
            s1 = "082"
        ElseIf s1 = "01992" Then
            s1 = "059"
        ElseIf s1 = "01993" Then
            s1 = "059"
        ElseIf s1 = "01998" Then
            s1 = "059"
        ElseIf s1 = "01999" Then
            s1 = "059"
        ElseIf s1 = "0186" Then
            s1 = "056"
        ElseIf s1 = "0188" Then
            s1 = "058"
        End If
        
        Convert11to10 = s1 & s2
    Else
        Convert11to10 = s
    End If
        '<EhFooter>
        Exit Function

Dash_Err:
        MsgBox Err.Description & vbCrLf & _
               "in excelphone.Phone.Dash " & _
               "at line " & Erl, _
               vbExclamation + vbOKOnly, "Application Error"
        Resume Next
        '</EhFooter>
End Function
 
Em chắp vá và xào nấu Sub chuyển đổi số điện thoại theo mã mới đã chạy tốt trên mã di động, tuy nhiên động vào mã Cố định không theo quy tắc nào cả nên code chạy không đúng
Lý do làm việc này vì em có danh sách gần 1000 khách hàng cần theo dõi, tuy nhiên số điện thoại lung tung hết và không được cập nhật nhiều khi không nhớ mã cũ đổi sang mã mới là gì lại phải Google tra ạ
Theo tôi nhớ không lầm thì số điện thoại cố định đã chuyển đổi qua mấy đợt, do đó nên có bảng tra cách đổi theo từng đợt rồi đối chiếu theo đó mà chuyển đổi. Dùng cái bảng tra sẽ dễ chỉnh sửa, chi chạy thì tải vào mảng thay vì code trực tiếp từng mã trong VBA.
Ý tưởng là vậy chứ không biết code :) .
Làm biếng thì kiếm app của mấy nhà mạng về chuyển đổi, khỏi mất công code kiết.. :)
 
Upvote 0
Web KT

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

Back
Top Bottom