KHOÁ CÁC Ô ĐÃ NHẬP DỮ LIỆU TRÊN EXCEL

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hungvu0106

Thành viên mới
Tham gia
13/9/23
Bài viết
35
Được thích
4
Xin chào các anh chị,
Hiện tại e muốn khoá các ô mà mình đã chọn thì có cách nào để khoá k cho người khác chỉnh sửa được không ạ.
Em muốn khi mình nhập vào ô mình muốn ,trong khoảng thời gian mình quy định sẽ tự động không cho điều chỉnh hay xoá được
VD: Khi e click vào ô tên thiết bị sau đó e nhập số lượng mình muốn vào. trong thời gian mình cài đặt nó sẽ tự động khoá lại.Nếu muốn điều chỉnh phải có mật khẩu mới thay đổi được.
Nhờ các anh, chị trong đây giúp em với
Em cảm ơn rất nhiều
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ.xlsm
    148.4 KB · Đọc: 14
Một cách cho bạn tham khảo

 
Mình thêm giúp bạn đoạn code khóa cell rồi đấy nhé. Xem coi đúng ý bạn không.
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ_FIX.xlsm
    151.1 KB · Đọc: 15
Mình thêm giúp bạn đoạn code khóa cell rồi đấy nhé. Xem coi đúng ý bạn không.
cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:

Mình thêm giúp bạn đoạn code khóa cell rồi đấy nhé. Xem coi đúng ý bạn không.
cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:

Mình thêm giúp bạn đoạn code khóa cell rồi đấy nhé. Xem coi đúng ý bạn không.
cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:

Mình thêm giúp bạn đoạn code khóa cell rồi đấy nhé. Xem coi đúng ý bạn không.
cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
 
cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:


cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:


cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bài đã được tự động gộp:


cảm ơn bạn. Nhưng mình muốn khoá những ô có dữ liệu rồi còn những ô chưa có dữ liệu thì vẫn có thể nhập tiếp được ấy bạn
Bạn thử lại Fiel nhé : Theo yêu cầu của bạn là khi Cell nào có dữ liệu thì khóa, không thì vẫn để nhập được
Trong File mình chưa truyền dữ liệu cho pass nên có thể Unprotec được - Tuy bạn chọn dữ liệu truyền pass cho phù hợp với cách nhớ và quản lý của bạn
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ_FIX.xlsm
    156.7 KB · Đọc: 13
Bạn thử lại Fiel nhé : Theo yêu cầu của bạn là khi Cell nào có dữ liệu thì khóa, không thì vẫn để nhập được
Trong File mình chưa truyền dữ liệu cho pass nên có thể Unprotec được - Tuy bạn chọn dữ liệu truyền pass cho phù hợp với cách nhớ và quản lý của bạn
rất cảm ơn bạn. Nhưng nó vẫn báo lỗi giống như của bạn ở trên. Cái này theo mình đoán nó bị xung đột giữa 2 hàm VBA nên nó báo v. Theo như mình dịch gg. Nhờ bạn có cách giải quyết nào tốt không.
Cho mình hỏi thêm 1 ý nữa:
ells.SpecialCells(xlCellTypeConstants, 25).Locked = True
Cells.SpecialCells(xlCellTypeFormulas, 25).Locked = True
đoạn code này giá trị 25 nó có tác dụng như thế nào v bạn, Mình đang thắc mắc mà chưa có đáp án, Nhờ bạn giải đáp giúp mình.
 

File đính kèm

  • Capture.PNG
    Capture.PNG
    33.4 KB · Đọc: 3
Lần chỉnh sửa cuối:
Sao code của anh @le_vis có ẩn công thức, mà em thấy công thức không ẩn anh @le_vis
Mã:
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
Bài đã được tự động gộp:
 
Sao code của anh @le_vis có ẩn công thức, mà em thấy công thức không ẩn anh @le_vis
Mã:
Sub ProtectSh()
  On Error Resume Next
  If Check = False Then
    With ActiveSheet
      .Unprotect ("gpe")
      .UsedRange.SpecialCells(2).Locked = True
      .UsedRange.SpecialCells(2).FormulaHidden = True
      .UsedRange.SpecialCells(3).Locked = True
      .UsedRange.SpecialCells(3).FormulaHidden = True
      .Protect ("gpe")
    End With
    Check = True
  End If
End Sub
Bài đã được tự động gộp:
2 và 3 (2+1) là loại cell constants. Gặp công thức thì nó loại ra đúng rồi.
Tác giả code khong biết sử dụng enum cho nên dùng số, đọc khó hiểu bỏ bố. Code viết chính chắn thì phải dùng xlCellTypeConstants thay vì 2. (Muốn ô chứa công thức thì dùng xlCellTypeFormulas)
 
rất cảm ơn bạn. Nhưng nó vẫn báo lỗi giống như của bạn ở trên. Cái này theo mình đoán nó bị xung đột giữa 2 hàm VBA nên nó báo v. Theo như mình dịch gg. Nhờ bạn có cách giải quyết nào tốt không.
Cho mình hỏi thêm 1 ý nữa:
ells.SpecialCells(xlCellTypeConstants, 25).Locked = True
Cells.SpecialCells(xlCellTypeFormulas, 25).Locked = True
đoạn code này giá trị 25 nó có tác dụng như thế nào v bạn, Mình đang thắc mắc mà chưa có đáp án, Nhờ bạn giải đáp giúp mình.
Bạn xem lại bên máy của bạn - Tôi đã tes bên máy của tôi Office 2007 đến Office 2010 vẫn chạy tốt mà
Bạn thử xóa code cũ đi xem sao
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ_FIX.xlsm
    160.6 KB · Đọc: 9
@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
 
Lần chỉnh sửa cuối:
Bạn xem lại bên máy của bạn - Tôi đã tes bên máy của tôi Office 2007 đến Office 2010 vẫn chạy tốt mà
Bạn thử xóa code cũ đi xem

Bạn xem lại bên máy của bạn - Tôi đã tes bên máy của tôi Office 2007 đến Office 2010 vẫn chạy tốt mà
Bạn thử xóa code cũ đi xem sao
mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơn1704676921738.png
Bài đã được tự động gộp:

@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
Mình cảm ơn bạn. Mình sẽ thử xem như nào.
 
@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
Mình cảm ơn bạn. Mình sẽ thử
@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
Mình mới dùng thử cách code này nhờ bạn xem giúp. Sau 5s nó tự động khoá cả ô có dữ liệu và ô chưa có dữ liệu có cách nào chỉ khoá ô có dữ liệu còn ô chưa có thì vẫn chọn bth được k ạ
 

File đính kèm

  • QL THIẾT BỊ- VẬT TƯ.xlsm
    154 KB · Đọc: 2
@hungvu0106 Trong tệp của bạn không có mã như tôi đã hướng dẫn
 
@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
Mình cảm ơn bạn. Mình sẽ thử
@hungvu0106 Bạn có thể sử dụng hàm LockCells dưới đây

Sử dụng:

Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
10 là số giây, là khoảng thời gian Delay để khóa ô

Gõ thêm "_" thành LockCells_ để bỏ thực thi.

Mã dưới đây đặt trong Module mới
JavaScript:
'                    _,
' ___   _   _  _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'

Option Explicit
Option Compare Text
Private Const projectUDFName = "LockCells"
Private Const projectUDFFileName = "LockCells"
Private Const projectUDFVersion = "1.0"

#If VBA7 = 0 Then
  Public Enum LongLong:[_]:End Enum
  Public Enum LongPtr:[_]:End Enum
#End If

#If -VBA7 And -Win64 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongLong, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As LongPtr
#ElseIf VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "USER32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If

Public Enum ValueLockSettings
  VDSLockRange = 1
End Enum

Public Type TypeArguments
  Action As Long
  direction As Long
  timer As Single
  ThisCell As Object
  Fx As String
  Target As Range
  address As String
  value As Variant
  SheetPW As String
End Type

Private Const n_ = vbNullString
Private Works() As TypeArguments

Function LockCells_(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells_ = ""
End Function
Function LockCells(ByVal cells As Range, Optional ByVal sheetPassword$, Optional ByVal DelaySeconds&)
  LockCells = ""
  Call LockValueCommand(VDSLockRange, cells, sheetPassword, DelaySeconds)
End Function

Private Function LockValueCommand(direction&, ParamArray arguments())
  On Error Resume Next
  Dim r As Object
  Set r = Application.ThisCell: If r Is Nothing Then Exit Function
  Dim k%, i%, j%, adr$, f$, w As TypeArguments, n As Boolean
  f = r.formula
  adr = r.address(0, 0,,1)
  k = UBound(Works): k = k + 1: ReDim Preserve Works(1 To k)
adr:
  With Works(k): .Action = 1: Set .ThisCell = r: .address = adr: .Fx = f
    .direction = direction: .timer = timer
    Select Case direction
    Case VDSLockRange:: Set .Target = arguments(0): .SheetPW = arguments(1)
    End Select
    Call LockValue_Timer(arguments(2) * 1000)
  End With
End Function

Private Sub LockValue_Timer(Optional ByVal timer&)
  If timer < 0 Then timer = 0
  Call SetTimer(Application.hwnd, 444110, timer, AddressOf LockValue_callback)
End Sub

Private Sub LockValue_callback(ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal idEvent As LongPtr, ByVal dwTime As LongPtr)
  On Error Resume Next
  Call KillTimer(hwnd, idEvent)
  LockValue_working
End Sub
 
Private Sub LockValue_working()
  On Error Resume Next
  Dim aa, UA%, i%, Sh As Object, w, lr&, rg, rg2 As Object
  Dim a As Object, b As TypeArguments, su As Boolean, ac As Boolean, ee As Boolean
  UA = UBound(Works)
  If UA = 0 Then Exit Sub

  For i = 1 To UA
    b = Works(i)
    With Works(i)
      Select Case .Action
      Case 1
        .Action = 2
        'GoSub a
        Set Sh = .Target.Parent
        If Sh.ProtectContents Then
          Err.Clear: Sh.Unprotect password:=.SheetPW: If Err Then GoTo n
        End If
        .ThisCell.FormulaHidden = True
        .ThisCell.Locked = True
        Select Case .direction
        Case VDSLockRange:
          .Target.FormulaHidden = True
          .Target.Locked = True
          Err.Clear: Set rg2 = .Target.SpecialCells(xlCellTypeBlanks)
          If Not rg2 Is Nothing And Err = 0 Then rg2.Locked = False: rg2.FormulaHidden = False
        End Select
s:
        If Not Sh.ProtectContents Then Sh.Protect password:=.SheetPW
      End Select
    End With
n:
  Next
E:
  Erase Works
  If Not a Is Nothing Then
    If su And a.ScreenUpdating <> su Then a.ScreenUpdating = su
    If ac And a.Calculation <> xlCalculationAutomatic Then a.Calculation = xlCalculationAutomatic
    If ee And a.EnableEvents <> ee Then a.EnableEvents = ee
  End If
Exit Sub
a:
  If a Is Nothing Then
    Set a = Application
    su = a.ScreenUpdating: If su Then a.ScreenUpdating = False
    ee = a.EnableEvents: If ee Then a.EnableEvents = False
    ac = a.Calculation = xlCalculationAutomatic: If ac Then a.Calculation = xlCalculationManual
  End If
Return
End Sub


Mã dưới đây đặt trong mã ThisWorkbook

JavaScript:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  If Sh.ProtectContents Then
    On Error Resume Next
    If Target.Locked Then
      Cancel = True
      Application.Dialogs(xlDialogProtectDocument).Show
    End If
  End If
End Sub
Mình mới dùng thử cách code này nhờ bạn xem giúp. Sau 5s nó tự động khoá cả ô có dữ liệu và ô chưa có dữ liệu có cách nào chỉ khoá ô có dữ liệu còn ô chưa có thì vẫn chọn bth được k ạ
@hungvu0106 Trong tệp của bạn không có mã như tôi đã hướng dẫn
Với vùng ô A1:A100 sau khi nhập sau 10 giây sẽ khóa ô đã nhập
Gõ hàm =LockCells(A1:A100, "Mật Khẩu Trang tính", 10)
2 cái này mình không rõ là sẽ điều chỉnh ở dòng nào trên mã code. ví dụ mình không muốn ô a1:a100 mà đổi thành ô khác thì có sao k..
 
Mã là cố định, bạn không cần sửa một dòng mã nào cả
Chỉ cần chép mã xong là bạn gõ hàm là được rồi
 
mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơnView attachment 298176
Bài đã được tự động gộp:


Mình cảm ơn bạn. Mình sẽ thử xem như nào.
Bạn lấy File bài #11 về chạy xem sao nào ???
Bài đã được tự động gộp:

mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơnView attachment 298176
Bài đã được tự động gộp:


Mình cảm ơn bạn. Mình sẽ thử xem như nào.
Bạn lấy File bài #11 về chạy xem sao nào ???
 
Anh @le_vis nếu cho ẩn luôn công thức thì chỉnh code sao ạ.
 
mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơnView attachment 298176
Bài đã được tự động gộp:


Mình cảm ơn bạn. Mình sẽ thử xem như nào.
Bạn lấy File bài #11 về chạy xem sao nào ???
Anh @le_vis nếu cho ẩn luôn công thức thì chỉnh code sao ạ.
Bạn xem đánh dấu tích vào như ảnh dưới nhé
Bài đã được tự động gộp:

mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơnView attachment 298176
Bài đã được tự động gộp:


Mình cảm ơn bạn. Mình sẽ thử xem như nào.
Bạn lấy File bài #11 về chạy xem sao nào ???
Anh @le_vis nếu cho ẩn luôn công thức thì chỉnh code sao ạ.
Bạn xem đánh dấu tích vào như ảnh dưới nhé
Bài đã được tự động gộp:

mình sử dụng excel2016. Mình đã thử nhiều mà vẫn k hiểu sao nó bị lỗi gì, code nó báo lỗi chạy k được bạn ạ :((. Mình dò mãi mà chưa tìm được nguyên nhân. Nhờ bạn xem giúp mình với. đây là đoạn code bạn ktra dùm mình xem nó bị gì.Mình cảm ơnView attachment 298176
Bài đã được tự động gộp:


Mình cảm ơn bạn. Mình sẽ thử xem như nào.
Bạn lấy File bài #11 về chạy xem sao nào ???
Anh @le_vis nếu cho ẩn luôn công thức thì chỉnh code sao ạ.
Bạn xem đánh dấu tích vào như ảnh dưới nhé
 

File đính kèm

  • __XMXMX.png
    __XMXMX.png
    9.1 KB · Đọc: 3
Web KT
Back
Top Bottom