xin giúp đỡ sửa lỗi chạy code vba (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

DanVanPhoto

Thành viên chính thức
Tham gia
29/11/22
Bài viết
51
Được thích
-4
xin chào cả nhà ạ. Chuyện là em có một đoạn mã macro tự động chạy khi giá trị trong ô có thay đổi( ô ở đây là ô có chứa hàm sẽ tự thay đổi không có thao tác click hay chỉnh sửa, cũng có thể là ô được tham chiếu từ ô khác) khi ô có thay đổi thì macro "LAM_MOI" sẽ được kích hoạt ( macro "LAM_MOI" này có nhiệm vụ là copy công thức từ vùng "AR4:BV19" và paste vào ô G10). nhưng khi ô "O4" chứa công thức có thay đổi thì macro "LAM_MOI" có chạy nhưng không dừng lại và báo lỗi.em cảm ơn.
Public pubValue Private Sub Workbook_Activate() pubValue = Sheet1.Range("O4").Value End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If pubValue <> Sheet1.Range("O4").Value Then LAM_MOI pubValue = Sheet1.Range("O4").Value End If End Sub

Sub LAM_MOI() 'DEVELOPMENTAL_301 Set AT = ActiveSheet Range("AR4").Select Range("AR4:BV19").Select Selection.Copy Range("G10").Select AT.Paste Range("E5").Select Application.CutCopyMode = False End Sub
 
xin chào cả nhà ạ. Chuyện là em có một đoạn mã macro tự động chạy khi giá trị trong ô có thay đổi( ô ở đây là ô có chứa hàm sẽ tự thay đổi không có thao tác click hay chỉnh sửa, cũng có thể là ô được tham chiếu từ ô khác) khi ô có thay đổi thì macro "LAM_MOI" sẽ được kích hoạt ( macro "LAM_MOI" này có nhiệm vụ là copy công thức từ vùng "AR4:BV19" và paste vào ô G10). nhưng khi ô "O4" chứa công thức có thay đổi thì macro "LAM_MOI" có chạy nhưng không dừng lại và báo lỗi.em cảm ơn.
Public pubValue Private Sub Workbook_Activate() pubValue = Sheet1.Range("O4").Value End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If pubValue <> Sheet1.Range("O4").Value Then LAM_MOI pubValue = Sheet1.Range("O4").Value End If End Sub

Sub LAM_MOI() 'DEVELOPMENTAL_301 Set AT = ActiveSheet Range("AR4").Select Range("AR4:BV19").Select Selection.Copy Range("G10").Select AT.Paste Range("E5").Select Application.CutCopyMode = False End Sub
Không đính kèm tập tin thì chắc đợi lâu đây.
 
Thôi thì làm lấy 1 cái nút. Lúc nào cần cập nhật thì bấm vô cái nút đó cũng được mà. nó không tốn bao nhiêu thời gian đâu
 
Thôi thì làm lấy 1 cái nút. Lúc nào cần cập nhật thì bấm vô cái nút đó cũng được mà. nó không tốn bao nhiêu thời gian đâu
hi tại em lười lắm. mà lại thích cái file nó thông minh chút. mà em mò tới đây rồi, chạy được nhưng nó không dừng lại được, nó cứ lặp lại vô tận tới đơ luôn máy
 
Trong tập tin có sub nào liên quan đến ô "O4" đâu bạn.

Vậy thì không ổn rồi, mình lại không có thói quen giúp những người có tính lười.
dạ trong file là ô"I5" ạ. code em gán trong bài viết là khi em để chạy thử thôi ạ( khi chạy thử thì em để tham chiếu tới ô khác ạ).
mong bác giúp em với ạ. em mới tìm tòi về excel và vba nên em tò mò lắm ạ. em rất muốn những gì có thể làm cho file hoạt động một cách thông minh nhất có thể ạ. em cảm ơn.
 
dạ trong file là ô"I5" ạ. code em gán trong bài viết là khi em để chạy thử thôi ạ( khi chạy thử thì em để tham chiếu tới ô khác ạ).
mong bác giúp em với ạ. em mới tìm tòi về excel và vba nên em tò mò lắm ạ. em rất muốn những gì có thể làm cho file hoạt động một cách thông minh nhất có thể ạ. em cảm ơn.
Cứ diễn giải một đường, đưa tập tin một nẻo thế này thì biết đường nào mà lần.
 
1/ Chịu khó viết hoa đầu dòng.
2/ Kiểm tra từng bước (bằng cách ấn phím F8) xem Sub "LAM_MOI" chạy như thế nào, lỗi do đâu.
Bạn thử đi rồi tính tiếp.
em thử cả đêm qua rồi ạ. bí quá nên em lên cầu cứu các bác đó ạ. em cũng thử cho thêm exit sub vào để thoát khỏi sub mà không được ạ. em chạy thử nếu để msgBox thì không bị lặp. nhưng cho chạy macro LAM_MOI thì nó lại bị.
 

File đính kèm

Private Sub Worksheet_Calculate() Dim Xrg As Range Set Xrg = Range("I5") If Not Intersect(Xrg, Range("I5")) Is Nothing Then LAM_MOI End If End Sub
Em có thử dùng code này các bác xem giúp em với. em thấy nó chạy nhưng lại là cứ sheet1 có thay đổi là nó chạy mãi không dừng dù là mình lưu file nó cũng chạy. Em cảm ơn.
Bài đã được tự động gộp:

Mình chỉ sửa lại sub "LAM_MOI", bạn chạy thử xem thế nào.
Bài đã được tự động gộp:


Ý bạn là ở trường hợp bài này phải không?
Vâng em cảm ơn bác. để em thử .
 
Mình chỉ sửa lại sub "LAM_MOI", bạn chạy thử xem thế nào.
Bài đã được tự động gộp:


Ý bạn là ở trường hợp bài này phải không?
Dạ bác ơi. Ngại quá bác cho em xin đoạn code trong file được không ạ. máy em tải file về mà máy nó chặn không cho chạy macro từ file bên ngoài. em mở ra thì không còn gì ạ
 
Dạ bác ơi. Ngại quá bác cho em xin đoạn code trong file được không ạ. máy em tải file về mà máy nó chặn không cho chạy macro từ file bên ngoài. em mở ra thì không còn gì ạ
Sub LAM_MOI()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Cham_Cong_32B")
Application.ScreenUpdating = False
With sh
.Range("AR4:BV19").Copy .Range("G10")
.Range("E5").Select
End With
Application.ScreenUpdating = True
End Sub
Bạn nhớ sửa tên sheet đúng theo tên trong code
 
Sub LAM_MOI()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Cham_Cong_32B")
Application.ScreenUpdating = False
With sh
.Range("AR4:BV19").Copy .Range("G10")
.Range("E5").Select
End With
Application.ScreenUpdating = True
End Sub

Bạn nhớ sửa tên sheet đúng theo tên trong code
1671857137436.png
Code báo lỗi bác ơi. em để Sheet code không biết có được không. vì sheet "Chấm công 32B" sheet code là sheet1
 
Em dán đúng nơi rồi nhưng khi chạy thì không được ạ. Khi chạy F8 nó không báo lỗi nhưng cũng không thực thi lệnh copy và dán mới. còn khi "I5" có giá trị thay đổi thì code cũng không hoạt động ạ.
Tên sheet của bạn có giống hình trên kia không. hay nó vẫn là tiếng việt thế
 
Ở máy tính mình chạy bình thường.
Vâng em cảm ơn bác. để em tìm cách mở fire wall để chạy được macro xem sao
Bài đã được tự động gộp:

Em cảm ơn các bác đã nhiệt tình giúp đỡ em ạ
Bài đã được tự động gộp:

Em tắt tường lửa nên đã mở được file nhưng cũng không chạy được ạ.:(
khi em nhập thủ công vào ô "I5" thì code mới hoạt động
 
Lần chỉnh sửa cuối:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("I5")) Is Nothing Then
LAM_MOI
End If
End Sub
Mình test code này trên file đầu tiên up lên. Chạy bình xường.
khi em nhập thủ công vào ô "I5" thì code mới hoạt động
Thì phải thay đổi I5 thì mới chạy mà. Phải có Change chứ.
 
Mình test code này trên file đầu tiên up lên. Chạy bình xường.

Thì phải thay đổi I5 thì mới chạy mà. Phải có Change chứ.
Em lại muốn không cần nhập dữ liệu vào ô "I5" cơ bác. Nếu nhập dữ liệu trực tiếp vào "I5" thì không có gì để nói. Trong file ô "i5" em để công thức báo số tháng khi tháng thay đổi thì sẽ tự động chạy macro ấy ạ. Nếu làm được code này thì ứng dụng vào nhiều cái hay hơn. Em cũng có thử mấy code có code thì chạy được nhưng không tự dừng.
Bài đã được tự động gộp:

Vẫn chưa rõ lắm bạn ấy vận hành thế nào, cứ diễn giải một đường, khi đưa file lên lại một nẻo.
Trong file ô "I5" của em là tháng tự thay đổi. Em muốn khi tháng thay đổi thì sẽ chạy code làm mới ấy ạ
 
Em lại muốn không cần nhập dữ liệu vào ô "I5" cơ bác. Nếu nhập dữ liệu trực tiếp vào "I5" thì không có gì để nói. Trong file ô "i5" em để công thức báo số tháng khi tháng thay đổi thì sẽ tự động chạy macro ấy ạ. Nếu làm được code này thì ứng dụng vào nhiều cái hay hơn. Em cũng có thử mấy code có code thì chạy được nhưng không tự dừng.
Bài đã được tự động gộp:


Trong file ô "I5" của em là tháng tự thay đổi. Em muốn khi tháng thay đổi thì sẽ chạy code làm mới ấy ạ
Mã:
Private Sub Worksheet_Calculate()
Set cels = ActiveCell
Application.EnableEvents = False
LAM_MOI
Application.EnableEvents = True
cels.Select
End Sub
Khỏi xóa luôn, auto dán.
 
Trong vòng 4 tiếng đồng hồ, gần 50 bài trao qua lại vẫn chưa thấy tới đâu.
Thớt này có kỹ năng diễn tả vấn đề siêu thật.
 
Có ba chuyện đọc code là thấy ngay:
1. Code này không lặp vô tận mới là chuyện lạ: Lúc nào mà chẳng True?
Mã:
Set Xrg = Range("I5")  
If Not Intersect(Xrg, Range("I5")) Is Nothing Then
2. Sự kiện Change của sheet chạy dựa trên sự thay đổi của target, nhưng không chạy khi giá trị target bị thay đổi bởi công thức. Chỉ chạy khi sửa trực tiếp vào target.
3. Sự kiện Calculate không có tham số target, bất cứ khi nào sheet được tính toán lại đều chạy. Hễ có thay đổi ở bất cứ ô nào, range nào, hễ có ít nhất 1 công thức trên sheet là code chạy. Ngoài ra khi mở file cũng chạy, khi lưu cũng chạy và khi đóng cũng chạy.
Nếu 3 việc này không biết thì có file cũng như không.
 
Có ba chuyện đọc code là thấy ngay:
1. Code này không lặp vô tận mới là chuyện lạ: Lúc nào mà chẳng True?
Mã:
Set Xrg = Range("I5") 
If Not Intersect(Xrg, Range("I5")) Is Nothing Then
2. Sự kiện Change của sheet chạy dựa trên sự thay đổi của target, nhưng không chạy khi giá trị target bị thay đổi bởi công thức. Chỉ chạy khi sửa trực tiếp vào target.
3. Sự kiện Calculate không có tham số target, bất cứ khi nào sheet được tính toán lại đều chạy. Hễ có thay đổi ở bất cứ ô nào, range nào, hễ có ít nhất 1 công thức trên sheet là code chạy. Ngoài ra khi mở file cũng chạy, khi lưu cũng chạy và khi đóng cũng chạy.
Nếu 3 việc này không biết thì có file cũng như không.
Có cách nào khắc phục được vấn đề không ạ. em không rõ về vba excel ạ
 
Có cách nào khắc phục được vấn đề không ạ. em không rõ về vba excel ạ
Tôi giải thích đúng chỗ "không rõ" rồi.
Tại sao lặp vô tận: đừng dùng câu lệnh đó nữa
Tại sao chạy hoài: Đừng dùng calculate nữa
Tại sao phải sửa tay mới chạy, thay đổi bằng công thức mới chạy: Thì đừng dùng ô chứa công thức làm target nữa
 
Tôi giải thích đúng chỗ "không rõ" rồi.
Tại sao lặp vô tận: đừng dùng câu lệnh đó nữa
Tại sao chạy hoài: Đừng dùng calculate nữa
Tại sao phải sửa tay mới chạy, thay đổi bằng công thức mới chạy: Thì đừng dùng ô chứa công thức làm target nữa
Vâng , em cảm ơn. em sẽ tìm hiểu hơn về code vba
 
Tại sao phải sửa tay mới chạy, thay đổi bằng công thức mới chạy: Thì đừng dùng ô chứa công thức làm target nữa
Cháu cũng từng góp ý với thớt thay cách khác. Thới nói thớt lười. Đó là lý do có vẻ sao sao ấy. Có lẽ để thớt từ tìm cách có khi hay hơn là cứ cố làm những thứ mà không kiểm soát được chính nó. Còn nếu đã không biết nhiều mà lại muốn dùng cách không thể kiểm soát được thì có vẻ hơi mạo hiểm
 
Mã:
Private Sub Worksheet_Calculate()
Set cels = ActiveCell
Application.EnableEvents = False
LAM_MOI
Application.EnableEvents = True
cels.Select
End Sub
Khỏi xóa luôn, auto dán.
Code này test kỹ chưa? Nhúc nhích 1 cái là chạy "LAM_MOI" copy dán. Chưa nói đến việc code đã chạy qua sheet khác copy dán ở sheet đó rồi, cels.Select không bị mắng mới là lạ.
 
Code này test kỹ chưa? Nhúc nhích 1 cái là chạy "LAM_MOI" copy dán. Chưa nói đến việc code đã chạy qua sheet khác copy dán ở sheet đó rồi, cels.Select không bị mắng mới là lạ.
Cứ 1 lệnh là chạy bác ạ, nên em mới Select cels, không thì nó chọn hết range paste, nhưng được cái là chạy liên tục, không phải lăn tăn change hay không. Chớp chớp tí nhưng chắc không sao.

Tác giả cần thì chắc biết sửa chỗ này bác ạ, em đào mộ tí ra ngay. Mấy cái auto này với em cứ loạn hết cả lên. Món này cũng ít bài thảo luận bác ạ.

Lúc đầu em còn set target = sheet1. Range("i5") thế mới máu, mà chưa thấy ai làm kiểu đấy. :wallbash: :wallbash: :wallbash:
 
Cứ 1 lệnh là chạy bác ạ, nên em mới Select cels, không thì nó chọn hết range paste, nhưng được cái là chạy liên tục, không phải lăn tăn change hay không. Chớp chớp tí nhưng chắc không sao.

Tác giả cần thì chắc biết sửa chỗ này bác ạ, em đào mộ tí ra ngay. Mấy cái auto này với em cứ loạn hết cả lên. Món này cũng ít bài thảo luận bác ạ.

Lúc đầu em còn set target = sheet1. Range("i5") thế mới máu, mà chưa thấy ai làm kiểu đấy. :wallbash: :wallbash: :wallbash:
Code vẫn chưa đúng với mục đích của em. ý định của em là chỉ khi ô "i5" công thức thay đổi sẽ làm mới. nhưng code này thì bất cứ em chỉnh sửa ô nào trên trang tính thì cũng làm mới mất rồi
 
Cứ 1 lệnh là chạy bác ạ, nên em mới Select cels, không thì nó chọn hết range paste, nhưng được cái là chạy liên tục, không phải lăn tăn change hay không. Chớp chớp tí nhưng chắc không sao.

Tác giả cần thì chắc biết sửa chỗ này bác ạ, em đào mộ tí ra ngay. Mấy cái auto này với em cứ loạn hết cả lên. Món này cũng ít bài thảo luận bác ạ.

Lúc đầu em còn set target = sheet1. Range("i5") thế mới máu, mà chưa thấy ai làm kiểu đấy. :wallbash: :wallbash: :wallbash:
Em làm được rồi ạ. em thêm vòng lặp mệnh đề điều kiện vào macro"LAM_MOI" trong macro này em thêm một bước copy ô "I5" và paste vào một ô khác để có dữ liệu tham chiếu. bây giờ bất cứ khi nào trong sheet 1 thay đổi thì code đều chạy. nếu giá trị ô "I5" khác với ô tham chiếu thì sẽ chạy macro "LAM_MOI" còn không thì else> Exit sub. em rất cảm ơn các bác đã giúp em hoàn thành bài toán khó này của em ạ. cảm ơn rất nhiều.:1a::1a::1a:
 
Em làm được rồi ạ. em thêm vòng lặp mệnh đề điều kiện vào macro"LAM_MOI" trong macro này em thêm một bước copy ô "I5" và paste vào một ô khác để có dữ liệu tham chiếu. bây giờ bất cứ khi nào trong sheet 1 thay đổi thì code đều chạy. nếu giá trị ô "I5" khác với ô tham chiếu thì sẽ chạy macro "LAM_MOI" còn không thì else> Exit sub. em rất cảm ơn các bác đã giúp em hoàn thành bài toán khó này của em ạ. cảm ơn rất nhiều.:1a::1a::1a:
Điều này mình cũng định làm rồi, nhưng bạn cứ khăng khăng là chỉ khi nào hết tháng, sang tháng sau code mới được chạy nên mình không ý kiến gì nữa.
 
Điều này mình cũng định làm rồi, nhưng bạn cứ khăng khăng là chỉ khi nào hết tháng, sang tháng sau code mới được chạy nên mình không ý kiến gì nữa.
Đó cũng là 1 cách. Nhưng đơn giản nhất là thay vì target là ô chứa công thức, đổi target là ô chứa tham chiếu của công thức. Đánh từ gốc, không đánh ngọn.
 
Đó cũng là 1 cách. Nhưng đơn giản nhất là thay vì target là ô chứa công thức, đổi target là ô chứa tham chiếu của công thức. Đánh từ gốc, không đánh ngọn.
Thế này chắc là oánh từ gốc bác nhỉ?
Mã:
'Trong ThisWorkbook
Public pubValue

Private Sub Workbook_Activate()
    pubValue = Sheet1.Range("i5").Value
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Application.EnableEvents = False
    If pubValue <> Sheet1.Range("i5").Value Then
        LAM_MOI
        pubValue = Sheet1.Range("i5").Value
    End If
Application.EnableEvents = True
End Sub

'Trong Module1
Sub LAM_MOI()
    Range("AR4:BV19").Copy Range("G10")
    Application.CutCopyMode = False
End Sub
Chuyện là em có một đoạn mã macro tự động chạy khi giá trị trong ô có thay đổi
Nên sửa lại là "Chuyện là em có sưu tầm một đoạn mã ...".
Nếu gặp cao thủ thì họ biết code chuẩn, chứ thằng không biết code như mình nhìn cứ tưởng code tào lao (áy náy quá).

PS: Vẫn không được, mở thêm file excel khác là copy tè le luôn. Thôi ta đành bó tay, chúng tôi đã cố gắng hết sức.
 
Lần chỉnh sửa cuối:
Thế này chắc là oánh từ gốc bác nhỉ?
Mã:
'Trong ThisWorkbook
Public pubValue

Private Sub Workbook_Activate()
    pubValue = Sheet1.Range("i5").Value
End Sub

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Application.EnableEvents = False
    If pubValue <> Sheet1.Range("i5").Value Then
        LAM_MOI
        pubValue = Sheet1.Range("i5").Value
    End If
Application.EnableEvents = True
End Sub

'Trong Module1
Sub LAM_MOI()
    Range("AR4:BV19").Copy Range("G10")
    Application.CutCopyMode = False
End Sub

Nên sửa lại là "Chuyện là em có sưu tầm một đoạn mã ...".
Nếu gặp cao thủ thì họ biết code chuẩn, chứ thằng không biết code như mình nhìn cứ tưởng code tào lao (áy náy quá).
Không khai báo rõ ràng thì nó chép rồi dán tùm lum khắp nơi đó.
 
Thế này chắc là oánh từ gốc bác nhỉ?
Bạn hiểu thế nào là gốc? Thế nào là tham chiếu của công thức?
I5 = A1*B1
I5 muốn thay đổi thì làm gì mà không đụng đến I5?
PS: Vẫn không được, mở thêm file excel khác là copy tè le luôn. Thôi ta đành bó tay, chúng tôi đã cố gắng hết sức.
Đọc lại bài 52 và gợi ý bài 54 (tại sao chạy hoài). Bạn có cái tật rất lớn là không đọc, hoặc đọc không kỹ. Làm thì không test rồi ý với ủa. Kết quả là viết linh tinh (bị xóa rất nhiều)
 
Lần chỉnh sửa cuối:
Bạn có cái tật rất lớn là không đọc, hoặc đọc không kỹ. Làm thì không test rồi ý với ủa. Kết quả là viết linh tinh (bị xóa rất nhiều)
Em chỉ đồng ý câu cuối thôi.
Còn 2 câu đầu em ghép lại thế này: em có đọc, đọc kỹ, có test nhưng test không kỹ.
Với lại mấy cái auto này hình như không undo được, chắc em không biết thêm code undo hoặc sai ở chỗ nào.
Và như trên đã viết: em bó tay và thôi chịu!!! :wallbash: :wallbash: :wallbash:
 
Em chỉ đồng ý câu cuối thôi.
Còn 2 câu đầu em ghép lại thế này: em có đọc, đọc kỹ, có test nhưng test không kỹ.
Có đọc, đọc kỹ mà không hiểu thì gọi là gì thì biết rồi á.
Tham chiếu của công thức là gì mà không biết?
Bảo "Sự kiện Calculation không có tham số target" mà không hiểu?
Bảo "đừng dùng calculation" mà cũng vẫn không hiểu?
Đổi target cũng không biết luôn?
 
Có đọc, đọc kỹ mà không hiểu thì gọi là gì thì biết rồi á.
Thường thì sẽ gọi là ngu, dốt. Cái này thì trên diễn đàn em cũng tự nhận suốt ấy mà, tự nhận thì em thoải mái, nhưng người khác nói thì cũng tự ái lắm.
Cơ mà cứ nói bóng gió thì em lại thấy bình thường, cứ thầm hiểu là được.

Mấy cái tham số ở dưới thì em chịu, em mà biết thì chỉ cần trong vòng 30 phút là xong. Tìm hiểu thì cũng được, nhưng càng tìm hiểu càng rối nên em chọn bỏ cuộc.
 
Mình thì còn hì hụi thử, chạy chưa ổn lại sửa, sửa đi thử lại mãi nhưng không lường được hết các trường hợp, vẫn hay sai nhiều nên mới lâu là vậy.
Vậy mới gần bá đạo thôi, cố tí nữa là bá đạo.
Thêm nữa là trém gió vừa thôi, khiêm tốn là tốt, nhưng khiêm tốn kiểu phi lý quá thì nó lại phi lý kiểu rất phi lý.
 
Vậy mới gần bá đạo thôi, cố tí nữa là bá đạo.
Thêm nữa là trém gió vừa thôi, khiêm tốn là tốt, nhưng khiêm tốn kiểu phi lý quá thì nó lại phi lý kiểu rất phi lý.
Thực tế là nhiều bạn hỏi một đằng, khi làm xong rồi thì lại bảo đấy chỉ là ví dụ thôi, thực tế không như thế. Vậy là lại công cốc, nhiều khi chán hẳn.
 
Thực tế là nhiều bạn hỏi một đằng, khi làm xong rồi thì lại bảo đấy chỉ là ví dụ thôi, thực tế không như thế. Vậy là lại công cốc, nhiều khi chán hẳn.
Dễ mà, vậy thì xử lý đúng theo bài 1, bài 1 chưa rõ bắt phải edit lại hoặc đăng bài mới, hủy bài cũ.
Nhiều khi những chủ đề 10, 20 trang mà mãi dưới vẫn còn yêu cầu khác nên rất khó để tìm được kết quả đúng để tham khảo. Xem hết từng đấy trang rồi phải xem lại để tìm bài chốt cuối cùng, ối giời thời gian thật là mênh mông. Xem thì bực mà không xem thì không biết cuối cùng nó thế lào. :wallbash: :wallbash: :wallbash:
 
Đó cũng là 1 cách. Nhưng đơn giản nhất là thay vì target là ô chứa công thức, đổi target là ô chứa tham chiếu của công thức. Đánh từ gốc, không đánh ngọn.
Có cái em không hiểu cho lắm. đổi target là ô chứa tham chiếu của công thức tức là ta đặt công thức tại một ô bất kì và tham chiếu nó tới ô "I5" phải không ạ?
 
Có cái em không hiểu cho lắm. đổi target là ô chứa tham chiếu của công thức tức là ta đặt công thức tại một ô bất kì và tham chiếu nó tới ô "I5" phải không ạ?
Nếu code Worksheet_Change có target là I5 thì sẽ không chạy vì I5 chứa công thức phải không?
Nếu I5 là công thức tham chiếu đến B3, C4 chẳng hạn như I5 = B3 + C4, thì khi thay đổi 1 trong 2 ô B3 và C4, I5 cũng thay đổi nhưng code không chạy.
Vậy tại sao không lấy 1 trong 2 ô (hoặc cả 2 ô) B3, C4 làm target?
------
Thay vì
If Not Intersect(Target, Range("I5") Is Nothing Then

Thì thay nguồn (gốc) của I5 vào câu lệnh đó?
Đơn giản lắm luôn mà.
--------
Không hiểu mà hỏi thì tôi sẵn sàng trả lời, còn nếu ai buông xuôi thì ráng chịu mang tiêng n
 
Nếu code Worksheet_Change có target là I5 thì sẽ không chạy vì I5 chứa công thức phải không?
Nếu I5 là công thức tham chiếu đến B3, C4 chẳng hạn như I5 = B3 + C4, thì khi thay đổi 1 trong 2 ô B3 và C4, I5 cũng thay đổi nhưng code không chạy.
Vậy tại sao không lấy 1 trong 2 ô (hoặc cả 2 ô) B3, C4 làm target?
------
Thay vì
If Not Intersect(Target, Range("I5") Is Nothing Then

Thì thay nguồn (gốc) của I5 vào câu lệnh đó?
--------
Không hiểu mà hỏi thì tôi sẵn sàng trả lời, còn nếu ai buông xuôi thì ráng chịu mang tiêng n
Vậy là một trong hai Ô "B3", "C4" phải có tác động thay đổi một cách thủ công phải không ạ. là click chuột vào để thay đổi giá trị của ô ? Nếu là như vậy thì không đúng mục đích ạ. vì "I4" là công thức thời gian tự thay đổi cơ ạ.
 
Nếu code Worksheet_Change có target là I5 thì sẽ không chạy vì I5 chứa công thức phải không?
Nếu I5 là công thức tham chiếu đến B3, C4 chẳng hạn như I5 = B3 + C4, thì khi thay đổi 1 trong 2 ô B3 và C4, I5 cũng thay đổi nhưng code không chạy.
Vậy tại sao không lấy 1 trong 2 ô (hoặc cả 2 ô) B3, C4 làm target?
------
Thay vì
If Not Intersect(Target, Range("I5") Is Nothing Then

Thì thay nguồn (gốc) của I5 vào câu lệnh đó?
Đơn giản lắm luôn mà.
--------
Không hiểu mà hỏi thì tôi sẵn sàng trả lời, còn nếu ai buông xuôi thì ráng chịu mang tiêng n
I5 là hàm month trả về tháng hiện tại bác ạ. Thế nên em mới thử calculate, chắc thêm tên workbook nữa sẽ được.
 
Vậy là một trong hai Ô "B3", "C4" phải có tác động thay đổi một cách thủ công phải không ạ. là click chuột vào để thay đổi giá trị của ô ? Nếu là như vậy thì không đúng mục đích ạ. vì "I4" là công thức thời gian tự thay đổi cơ ạ.
I5 chứ ở đâu mà I4. Cho tới giờ tôi vẫn chưa xem file, chỉ đọc code và nói chuyện lý thuyết (lặp vô tận, chạy hoài, ...).
Sau khi xem vừa rồi thì có sự rất vô lý: (không phải lý thuyết nữa mà là thực hành thực tế:
Ô I5 chứa tháng. Mà lại là tháng hiện tại. Vậy nếu ngày 01/11 tạo chấm công cho tháng 11, trong tháng có người làm người nghỉ phép, người ốm, ... tới cuối ngày 30/11 gởi bảng công đi cho kế toán tính lương . Kế toán sáng 01/12 tính lương thì ngày đã nhảy sang tháng 12, ô I5 đã là 12, ngày công tán loạn lên hết à? Rồi tính lương sai, rồi kiện cáo, ...
Cách làm này tào lao lắm. Phải có ít nhất 1 ô ngày tháng cố định không đổi theo ngày hệ thống (nghĩa là báo cáo tuyệt đối không dùng hàm Today)
- Hoặc là ô I5 gõ tay.
- Hoặc là ô G7 gõ tay, I5 = Month(G7)
Mỗi tháng gõ tay có 1 lần mà lười nữa thì khi sai bảng lương có khi bị đuổi việc.
-----
Còn nữa:
Có mỗi chuyện copy công thức mà cũng lười nữa thì ... Còn muốn học VBA, hãy tìm những file ứng dụng hay hay vào. Đại khái là nếu làm tay mất 3 ngày, code chạy vèo 5, 10 phút thì viết code mới đáng.
I5 là hàm month trả về tháng hiện tại bác ạ. Thế nên em mới thử calculate, chắc thêm tên workbook nữa sẽ được.
Lại vẫn dùng sự kiện Calculate à?
 

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

Back
Top Bottom