Xin hỏi Vô hiệu hóa code khi không muốn sử dụng

Liên hệ QC

dangky47h

Thành viên thường trực
Tham gia
4/9/17
Bài viết
329
Được thích
41
Giới tính
Nam
Chào các bạn!
Mình có một đoạn code khi sử dụng sẽ đọc số tiền thành chữ:
Cụ thể là ô C3: 100.000.000 khi ở ô D3 sử dụng code =VND(C3) sẽ đọc là: (Một trăm triệu đồng ./. )
Các bạn cho mình hỏi Sub để sử dụng đọc tiền trong code nói trên là sub nào trong đoạn code mình gửi.
Nhờ các bạn vô hiệu hóa giúp mình đoạn code đọc tiền đó, khi muốn sử dụng lại nó thì làm thế nào cho nhanh nhất.
Mình không biết gì về VBA nên có xóa hẳn đoạn code đó đi nhưng khi ấn hàm =vnd(c3) nó vẫn hiện lên hàm đó nhưng báo lỗi #NAME?
Mã:
Option Explicit
Public Enum Font_Codes
    Font_VNI = 0
    Font_ABC = 1
    Font_Unicode = 2
End Enum

Function GetColLetter(nColnum As Long) As String

    On Error GoTo 0

    GetColLetter = ActiveWorkbook.Sheets(1).Cells(1, nColnum).Address
    GetColLetter = Mid(GetColLetter, 2, InStr(2, GetColLetter, "$", vbTextCompare) - 2)
   
End Function

Function SheetIndex(sCodeName As String) As Integer

    Dim sh As Worksheet
   
    For Each sh In ActiveWorkbook.Sheets
   
        If UCase(sh.CodeName) = UCase(sCodeName) Then
            SheetIndex = sh.Index
            Exit For
        End If
   
    Next

End Function
Function SheetName(sCodeName As String) As String

    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Sheets
   
        If UCase(sh.CodeName) = UCase(sCodeName) Then
            SheetName = sh.Name
            Exit For
        End If
    Next

End Function
Function canduoi(LookValue As Range, LookRange As Range) As Long

    Dim I As Long, j As Long
   
    canduoi = LookValue.Value
   
    For I = 1 To LookRange.Count - 1
   
        If LookValue.Value >= LookRange.Cells(I).Value And LookValue <= LookRange.Cells(I + 1).Value Then
            canduoi = LookRange.Cells(I).Value
            Exit For
        End If
 
    Next

End Function

'Public Function Noisuy(LookValue As Range, LookRange As Range, Offset As Long) As Double
'
'    Dim i As Long, TongCot As Long
'    Dim canduoi As Long, cantren As Long
'    Dim ct As Double, Na As Double, Nb As Double, Ca As Double, Cb As Double
'
'    canduoi = 1
'    cantren = LookRange.Columns.Count
'
'    TongCot = cantren - 1
'
'    If TongCot > 1 Then
'
'        For i = 1 To TongCot - 1
'
'            If LookValue.Value >= LookRange.Cells(1, i).Value And LookValue <= LookRange.Cells(1, i + 1).Value Then
'                canduoi = i
'                cantren = i + 1
'                Exit For
'            End If
'
'        Next
'
'        If LookValue.Value < LookRange.Cells(1, 1).Value Then
'            Noisuy = LookRange.Cells(Offset + 1, 1).Value
'        ElseIf LookValue.Value > LookRange.Cells(1, cantren).Value Then
'            Noisuy = LookRange.Cells(Offset + 1, cantren).Value
'        Else
'
'            ct = LookValue.Value
'
'            Nb = LookRange.Cells(1 + Offset, cantren).Value
'            Cb = LookRange.Cells(1, cantren).Value
'
'            Na = LookRange.Cells(Offset + 1, canduoi).Value
'            Ca = LookRange.Cells(1, canduoi).Value
'
'            If Ca <> Cb Then 'Tranh chi cho 0
'                Noisuy = Round(Nb - ((Nb - Na) / (Ca - Cb)) * (ct - Cb), 5)
'            End If
'
'        End If
'
'    End If
'
'End Function

Function cantren(LookValue As Range, LookRange As Range) As Long

    Dim I As Long, j As Long
   
    cantren = LookValue.Value
   
    For I = 1 To LookRange.Count - 1
   
        If LookValue.Value >= LookRange.Cells(I).Value And LookValue <= LookRange.Cells(I + 1).Value Then
            cantren = LookRange.Cells(I + 1).Value
            Exit For
        End If
 
    Next

End Function
Sub KillForm()
    Unload FrmSplash
End Sub

Sub EnterKeyDown()
    On Error Resume Next
    Application.DisplayAlerts = False
    CommandBars("XLM Cell").Controls("PopHidden_EnterKeyDown").Execute
    Err.Clear
End Sub

Sub ShowReport()

    On Error GoTo loi
   
    Dim rpt As COMAddIn
   
    Set rpt = Application.COMAddIns("Delta80Report.Connect")
   
    If Not rpt.Connect Then rpt.Connect = True
   
    If rpt.Connect Then
   
    rpt.Object.ShowReport
   
    End If
   
    Set rpt = Nothing
   
    Exit Sub
   
loi:

    Err.Clear
   
End Sub


Public Function VND(ByVal varVal As Variant, Optional ByVal Code As Font_Codes) As String
    On Error GoTo Pro_Err
    Static sDVs(0 To 15) As String
    Static sDVNs(0 To 9) As String
    Dim strErr As String
    Dim strEven As String
    Dim sTens As String
    Dim sHundred As String
    Dim strDong As String
    Dim strDolla As String
    Dim sVal As String
    Dim iVal As Integer
    Dim I As Integer
    Dim iCol As Integer
    Dim iChar As Integer
    Dim sTemp As String
    Dim iScan As Integer
    Dim strCurrency As String

    sDVs(0) = " kh«ng"
    sDVs(1) = " mét"
    sDVs(2) = " hai"
    sDVs(3) = " ba"
    sDVs(4) = " bèn"
    sDVs(5) = " n¨m"
    sDVs(6) = " s¸u"
    sDVs(7) = " b¶y"
    sDVs(8) = " t¸m"
    sDVs(9) = " chÝn"
    sDVs(10) = " mêi"
    sDVs(11) = " mèt"
    sDVs(12) = " lÎ"
    sDVs(13) = ""
    sDVs(14) = " t"
    sDVs(15) = " l¨m"

    sDVNs(0) = ""
    sDVNs(1) = " ngh×n,"
    sDVNs(2) = " triÖu,"
    sDVNs(3) = " tû,"
    sDVNs(4) = " ngh×n tû,"
    sDVNs(5) = " triÖu tû,"
    sDVNs(6) = " tû tû,"
    sDVNs(7) = " ngh×n tû tû,"
    sDVNs(8) = " triÖu tû tû,"
    sDVNs(9) = " tû tû tû,"

    strErr = " Lçi nhËp!"
    strEven = " ch½n"
    sHundred = " tr¨m"
    sTens = " m¬i"
    strDong = " ®ång"
    strDolla = " ®« la"

    varVal = Round(varVal, 0)

    For iScan = 1 To Len(varVal)
        If IsNumeric(Mid$(varVal, iScan, 1)) Then
            sVal = sVal & Mid$(varVal, iScan, 1)
        ElseIf Mid$(varVal, iScan, 1) = "$" Or UCase(Mid$(varVal, iScan, 3)) = "USA" Then
            strCurrency = strDolla
        ElseIf LCase(Mid$(varVal, iScan, Len("ñ"))) = "ñ" Or _
           LCase(Mid$(varVal, iScan, Len("d"))) = "d" Or _
           LCase(Mid$(varVal, iScan, Len("vnd"))) = "vnd" Or _
           LCase(Mid$(varVal, iScan, 1)) = ChrW$(&H111) Or _
           LCase(Mid$(varVal, iScan, Len("®"))) = "®" Then
            strCurrency = strDong
        End If
    Next iScan

    iVal = Len(sVal)

    If iVal > 0 And iVal <= 15 Then
        sTemp = strCurrency
        For I = iVal To 1 Step -1
            iChar = Val(Mid$(sVal, I, 1))
            iCol = iVal - (I - 1)
            Select Case (iCol Mod 3)
                Case 1
                    If iChar = 0 And iVal > 1 Then
                        If iVal = iCol + 1 Then
                            If Mid$(sVal, I - 1, 1) <> "0" Then
                                sTemp = sDVNs(iCol \ 3) & sTemp
                            End If
                        ElseIf iVal > iCol + 1 Then
                            If Val(Mid$(sVal, I - 2, 2)) > 0 Then
                                sTemp = sDVNs(iCol \ 3) & sTemp
                            End If
                        Else
                            sTemp = sTemp
                        End If
                    Else
                        If iChar = 1 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 1 Then
                                iChar = 11
                            End If
                        ElseIf iChar = 4 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 1 Then
                                iChar = 14
                            End If
                        ElseIf iChar = 5 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 0 Then
                                iChar = 15
                            End If
                        End If
                        sTemp = sDVs(iChar) & sDVNs(iCol \ 3) & sTemp
                    End If
                Case 2
                    If iChar > 1 Then
                        sTemp = sDVs(iChar) & sTens & sTemp
                    Else
                        If iChar = 1 Then
                            iChar = 10
                        ElseIf iChar = 0 And (Mid$(sVal, I + 1, 1) <> "0") Then
                            iChar = 12
                        Else
                            iChar = 13
                        End If
                        sTemp = sDVs(iChar) & sTemp
                    End If
                Case 0
                    If iChar = 0 And ((Mid$(sVal, I + 1, 1) = "0") And (Mid$(sVal, I + 2, 1) = "0")) Then
                        sTemp = sTemp
                    Else
                        sTemp = sDVs(iChar) & sHundred & sTemp
                    End If
            End Select
        Next I
    ElseIf iVal = 0 Then
        sTemp = ""
    End If
    sTemp = Trim(sTemp)
    If Right$(sTemp, 1) = "," Then
        sTemp = Mid$(sTemp, 1, Len(sTemp) - 1)
    End If
    VND = ab2Uni("(" & UCase$(Left$(sTemp, 1)) & Mid$(sTemp, 2) & " ®ång ./. )")

Pro_Next:

    Exit Function

Pro_Err:

    GoTo Pro_Next
End Function
Private Function ab2Uni(str$, Optional ToUni As Boolean = True) As String

    If ToUni Then
        Dim I&, arrUNI() As String, sUni$, ABC$, uni$
        ABC = "¸µ¶·¹¨¾»¼½Æ©ÊÇÈÉËÐÌÎÏѪÕÒÓÔÖÝ×ØÜÞãßáâä«èåæçé¬íêëìîóïñòôøõö÷ùýúûüþ®¸µ¶·¹¡¾»¼½Æ¢ÊÇÈÉËÐÌÎÏÑ£ÕÒÓÔÖÝ×ØÜÞãßáâä¤èåæçé¥íêëìîóïñòô¦øõö÷ùýúûüþ§"
        uni = "225,224,7843,227,7841,259,7855,7857,7859,7861,7863,226,7845,7847,7849,7851,7853,233,232,7867,7869,7865,234,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,244,7889,7891,7893,7895,7897,417,7899,7901,7903,7905,7907,250,249,7911,361,7909,432,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,273,225,224,7843,227,7841,258,7855,7857,7859,7861,7863,194,7845,7847,7849,7851,7853,233,232,7867,7869,7865,202,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,212,7889,7891,7893,7895,7897,416,7899,7901,7903,7905,7907,250,249,7911,361,7909,431,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,272"
        arrUNI = Split(uni, ",")
        For I = 1 To Len(str$)
            If InStr(ABC, Mid(str$, I, 1)) > 0 Then
                sUni = sUni & ChrW(arrUNI(InStr(ABC, Mid(str$, I, 1)) - 1))
            Else
                sUni = sUni & Mid(str$, I, 1)
            End If
        Next
        ab2Uni = sUni
    Else
        ab2Uni = str$
    End If

End Function
Sub DoiFont()
Dim str As String
Dim s As Worksheet
Set s = GiaM062010
Dim I As Long, j As Long
On Error Resume Next

For I = 1 To 1000
For j = 15 To 15
    str = s.Cells(I, j).Value
    If str <> "" Then
    s.Cells(I, j).Value = ab2Uni(str)
    End If
Next
Next

End Sub
 

File đính kèm

  • GPE_giup.xlsm
    48 KB · Đọc: 5
Chào các bạn!
Mình có một đoạn code khi sử dụng sẽ đọc số tiền thành chữ:
Cụ thể là ô C3: 100.000.000 khi ở ô D3 sử dụng code =VND(C3) sẽ đọc là: (Một trăm triệu đồng ./. )
Các bạn cho mình hỏi Sub để sử dụng đọc tiền trong code nói trên là sub nào trong đoạn code mình gửi.
Nhờ các bạn vô hiệu hóa giúp mình đoạn code đọc tiền đó, khi muốn sử dụng lại nó thì làm thế nào cho nhanh nhất.
Mình không biết gì về VBA nên có xóa hẳn đoạn code đó đi nhưng khi ấn hàm =vnd(c3) nó vẫn hiện lên hàm đó nhưng báo lỗi #NAME?
Mã:
Option Explicit
Public Enum Font_Codes
    Font_VNI = 0
    Font_ABC = 1
    Font_Unicode = 2
End Enum

Function GetColLetter(nColnum As Long) As String

    On Error GoTo 0

    GetColLetter = ActiveWorkbook.Sheets(1).Cells(1, nColnum).Address
    GetColLetter = Mid(GetColLetter, 2, InStr(2, GetColLetter, "$", vbTextCompare) - 2)
  
End Function

Function SheetIndex(sCodeName As String) As Integer

    Dim sh As Worksheet
  
    For Each sh In ActiveWorkbook.Sheets
  
        If UCase(sh.CodeName) = UCase(sCodeName) Then
            SheetIndex = sh.Index
            Exit For
        End If
  
    Next

End Function
Function SheetName(sCodeName As String) As String

    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Sheets
  
        If UCase(sh.CodeName) = UCase(sCodeName) Then
            SheetName = sh.Name
            Exit For
        End If
    Next

End Function
Function canduoi(LookValue As Range, LookRange As Range) As Long

    Dim I As Long, j As Long
  
    canduoi = LookValue.Value
  
    For I = 1 To LookRange.Count - 1
  
        If LookValue.Value >= LookRange.Cells(I).Value And LookValue <= LookRange.Cells(I + 1).Value Then
            canduoi = LookRange.Cells(I).Value
            Exit For
        End If

    Next

End Function

'Public Function Noisuy(LookValue As Range, LookRange As Range, Offset As Long) As Double
'
'    Dim i As Long, TongCot As Long
'    Dim canduoi As Long, cantren As Long
'    Dim ct As Double, Na As Double, Nb As Double, Ca As Double, Cb As Double
'
'    canduoi = 1
'    cantren = LookRange.Columns.Count
'
'    TongCot = cantren - 1
'
'    If TongCot > 1 Then
'
'        For i = 1 To TongCot - 1
'
'            If LookValue.Value >= LookRange.Cells(1, i).Value And LookValue <= LookRange.Cells(1, i + 1).Value Then
'                canduoi = i
'                cantren = i + 1
'                Exit For
'            End If
'
'        Next
'
'        If LookValue.Value < LookRange.Cells(1, 1).Value Then
'            Noisuy = LookRange.Cells(Offset + 1, 1).Value
'        ElseIf LookValue.Value > LookRange.Cells(1, cantren).Value Then
'            Noisuy = LookRange.Cells(Offset + 1, cantren).Value
'        Else
'
'            ct = LookValue.Value
'
'            Nb = LookRange.Cells(1 + Offset, cantren).Value
'            Cb = LookRange.Cells(1, cantren).Value
'
'            Na = LookRange.Cells(Offset + 1, canduoi).Value
'            Ca = LookRange.Cells(1, canduoi).Value
'
'            If Ca <> Cb Then 'Tranh chi cho 0
'                Noisuy = Round(Nb - ((Nb - Na) / (Ca - Cb)) * (ct - Cb), 5)
'            End If
'
'        End If
'
'    End If
'
'End Function

Function cantren(LookValue As Range, LookRange As Range) As Long

    Dim I As Long, j As Long
  
    cantren = LookValue.Value
  
    For I = 1 To LookRange.Count - 1
  
        If LookValue.Value >= LookRange.Cells(I).Value And LookValue <= LookRange.Cells(I + 1).Value Then
            cantren = LookRange.Cells(I + 1).Value
            Exit For
        End If

    Next

End Function
Sub KillForm()
    Unload FrmSplash
End Sub

Sub EnterKeyDown()
    On Error Resume Next
    Application.DisplayAlerts = False
    CommandBars("XLM Cell").Controls("PopHidden_EnterKeyDown").Execute
    Err.Clear
End Sub

Sub ShowReport()

    On Error GoTo loi
  
    Dim rpt As COMAddIn
  
    Set rpt = Application.COMAddIns("Delta80Report.Connect")
  
    If Not rpt.Connect Then rpt.Connect = True
  
    If rpt.Connect Then
  
    rpt.Object.ShowReport
  
    End If
  
    Set rpt = Nothing
  
    Exit Sub
  
loi:

    Err.Clear
  
End Sub


Public Function VND(ByVal varVal As Variant, Optional ByVal Code As Font_Codes) As String
    On Error GoTo Pro_Err
    Static sDVs(0 To 15) As String
    Static sDVNs(0 To 9) As String
    Dim strErr As String
    Dim strEven As String
    Dim sTens As String
    Dim sHundred As String
    Dim strDong As String
    Dim strDolla As String
    Dim sVal As String
    Dim iVal As Integer
    Dim I As Integer
    Dim iCol As Integer
    Dim iChar As Integer
    Dim sTemp As String
    Dim iScan As Integer
    Dim strCurrency As String

    sDVs(0) = " kh«ng"
    sDVs(1) = " mét"
    sDVs(2) = " hai"
    sDVs(3) = " ba"
    sDVs(4) = " bèn"
    sDVs(5) = " n¨m"
    sDVs(6) = " s¸u"
    sDVs(7) = " b¶y"
    sDVs(8) = " t¸m"
    sDVs(9) = " chÝn"
    sDVs(10) = " mêi"
    sDVs(11) = " mèt"
    sDVs(12) = " lÎ"
    sDVs(13) = ""
    sDVs(14) = " t"
    sDVs(15) = " l¨m"

    sDVNs(0) = ""
    sDVNs(1) = " ngh×n,"
    sDVNs(2) = " triÖu,"
    sDVNs(3) = " tû,"
    sDVNs(4) = " ngh×n tû,"
    sDVNs(5) = " triÖu tû,"
    sDVNs(6) = " tû tû,"
    sDVNs(7) = " ngh×n tû tû,"
    sDVNs(8) = " triÖu tû tû,"
    sDVNs(9) = " tû tû tû,"

    strErr = " Lçi nhËp!"
    strEven = " ch½n"
    sHundred = " tr¨m"
    sTens = " m¬i"
    strDong = " ®ång"
    strDolla = " ®« la"

    varVal = Round(varVal, 0)

    For iScan = 1 To Len(varVal)
        If IsNumeric(Mid$(varVal, iScan, 1)) Then
            sVal = sVal & Mid$(varVal, iScan, 1)
        ElseIf Mid$(varVal, iScan, 1) = "$" Or UCase(Mid$(varVal, iScan, 3)) = "USA" Then
            strCurrency = strDolla
        ElseIf LCase(Mid$(varVal, iScan, Len("ñ"))) = "ñ" Or _
           LCase(Mid$(varVal, iScan, Len("d"))) = "d" Or _
           LCase(Mid$(varVal, iScan, Len("vnd"))) = "vnd" Or _
           LCase(Mid$(varVal, iScan, 1)) = ChrW$(&H111) Or _
           LCase(Mid$(varVal, iScan, Len("®"))) = "®" Then
            strCurrency = strDong
        End If
    Next iScan

    iVal = Len(sVal)

    If iVal > 0 And iVal <= 15 Then
        sTemp = strCurrency
        For I = iVal To 1 Step -1
            iChar = Val(Mid$(sVal, I, 1))
            iCol = iVal - (I - 1)
            Select Case (iCol Mod 3)
                Case 1
                    If iChar = 0 And iVal > 1 Then
                        If iVal = iCol + 1 Then
                            If Mid$(sVal, I - 1, 1) <> "0" Then
                                sTemp = sDVNs(iCol \ 3) & sTemp
                            End If
                        ElseIf iVal > iCol + 1 Then
                            If Val(Mid$(sVal, I - 2, 2)) > 0 Then
                                sTemp = sDVNs(iCol \ 3) & sTemp
                            End If
                        Else
                            sTemp = sTemp
                        End If
                    Else
                        If iChar = 1 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 1 Then
                                iChar = 11
                            End If
                        ElseIf iChar = 4 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 1 Then
                                iChar = 14
                            End If
                        ElseIf iChar = 5 And iVal > iCol Then
                            If Val(Mid$(sVal, I - 1, 1)) > 0 Then
                                iChar = 15
                            End If
                        End If
                        sTemp = sDVs(iChar) & sDVNs(iCol \ 3) & sTemp
                    End If
                Case 2
                    If iChar > 1 Then
                        sTemp = sDVs(iChar) & sTens & sTemp
                    Else
                        If iChar = 1 Then
                            iChar = 10
                        ElseIf iChar = 0 And (Mid$(sVal, I + 1, 1) <> "0") Then
                            iChar = 12
                        Else
                            iChar = 13
                        End If
                        sTemp = sDVs(iChar) & sTemp
                    End If
                Case 0
                    If iChar = 0 And ((Mid$(sVal, I + 1, 1) = "0") And (Mid$(sVal, I + 2, 1) = "0")) Then
                        sTemp = sTemp
                    Else
                        sTemp = sDVs(iChar) & sHundred & sTemp
                    End If
            End Select
        Next I
    ElseIf iVal = 0 Then
        sTemp = ""
    End If
    sTemp = Trim(sTemp)
    If Right$(sTemp, 1) = "," Then
        sTemp = Mid$(sTemp, 1, Len(sTemp) - 1)
    End If
    VND = ab2Uni("(" & UCase$(Left$(sTemp, 1)) & Mid$(sTemp, 2) & " ®ång ./. )")

Pro_Next:

    Exit Function

Pro_Err:

    GoTo Pro_Next
End Function
Private Function ab2Uni(str$, Optional ToUni As Boolean = True) As String

    If ToUni Then
        Dim I&, arrUNI() As String, sUni$, ABC$, uni$
        ABC = "¸µ¶·¹¨¾»¼½Æ©ÊÇÈÉËÐÌÎÏѪÕÒÓÔÖÝ×ØÜÞãßáâä«èåæçé¬íêëìîóïñòôøõö÷ùýúûüþ®¸µ¶·¹¡¾»¼½Æ¢ÊÇÈÉËÐÌÎÏÑ£ÕÒÓÔÖÝ×ØÜÞãßáâä¤èåæçé¥íêëìîóïñòô¦øõö÷ùýúûüþ§"
        uni = "225,224,7843,227,7841,259,7855,7857,7859,7861,7863,226,7845,7847,7849,7851,7853,233,232,7867,7869,7865,234,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,244,7889,7891,7893,7895,7897,417,7899,7901,7903,7905,7907,250,249,7911,361,7909,432,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,273,225,224,7843,227,7841,258,7855,7857,7859,7861,7863,194,7845,7847,7849,7851,7853,233,232,7867,7869,7865,202,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,212,7889,7891,7893,7895,7897,416,7899,7901,7903,7905,7907,250,249,7911,361,7909,431,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,272"
        arrUNI = Split(uni, ",")
        For I = 1 To Len(str$)
            If InStr(ABC, Mid(str$, I, 1)) > 0 Then
                sUni = sUni & ChrW(arrUNI(InStr(ABC, Mid(str$, I, 1)) - 1))
            Else
                sUni = sUni & Mid(str$, I, 1)
            End If
        Next
        ab2Uni = sUni
    Else
        ab2Uni = str$
    End If

End Function
Sub DoiFont()
Dim str As String
Dim s As Worksheet
Set s = GiaM062010
Dim I As Long, j As Long
On Error Resume Next

For I = 1 To 1000
For j = 15 To 15
    str = s.Cells(I, j).Value
    If str <> "" Then
    s.Cells(I, j).Value = ab2Uni(str)
    End If
Next
Next

End Sub

Đây là 1 hàm tự tạo để đọc số thành chữ.
Bạn cứ đặt điều kiện như dùng hàm bình thường, ví dụ =IF(điều kiện,"",VND)

Hàm đó như sau:

1572684430990.png
 
Đây là 1 hàm tự tạo để đọc số thành chữ.
Bạn cứ đặt điều kiện như dùng hàm bình thường, ví dụ =IF(điều kiện,"",VND)

Hàm đó như sau:

View attachment 227628
Dạ! Cám ơn anh đã giúp em mở rộng thêm.
anh ơi cho em hỏi Sub để đọc tiền trong đoạn code nêu trên là sub nào vậy anh? (code bài 1 em có nêu và nội dung cần giúp ở bài 1)
Và muốn vô hiệu hóa sub đó thì làm thế nào ạ? và khi muốn sử dụng lại nó thì làm cách nào để nhanh nhất
Cám ơn anh!
Hàm mà em muốn vô hiệu hóa nó trong đoạn code:vo hieu.png
 
vô hiệu hóa Nhanh nhất là xóa tất cả là xong
(không hiểu có đúng khái niệm vô hiệu hóa đúng không?)
 
Nếu vô hiệu hóa có nghĩa là ở ô có công thức =VND(...) sẽ không hiện số bằng lời, tức ô có công thức sẽ trắng tinh. Có 2 cách
- biến toàn bộ các dòng giữa dòng Public Function VND(...) ... và dòng End Function thành chú thích (chỉ để lại 2 dòng Public Function VND(...) ... và dòng End Function). Khi muốn dùng lại thì bỏ chú thích
- trước dòng Exit Function (ở cuối cùng) thì thêm dòng VND = "". Khi muốn dùng lại thì biến dòng VND = "" thành chú thích.
 
Nếu vô hiệu hóa có nghĩa là ở ô có công thức =VND(...) sẽ không hiện số bằng lời, tức ô có công thức sẽ trắng tinh. Có 2 cách
- biến toàn bộ các dòng giữa dòng Public Function VND(...) ... và dòng End Function thành chú thích (chỉ để lại 2 dòng Public Function VND(...) ... và dòng End Function). Khi muốn dùng lại thì bỏ chú thích
- trước dòng Exit Function (ở cuối cùng) thì thêm dòng VND = "". Khi muốn dùng lại thì biến dòng VND = "" thành chú thích.
Cái này đâu tạo checkbox để tắt hay mở Function được hả anh?
 
Muốn tạo check box để tắt mở hàm thì bạn có thể khai báo 1 biến public kiểu boolean trong module, sub gắn với check box sẽ thay đổi biến này, trong function VND lệnh đầu tiên kiểm tra biến nếu là true thì chạy tiếp còn nếu là false thì gán giá trị hàm bằng gì đó tùy bạn.
 
Câu hỏi là để làm bổ sung mà!
Bạn kiệm lời lắm. Thôi thì cứ tự giả thiết và tự xử.

Giả sử ở Sheet1 có CheckBox từ ActiveX Controls.
1. Code trong Sheet1
Mã:
Private Sub CheckBox1_Click()
    Application.Calculate
End Sub
2. Trong hàm VND ở ngay sau dòng Public Function thì thêm
Mã:
Application.Volatile
If Sheet1.CheckBox1.Value Then Exit Function
Tất nhiên tùy theo yêu cầu mà code có thể khác nhau. Có thể dùng biến Public
Cái mấu chốt là chi tiết. Vd. bạn có 2 tập tin đều dùng VND, cả 2 đều có checkbox, đều có module với code của VND, cả 2 đều mở. Trong 1 tập tin checkbox được chọn, trong tập tin thứ 2 không được chọn. Tôi hiểu là khi đó các ô có công thức trong tập tin 1 sẽ không có số bằng chữ còn trong tập tin 2 có số bằng chữ.
Hỏi chung chung, nói bâng quơ thì chịu rồi.
Mà hướng thì như trên, tự động não và cần cù thôi.
 
Lần chỉnh sửa cuối:
Lúc đầu cũng làm như anh nhưng thiếu Sheet1 nên code không chạy
Đấy chỉ là ví dụ thôi. Code trong những sub/function không dính dáng gì tới tập tin cụ thể nào thì không nên truy cập tới sheet cụ thể mà nên kiểm tra biến toàn cục. Lúc đó Chechbox sẽ thiết lập biến toàn cục. Do khi mở tập tin biến luôn có giá trị FALSE nên phải thiết lập nó trong Workbook_Open sao cho đúng với trạng thái CheckBox lúc mở tập tin.
 
Thế nào là "không muốn sử dụng?"
Đây là một Function. Sử dụng thì nó ra kết quả. Nhưng khi không muốn sử dụng thì cứ để kết quả đó hay bắt nó phải xoá đi?
Function chỉ calculate lại nếu có sự thay đổi trong vùng nó tham chiếu.
Muốn nó thay đổi liên tục thì phải đặt nó là Volatile.
 
Nếu vô hiệu hóa có nghĩa là ở ô có công thức =VND(...) sẽ không hiện số bằng lời, tức ô có công thức sẽ trắng tinh. Có 2 cách
- biến toàn bộ các dòng giữa dòng Public Function VND(...) ... và dòng End Function thành chú thích (chỉ để lại 2 dòng Public Function VND(...) ... và dòng End Function). Khi muốn dùng lại thì bỏ chú thích
- trước dòng Exit Function (ở cuối cùng) thì thêm dòng VND = "". Khi muốn dùng lại thì biến dòng VND = "" thành chú thích.
Em cảm ơn thầy!
 
Web KT
Back
Top Bottom